diff options
| author | Szczepan Zalega <szczepan@nitrokey.com> | 2019-01-15 17:03:54 +0100 | 
|---|---|---|
| committer | Szczepan Zalega <szczepan@nitrokey.com> | 2019-01-15 17:03:54 +0100 | 
| commit | 6bd77fce8400ecf531a4f7ff56431010b6bbb6f1 (patch) | |
| tree | 2b428a23bddbd87c08ee47351bc31768f54b63fe /unittest | |
| parent | 8d67c0f80aab724d67a1b6efb8af16aa71631a84 (diff) | |
| parent | e853275784e48823be0f39f0855efbe85c0f905c (diff) | |
| download | libnitrokey-6bd77fce8400ecf531a4f7ff56431010b6bbb6f1.tar.gz libnitrokey-6bd77fce8400ecf531a4f7ff56431010b6bbb6f1.tar.bz2 | |
Merge branch 'contributions'
Multiple PR's merged and tested as a whole
Platform:
Pro v0.7
Storage v0.53
Fedora 29
Run Python tests
Diffstat (limited to 'unittest')
| -rw-r--r-- | unittest/requirements.txt | 3 | ||||
| -rw-r--r-- | unittest/test_multiple.py | 29 | ||||
| -rw-r--r-- | unittest/test_multiple_devices.cc | 81 | 
3 files changed, 106 insertions, 7 deletions
| diff --git a/unittest/requirements.txt b/unittest/requirements.txt index 5c0110b..6d718ad 100644 --- a/unittest/requirements.txt +++ b/unittest/requirements.txt @@ -1,4 +1,5 @@  cffi  pytest-repeat  pytest-randomly -oath
\ No newline at end of file +tqdm +oath diff --git a/unittest/test_multiple.py b/unittest/test_multiple.py index 3f1d2d5..821a3b7 100644 --- a/unittest/test_multiple.py +++ b/unittest/test_multiple.py @@ -29,13 +29,40 @@ from tqdm import tqdm  from conftest import skip_if_device_version_lower_than  from constants import DefaultPasswords, DeviceErrorCode, bb -from misc import gs, wait +from misc import gs, wait, ffi  pprint = pprint.PrettyPrinter(indent=4).pprint  @pytest.mark.other  @pytest.mark.info +def test_list_devices(C): +    infos = C.NK_list_devices() +    assert infos != ffi.NULL +    C.NK_free_device_info(infos) + + +@pytest.mark.other +@pytest.mark.info +def test_connect_with_path(C): +    ids = gs(C.NK_list_devices_by_cpuID()) +    # NK_list_devices_by_cpuID already opened the devices, so we have to close +    # them before trying to reconnect +    assert C.NK_logout() == 0 + +    devices_list = ids.split(b';') +    for value in devices_list: +        parts = value.split(b'_p_') +        assert len(parts) < 3 +        if len(parts) == 2: +            path = parts[1] +        else: +            path = parts[0] +        assert C.NK_connect_with_path(path) == 1 + + +@pytest.mark.other +@pytest.mark.info  def test_get_status_storage_multiple(C):      ids = gs(C.NK_list_devices_by_cpuID())      print(ids) diff --git a/unittest/test_multiple_devices.cc b/unittest/test_multiple_devices.cc index cd78681..4b1e2c1 100644 --- a/unittest/test_multiple_devices.cc +++ b/unittest/test_multiple_devices.cc @@ -29,15 +29,40 @@ const char * RFC_SECRET = "12345678901234567890";  #include <iostream>  #include <NitrokeyManager.h>  #include <stick20_commands.h> +#include "../NK_C_API.h"  using namespace nitrokey;  TEST_CASE("List devices", "[BASIC]") { +    auto v = Device::enumerate(); +    REQUIRE(v.size() > 0); +    for (auto i : v){ +        auto d = Device::create(i.m_deviceModel); +        if (!d) { +            std::cout << "Could not create device with model " << i.m_deviceModel << "\n"; +            continue; +        } +        std::cout << i.m_deviceModel << " " << i.m_path << " " +          << i.m_serialNumber << " |"; +        d->set_path(i.m_path); +        d->connect(); +        auto res = GetStatus::CommandTransaction::run(d); +        std::cout << " " << res.data().card_serial_u32 << " " +                  << res.data().get_card_serial_hex() +                  << std::endl; +        d->disconnect(); +    } +} + +TEST_CASE("List Storage devices", "[BASIC]") {      shared_ptr<Stick20> d = make_shared<Stick20>(); -    auto v = d->enumerate(); +    auto v = Device::enumerate();      REQUIRE(v.size() > 0); -    for (auto a : v){ +    for (auto i : v){ +        if (i.m_deviceModel != DeviceModel::STORAGE) +            continue; +        auto a = i.m_path;          std::cout << a;          d->set_path(a);          d->connect(); @@ -53,11 +78,14 @@ TEST_CASE("List devices", "[BASIC]") {  TEST_CASE("Regenerate AES keys", "[BASIC]") {      shared_ptr<Stick20> d = make_shared<Stick20>(); -    auto v = d->enumerate(); +    auto v = Device::enumerate();      REQUIRE(v.size() > 0);      std::vector<shared_ptr<Stick20>> devices; -    for (auto a : v){ +    for (auto i : v){ +        if (i.m_deviceModel != DeviceModel::STORAGE) +            continue; +        auto a = i.m_path;          std::cout << a << endl;          d = make_shared<Stick20>();          d->set_path(a); @@ -81,14 +109,57 @@ TEST_CASE("Regenerate AES keys", "[BASIC]") {  } +TEST_CASE("Use C API", "[BASIC]") { +    auto ptr = NK_list_devices(); +    auto first_ptr = ptr; +    REQUIRE(ptr != nullptr); + +    while (ptr) { +      std::cout << "Connect with: " << ptr->model << " " << ptr->path << " " +        << ptr->serial_number << " | " << NK_connect_with_path(ptr->path) << " | "; +      auto status = NK_status(); +      std::cout << status << std::endl; +      free(status); +      ptr = ptr->next; +    } + +    NK_free_device_info(first_ptr); +} + +  TEST_CASE("Use API", "[BASIC]") {      auto nm = NitrokeyManager::instance();      nm->set_loglevel(2);      auto v = nm->list_devices();      REQUIRE(v.size() > 0); +    for (auto i : v) { +      std::cout << "Connect with: " << i.m_deviceModel << " " << i.m_path << " " +        << i.m_serialNumber << " | " << std::boolalpha << nm->connect_with_path(i.m_path) << " |"; +      try { +        auto status = nm->get_status(); +        std::cout << " " << status.card_serial_u32 << " " +                  << status.get_card_serial_hex() +                  << std::endl; +      } catch (const LongOperationInProgressException &e) { +        std::cout << "long operation in progress on " << i.m_path +          << " " << std::to_string(e.progress_bar_value) << std::endl; +      } +    } +} + + +TEST_CASE("Use Storage API", "[BASIC]") { +    auto nm = NitrokeyManager::instance(); +    nm->set_loglevel(2); +    auto v = nm->list_devices(); +    REQUIRE(v.size() > 0); +      for (int i=0; i<10; i++){ -        for (auto a : v) { +        for (auto i : v) { +            if (i.m_deviceModel != DeviceModel::STORAGE) +                continue; +            auto a = i.m_path;              std::cout <<"Connect with: " << a <<              " " << std::boolalpha << nm->connect_with_path(a) << " ";              try{ | 
