diff options
| author | Szczepan Zalega <szczepan@nitrokey.com> | 2018-02-23 16:03:16 +0100 | 
|---|---|---|
| committer | Szczepan Zalega <szczepan@nitrokey.com> | 2018-02-23 16:03:16 +0100 | 
| commit | d5486ba77235a874245fbee07a75cea89fa59ea2 (patch) | |
| tree | 7f2df53da4c018fbfa6ec57809bcd2fcefaf0624 /unittest | |
| parent | 102ee60cd8ee9e5ce263de1d4a775acf29f37fbc (diff) | |
| parent | a262472826830ea0a98a4da2fa8f665d359b8789 (diff) | |
| download | libnitrokey-d5486ba77235a874245fbee07a75cea89fa59ea2.tar.gz libnitrokey-d5486ba77235a874245fbee07a75cea89fa59ea2.tar.bz2 | |
Merge branch 'wip-support_storage_v0.51'
Support for functionality added in v0.49/v0.51
Diffstat (limited to 'unittest')
| -rw-r--r-- | unittest/conftest.py | 13 | ||||
| -rw-r--r-- | unittest/test_C_API.cpp | 6 | ||||
| -rw-r--r-- | unittest/test_storage.py | 34 | 
3 files changed, 47 insertions, 6 deletions
| diff --git a/unittest/conftest.py b/unittest/conftest.py index 8f386e0..49f1502 100644 --- a/unittest/conftest.py +++ b/unittest/conftest.py @@ -34,7 +34,7 @@ def skip_if_device_version_lower_than(allowed_devices):  @pytest.fixture(scope="module") -def C(request): +def C(request=None):      fp = '../NK_C_API.h'      declarations = [] @@ -77,15 +77,17 @@ def C(request):          print("No library file found")          sys.exit(1) -    C.NK_set_debug(False) +    C.NK_set_debug_level(int(os.environ.get('LIBNK_DEBUG', 2))) +      nk_login = C.NK_login_auto()      if nk_login != 1:          print('No devices detected!')      assert nk_login != 0  # returns 0 if not connected or wrong model or 1 when connected      global device_type -    firmware_version = C.NK_get_major_firmware_version() +    firmware_version = C.NK_get_minor_firmware_version()      model = 'P' if firmware_version in [7,8] else 'S'      device_type = (model, firmware_version) +    print('Connected device: {} {}'.format(model, firmware_version))      # assert C.NK_first_authenticate(DefaultPasswords.ADMIN, DefaultPasswords.ADMIN_TEMP) == DeviceErrorCode.STATUS_OK      # assert C.NK_user_authenticate(DefaultPasswords.USER, DefaultPasswords.USER_TEMP) == DeviceErrorCode.STATUS_OK @@ -97,8 +99,9 @@ def C(request):          C.NK_logout()          print('Finished') -    request.addfinalizer(fin) +    if request: +        request.addfinalizer(fin)      # C.NK_set_debug(True) -    C.NK_set_debug_level(3) +    C.NK_set_debug_level(int(os.environ.get('LIBNK_DEBUG', 3)))      return C diff --git a/unittest/test_C_API.cpp b/unittest/test_C_API.cpp index d5076c4..be47f08 100644 --- a/unittest/test_C_API.cpp +++ b/unittest/test_C_API.cpp @@ -28,8 +28,10 @@ static const int TOO_LONG_STRING = 200;  #include "log.h"  #include "../NK_C_API.h" +int login; +  TEST_CASE("C API connect", "[BASIC]") { -  auto login = NK_login_auto(); +  login = NK_login_auto();    REQUIRE(login != 0);    NK_logout();    login = NK_login_auto(); @@ -40,11 +42,13 @@ TEST_CASE("C API connect", "[BASIC]") {  }  TEST_CASE("Check retry count", "[BASIC]") { +  REQUIRE(login != 0);    REQUIRE(NK_get_admin_retry_count() == 3);    REQUIRE(NK_get_user_retry_count() == 3);  }  TEST_CASE("Check long strings", "[STANDARD]") { +  REQUIRE(login != 0);    const char* longPin = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";    const char* pin = "123123123";    auto result = NK_change_user_PIN(longPin, pin); diff --git a/unittest/test_storage.py b/unittest/test_storage.py index 67bbf8b..096709d 100644 --- a/unittest/test_storage.py +++ b/unittest/test_storage.py @@ -53,6 +53,8 @@ def test_get_status_storage(C):      status_dict = get_dict_from_dissect(status_string.decode('ascii'))      default_admin_password_retry_count = 3      assert int(status_dict['AdminPwRetryCount']) == default_admin_password_retry_count +    print('C.NK_get_major_firmware_version(): {}'.format(C.NK_get_major_firmware_version())) +    print('C.NK_get_minor_firmware_version(): {}'.format(C.NK_get_minor_firmware_version()))  @pytest.mark.other @@ -244,6 +246,8 @@ def test_hidden_volume_corruption(C):      hidden_volume_password = b'hiddenpassword'      p = lambda i: hidden_volume_password + bb(str(i))      volumes_to_setup = 4 +    assert C.NK_lock_device() == DeviceErrorCode.STATUS_OK +    assert C.NK_unlock_encrypted_volume(DefaultPasswords.USER) == DeviceErrorCode.STATUS_OK      for i in range(volumes_to_setup):          assert C.NK_create_hidden_volume(i, 20 + i * 10, 20 + i * 10 + i + 1, p(i)) == DeviceErrorCode.STATUS_OK          assert C.NK_unlock_hidden_volume(p(i)) == DeviceErrorCode.STATUS_OK @@ -273,6 +277,36 @@ def test_unencrypted_volume_set_read_write(C):      assert C.NK_set_unencrypted_read_write(DefaultPasswords.USER) == DeviceErrorCode.STATUS_OK +@pytest.mark.unencrypted +def test_unencrypted_volume_set_read_only_admin(C): +    skip_if_device_version_lower_than({'S': 51}) +    assert C.NK_lock_device() == DeviceErrorCode.STATUS_OK +    assert C.NK_set_unencrypted_read_only_admin(DefaultPasswords.ADMIN) == DeviceErrorCode.STATUS_OK + + +@pytest.mark.unencrypted +def test_unencrypted_volume_set_read_write_admin(C): +    skip_if_device_version_lower_than({'S': 51}) +    assert C.NK_lock_device() == DeviceErrorCode.STATUS_OK +    assert C.NK_set_unencrypted_read_write_admin(DefaultPasswords.ADMIN) == DeviceErrorCode.STATUS_OK + + +@pytest.mark.encrypted +@pytest.mark.skip(reason='not supported on recent firmware, except v0.49') +def test_encrypted_volume_set_read_only(C): +    skip_if_device_version_lower_than({'S': 99}) +    assert C.NK_lock_device() == DeviceErrorCode.STATUS_OK +    assert C.NK_set_encrypted_read_only(DefaultPasswords.ADMIN) == DeviceErrorCode.STATUS_OK + + +@pytest.mark.encrypted +@pytest.mark.skip(reason='not supported on recent firmware, except v0.49') +def test_encrypted_volume_set_read_write(C): +    skip_if_device_version_lower_than({'S': 99}) +    assert C.NK_lock_device() == DeviceErrorCode.STATUS_OK +    assert C.NK_set_encrypted_read_write(DefaultPasswords.ADMIN) == DeviceErrorCode.STATUS_OK + +  @pytest.mark.other  def test_export_firmware(C):      skip_if_device_version_lower_than({'S': 43}) | 
