From 64360d7c6e10bdb6e23eadbca9799ca15144f960 Mon Sep 17 00:00:00 2001 From: Krzysztof Jackiewicz Date: Mon, 11 May 2020 09:56:33 +0200 Subject: [PATCH] Improve async getters' tests Received item is not checked in async tests. It may as well be empty. Compare retrieved object with saved one. Change-Id: I0a6dbe988791accd308c7fe138531eac220b9279 --- src/ckm/unprivileged/async-api.cpp | 204 +++++++++++++++++++++++++++---------- 1 file changed, 152 insertions(+), 52 deletions(-) diff --git a/src/ckm/unprivileged/async-api.cpp b/src/ckm/unprivileged/async-api.cpp index e768a00..85b9acd 100644 --- a/src/ckm/unprivileged/async-api.cpp +++ b/src/ckm/unprivileged/async-api.cpp @@ -1,7 +1,5 @@ /* - * Copyright (c) 2000 - 2019 Samsung Electronics Co., Ltd All Rights Reserved - * - * Contact: Bumjin Im + * Copyright (c) 2016 - 2020 Samsung Electronics Co., Ltd All Rights Reserved * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -65,7 +63,7 @@ class MyObserver: public ManagerAsync::Observer { public: MyObserver() : - m_finished(false), m_error(0) + m_finished(false), m_error(0), m_ocspStatus(0) { } @@ -76,40 +74,118 @@ public: m_cv.notify_one(); } - void ReceivedSaveKey() { Succeeded(); } - void ReceivedSaveCertificate() { Succeeded(); } - void ReceivedSaveData() { Succeeded(); } - void ReceivedSavePKCS12() { Succeeded(); } - - void ReceivedRemovedAlias() { Succeeded(); } - - void ReceivedKey(Key &&) { Succeeded(); } - void ReceivedCertificate(Certificate &&) { Succeeded(); } - void ReceivedData(RawBuffer &&) { Succeeded(); } - void ReceivedPKCS12(PKCS12ShPtr && pkcs) { m_pkcs = pkcs; Succeeded(); } - - void ReceivedKeyAliasVector(AliasVector && av) { m_aliases = move(av); Succeeded(); } - void ReceivedCertificateAliasVector(AliasVector && av) { m_aliases = move(av); Succeeded(); } - void ReceivedDataAliasVector(AliasVector && av) { m_aliases = move(av); Succeeded(); } + void ReceivedSaveKey() + { + Succeeded(); + } + void ReceivedSaveCertificate() + { + Succeeded(); + } + void ReceivedSaveData() + { + Succeeded(); + } + void ReceivedSavePKCS12() + { + Succeeded(); + } + void ReceivedRemovedAlias() + { + Succeeded(); + } + void ReceivedKey(Key && key) + { + m_data = move(key.getDER()); + Succeeded(); + } + void ReceivedCertificate(Certificate && cert) + { + m_data = move(cert.getDER()); + Succeeded(); + } + void ReceivedData(RawBuffer && data) + { + m_data = move(data); + Succeeded(); + } + void ReceivedPKCS12(PKCS12ShPtr && pkcs) + { + m_pkcs = move(pkcs); + Succeeded(); + } + void ReceivedKeyAliasVector(AliasVector && av) + { + m_aliases = move(av); + Succeeded(); + } + void ReceivedCertificateAliasVector(AliasVector && av) + { + m_aliases = move(av); + Succeeded(); + } + void ReceivedDataAliasVector(AliasVector && av) + { + m_aliases = move(av); + Succeeded(); + } + void ReceivedCreateKeyAES() + { + Succeeded(); + } + void ReceivedCreateKeyPair() + { + Succeeded(); + } + void ReceivedGetCertificateChain(CertificateShPtrVector && chain) + { + m_certChain = move(chain); + Succeeded(); + } + void ReceivedCreateSignature(RawBuffer && buffer) + { + m_signed = move(buffer); + Succeeded(); + } + void ReceivedVerifySignature() + { + Succeeded(); + } + void ReceivedOCSPCheck(int status) + { + m_ocspStatus = status; + Succeeded(); + } + void ReceivedSetPermission() + { + Succeeded(); + } - void ReceivedCreateKeyAES() { Succeeded(); } - void ReceivedCreateKeyPair() { Succeeded(); } + void WaitForResponse() + { + unique_lock < mutex > lock(m_mutex); - void ReceivedGetCertificateChain(CertificateShPtrVector && chain) - { m_certChain = move(chain); Succeeded(); } + m_cv.wait(lock, [this] {return m_finished;}); - void ReceivedCreateSignature(RawBuffer && buffer) { m_signed = move(buffer); Succeeded(); } - void ReceivedVerifySignature() { Succeeded(); } + RUNNER_ASSERT_MSG(m_finished, "Request is not finished!"); + m_finished = false; + } - void ReceivedOCSPCheck(int status) { m_ocspStatus = status; Succeeded(); } + void WaitForSuccess() + { + WaitForResponse(); - void ReceivedSetPermission() { Succeeded(); } + RUNNER_ASSERT_MSG(m_error == 0, + "Request failed " << m_error << "/" << APICodeToString(m_error)); + } - void WaitForResponse() + void WaitFor(int expected) { - unique_lock < mutex > lock(m_mutex); + WaitForResponse(); - m_cv.wait(lock, [this] {return m_finished;}); + RUNNER_ASSERT_MSG(m_error == expected, + "Expected " << expected << "/" << APICodeToString(expected) << + " got: " << m_error << "/" << APICodeToString(m_error)); } bool m_finished; @@ -119,6 +195,7 @@ public: PKCS12ShPtr m_pkcs; RawBuffer m_signed; int m_ocspStatus; + RawBuffer m_data; protected: void Succeeded() @@ -324,13 +401,7 @@ void test_negative(F&& func, int expected, Args... args) ManagerAsync mgr; (mgr.*func)(static_pointer_cast < ManagerAsync::Observer > (obs), args...); - obs->WaitForResponse(); - - RUNNER_ASSERT_MSG(obs->m_finished, "Request is not finished!"); - RUNNER_ASSERT_MSG( - obs->m_error == expected, - "Expected " << expected << "/" << APICodeToString(expected) << - " got: " << obs->m_error << "/" << APICodeToString(obs->m_error)); + obs->WaitFor(expected); } template @@ -346,11 +417,7 @@ MyObserverPtr test_positive(F&& func, Args... args) ManagerAsync mgr; (mgr.*func)(static_pointer_cast < ManagerAsync::Observer > (obs), args...); - obs->WaitForResponse(); - - RUNNER_ASSERT_MSG(obs->m_finished, "Request is not finished!"); - RUNNER_ASSERT_MSG(obs->m_error == 0, - "Request failed " << obs->m_error << "/" << APICodeToString(obs->m_error)); + obs->WaitForSuccess(); return obs; } @@ -577,12 +644,25 @@ RUNNER_TEST(TA0640_get_key_wrong_password, UserEnv) RUNNER_TEST(TA0650_get_key_positive, UserEnv) { - test_positive(&ManagerAsync::saveKey, "alias_RSA", keys[RSA][0].prv, Policy("password")); - test_positive(&ManagerAsync::getKey, "alias_RSA", "password"); - test_positive(&ManagerAsync::saveKey, "alias_DSA", keys[DSA][0].prv, Policy("password")); - test_positive(&ManagerAsync::getKey, "alias_DSA", "password"); - test_positive(&ManagerAsync::saveKey, "alias_AES", keys[AES][0].prv, Policy("password")); - test_positive(&ManagerAsync::getKey, "alias_AES", "password"); + MyObserverPtr obs = make_shared(); + ManagerAsync mgr; + + auto saveGetKey = [&](const string& alias, const KeyShPtr& key){ + static constexpr char PASS[] = "password"; + mgr.saveKey(obs, alias, key, Policy(PASS)); + obs->WaitForSuccess(); + mgr.getKey(obs, alias, PASS); + obs->WaitForSuccess(); + RUNNER_ASSERT_MSG(obs->m_data == key->getDER(), "Received key does not match"); + }; + + saveGetKey("alias_RSA_prv", keys[RSA][0].prv); + saveGetKey("alias_RSA_pub", keys[RSA][0].pub); + saveGetKey("alias_DSA_prv", keys[DSA][0].prv); + saveGetKey("alias_DSA_pub", keys[DSA][0].pub); + saveGetKey("alias_ECDSA_prv", keys[ECDSA][0].prv); + saveGetKey("alias_ECDSA_pub", keys[ECDSA][0].pub); + saveGetKey("alias_AES", keys[AES][0].prv); } @@ -615,8 +695,19 @@ RUNNER_TEST(TA0740_get_cert_wrong_password, UserEnv) RUNNER_TEST(TA0750_get_cert_positive, UserEnv) { - test_positive(&ManagerAsync::saveCertificate, "alias", getTestCertificate(OCSP_AVAILABLE_LEAF), Policy("password")); - test_positive(&ManagerAsync::getCertificate, "alias", "password"); + MyObserverPtr obs = make_shared(); + ManagerAsync mgr; + + static constexpr char PASS[] = "password"; + static constexpr char ALIAS[] = "alias"; + + const auto cert = getTestCertificate(OCSP_AVAILABLE_LEAF); + + mgr.saveCertificate(obs, ALIAS, cert, Policy(PASS)); + obs->WaitForSuccess(); + mgr.getCertificate(obs, ALIAS, PASS); + obs->WaitForSuccess(); + RUNNER_ASSERT_MSG(obs->m_data == cert->getDER(), "Received cert does not match"); } @@ -643,8 +734,17 @@ RUNNER_TEST(TA0840_get_data_wrong_password, UserEnv) RUNNER_TEST(TA0850_get_data_positive, UserEnv) { - test_positive(&ManagerAsync::saveData, "alias", test_buffer, Policy("password")); - test_positive(&ManagerAsync::getData, "alias", "password"); + MyObserverPtr obs = make_shared(); + ManagerAsync mgr; + + static constexpr char PASS[] = "password"; + static constexpr char ALIAS[] = "alias"; + + mgr.saveData(obs, ALIAS, test_buffer, Policy(PASS)); + obs->WaitForSuccess(); + mgr.getData(obs, ALIAS, PASS); + obs->WaitForSuccess(); + RUNNER_ASSERT_MSG(obs->m_data == test_buffer, "Received data does not match"); } -- 2.7.4