diff options
| author | Szczepan Zalega <szczepan@nitrokey.com> | 2018-06-20 10:17:30 +0200 | 
|---|---|---|
| committer | Szczepan Zalega <szczepan@nitrokey.com> | 2018-06-20 10:17:30 +0200 | 
| commit | ee6c9c61b93fae7e041abb19e42134d3a831a846 (patch) | |
| tree | e411acfde373704febf61e4a2662b7ae77f8e2fd | |
| parent | e1ef8d79809190c5ac5d540bd4aa376dcfda7e93 (diff) | |
| parent | a71507ba0ca4643201c4ceb3d4dfc0f6dd5ae770 (diff) | |
| download | libnitrokey-ee6c9c61b93fae7e041abb19e42134d3a831a846.tar.gz libnitrokey-ee6c9c61b93fae7e041abb19e42134d3a831a846.tar.bz2 | |
Merge branch 'pr_115'
Fix connect() return value in offline mode
Fixes #115
| -rw-r--r-- | NitrokeyManager.cc | 4 | ||||
| -rw-r--r-- | device.cc | 6 | ||||
| -rw-r--r-- | unittest/test_offline.cc | 25 | 
3 files changed, 32 insertions, 3 deletions
| diff --git a/NitrokeyManager.cc b/NitrokeyManager.cc index addfdbf..ab4cac5 100644 --- a/NitrokeyManager.cc +++ b/NitrokeyManager.cc @@ -234,12 +234,14 @@ using nitrokey::misc::strcpyT;      bool NitrokeyManager::connect() {          std::lock_guard<std::mutex> lock(mex_dev_com_manager);          vector< shared_ptr<Device> > devices = { make_shared<Stick10>(), make_shared<Stick20>() }; +        bool connected = false;          for( auto & d : devices ){              if (d->connect()){                  device = std::shared_ptr<Device>(d); +                connected = true;              }          } -        return device != nullptr; +        return connected;      } @@ -69,8 +69,10 @@ bool Device::_disconnect() {    LOG(std::string(__FUNCTION__) + std::string(m_model == DeviceModel::PRO ? "PRO" : "STORAGE"), Loglevel::DEBUG_L2);    LOG(std::string(__FUNCTION__) +  std::string(" *IN* "), Loglevel::DEBUG_L2); -  LOG(std::string("Disconnection: handle already freed: ") + std::to_string(mp_devhandle == nullptr) + " ("+m_path+")", Loglevel::DEBUG_L1); -  if(mp_devhandle == nullptr) return false; +  if(mp_devhandle == nullptr) { +    LOG(std::string("Disconnection: handle already freed: ") + std::to_string(mp_devhandle == nullptr) + " ("+m_path+")", Loglevel::DEBUG_L1); +    return false; +  }    hid_close(mp_devhandle);    mp_devhandle = nullptr; diff --git a/unittest/test_offline.cc b/unittest/test_offline.cc index aad875f..9d2f195 100644 --- a/unittest/test_offline.cc +++ b/unittest/test_offline.cc @@ -171,3 +171,28 @@ TEST_CASE("Test version getter", "[fast]") {    REQUIRE(s.length() >= 8);    REQUIRE(s.find("g") != std::string::npos);  } + +TEST_CASE("Connect should not return true after the second attempt", "[fast]") { +  int result = 0; + +  result = NK_login("S"); +  REQUIRE(result == 0); + +  result = NK_login_auto(); +  REQUIRE(result == 0); + +  result = NK_logout(); +  REQUIRE(result == 0); + +  result = NK_logout(); +  REQUIRE(result == 0); + +  result = NK_login("P"); +  REQUIRE(result == 0); + +  result = NK_login_auto(); +  REQUIRE(result == 0); + +  result = NK_logout(); +  REQUIRE(result == 0); +} | 
