summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSzczepan Zalega <szczepan@nitrokey.com>2018-06-20 10:17:30 +0200
committerSzczepan Zalega <szczepan@nitrokey.com>2018-06-20 10:17:30 +0200
commitee6c9c61b93fae7e041abb19e42134d3a831a846 (patch)
treee411acfde373704febf61e4a2662b7ae77f8e2fd
parente1ef8d79809190c5ac5d540bd4aa376dcfda7e93 (diff)
parenta71507ba0ca4643201c4ceb3d4dfc0f6dd5ae770 (diff)
downloadlibnitrokey-ee6c9c61b93fae7e041abb19e42134d3a831a846.tar.gz
libnitrokey-ee6c9c61b93fae7e041abb19e42134d3a831a846.tar.bz2
Merge branch 'pr_115'
Fix connect() return value in offline mode Fixes #115
-rw-r--r--NitrokeyManager.cc4
-rw-r--r--device.cc6
-rw-r--r--unittest/test_offline.cc25
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;
}
diff --git a/device.cc b/device.cc
index da54e33..80e4b38 100644
--- a/device.cc
+++ b/device.cc
@@ -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);
+}