Improve async getters' tests 03/233003/3
authorKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Mon, 11 May 2020 07:56:33 +0000 (09:56 +0200)
committerKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Wed, 20 May 2020 11:22:55 +0000 (13:22 +0200)
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

index e768a00..85b9acd 100644 (file)
@@ -1,7 +1,5 @@
 /*
- *  Copyright (c) 2000 - 2019 Samsung Electronics Co., Ltd All Rights Reserved
- *
- *  Contact: Bumjin Im <bj.im@samsung.com>
+ *  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 <typename F, typename... Args>
@@ -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<MyObserver>();
+    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<MyObserver>();
+    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<MyObserver>();
+    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");
 }