Add test cases for installCertificateToStore on server 59/312759/27
authorPhan Xuan Tan <xuan.tan@samsung.com>
Fri, 14 Jun 2024 02:22:43 +0000 (09:22 +0700)
committerDariusz Michaluk <d.michaluk@samsung.com>
Wed, 3 Jul 2024 08:42:28 +0000 (08:42 +0000)
Change-Id: Ic58f75198ff6e94850493403b157f6413ac95b1f

unit-tests/CMakeLists.txt
unit-tests/test_cert_server_logic.cpp [new file with mode: 0644]
unit-tests/test_constant.cpp
unit-tests/test_constant.h

index f8b6092..01f2dab 100644 (file)
@@ -68,6 +68,7 @@ SET(UNIT_TESTS_SOURCES
     test_vcore_certificate_collection.cpp
     test_vcore_api_cert.cpp
     test_cert_server_db.cpp
+    test_cert_server_logic.cpp
     colour_log_formatter.cpp
     ${PROJECT_SOURCE_DIR}/src/server/src/cert-server-logic.c
     ${PROJECT_SOURCE_DIR}/src/server/src/cert-server-db.c
diff --git a/unit-tests/test_cert_server_logic.cpp b/unit-tests/test_cert_server_logic.cpp
new file mode 100644 (file)
index 0000000..e296220
--- /dev/null
@@ -0,0 +1,196 @@
+/*
+ * Copyright (c) 2024 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.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+#include "cert-svc/ccert.h"
+#include "cert-svc/cerror.h"
+#include "test_constant.h"
+#include "test_macros.h"
+#include "vcore/Client.h"
+#include <openssl/bio.h>
+#include <openssl/pem.h>
+#include <openssl/x509.h>
+
+extern "C"
+{
+       #include "cert-server-db.h"
+       #include "cert-server-logic.h"
+}
+
+static const std::string gNamePrexif = "gname_sever_";
+static const std::string commonNamePrefix = "TEST_sever_";
+
+const std::map<std::string, CertStoreType> storeTypeMap =
+{
+       {"vpn_", VPN_STORE},
+       {"email_", EMAIL_STORE},
+       {"wifi_", WIFI_STORE}
+};
+
+
+BOOST_AUTO_TEST_SUITE(CERT_SERVER_LOGIC_TEST)
+
+POSITIVE_TEST_CASE(T_install_certificate_to_store)
+{
+       int result;
+       std::string gName, commonName;
+       std::string gNamePKey, commonNamePKey;
+
+       result = initialize_db();
+       BOOST_CHECK_EQUAL(result, CERTSVC_SUCCESS);
+
+       for(auto storeType: storeTypeMap)
+       {
+               gName = gNamePrexif + storeType.first + std::to_string(PEM_CRT);
+               commonName = commonNamePrefix + storeType.first + std::to_string(PEM_CRT);
+               result = installCertificateToStore(
+                       storeType.second,
+                       gName.c_str(),
+                       commonName.c_str(),
+                       NULL,
+                       NULL,
+                       PemCertInfo::CertPEM.c_str(),
+                       PEM_CRT);
+               BOOST_CHECK_EQUAL(result, CERTSVC_SUCCESS);
+
+               gNamePKey = gNamePrexif + storeType.first + std::to_string(P12_PKEY);
+               commonNamePKey = commonNamePrefix + storeType.first + std::to_string(P12_PKEY);
+               result = installCertificateToStore(
+                       storeType.second,
+                       gNamePKey.c_str(),
+                       commonNamePKey.c_str(),
+                       NULL,
+                       NULL,
+                       P12CertInfo::PrivateKey.c_str(),
+                       P12_PKEY);
+               BOOST_CHECK_EQUAL(result, CERTSVC_SUCCESS);
+
+               gName = gNamePrexif + storeType.first + std::to_string(P12_END_USER);
+               commonName = commonNamePrefix + storeType.first + std::to_string(P12_END_USER);
+               result = installCertificateToStore(
+                       storeType.second,
+                       gName.c_str(),
+                       commonName.c_str(),
+                       gNamePKey.c_str(),
+                       gName.c_str(),
+                       P12CertInfo::EndUserCert.c_str(),
+                       P12_END_USER);
+               BOOST_CHECK_EQUAL(result, CERTSVC_SUCCESS);
+
+               gName = gNamePrexif + storeType.first + std::to_string(P12_INTERMEDIATE);
+               commonName = commonNamePrefix + storeType.first + std::to_string(P12_INTERMEDIATE);
+               result = installCertificateToStore(
+                       storeType.second,
+                       gName.c_str(),
+                       commonName.c_str(),
+                       NULL,
+                       gName.c_str(),
+                       PemCertInfo::CertPEM.c_str(),
+                       P12_INTERMEDIATE);
+               BOOST_CHECK_EQUAL(result, CERTSVC_SUCCESS);
+       }
+
+       deinitialize_db();
+}
+
+NEGATIVE_TEST_CASE(T_install_certificate_to_store)
+{
+       int result;
+       const char *certData = "";
+       std::string gName, commonName;
+
+       result = initialize_db();
+       BOOST_CHECK_EQUAL(result, CERTSVC_SUCCESS);
+
+       for(auto storeType: storeTypeMap)
+       {
+               gName = gNamePrexif + storeType.first + std::to_string(PEM_CRT);
+               commonName = commonNamePrefix + storeType.first + std::to_string(PEM_CRT);
+
+               result = installCertificateToStore(
+                       storeType.second,
+                       gName.c_str(),
+                       commonName.c_str(),
+                       NULL,
+                       NULL,
+                       PemCertInfo::CertPEM.c_str(),
+                       PEM_CRT);
+               BOOST_CHECK_EQUAL(result, CERTSVC_FAIL);
+
+               result = installCertificateToStore(
+                       storeType.second,
+                       gNamePrexif.c_str(),
+                       commonNamePrefix.c_str(),
+                       NULL,
+                       NULL,
+                       certData,
+                       PEM_CRT);
+               BOOST_CHECK_EQUAL(result, CERTSVC_FAIL);
+
+               result = installCertificateToStore(
+                       storeType.second,
+                       NULL,
+                       commonName.c_str(),
+                       NULL,
+                       NULL,
+                       PemCertInfo::CertPEM.c_str(),
+                       PEM_CRT);
+               BOOST_CHECK_EQUAL(result, CERTSVC_WRONG_ARGUMENT);
+
+               result = installCertificateToStore(
+                       storeType.second,
+                       gName.c_str(),
+                       commonName.c_str(),
+                       NULL,
+                       NULL,
+                       NULL,
+                       PEM_CRT);
+               BOOST_CHECK_EQUAL(result, CERTSVC_FAIL);
+
+               result = installCertificateToStore(
+                       storeType.second,
+                       gName.c_str(),
+                       commonName.c_str(),
+                       NULL,
+                       NULL,
+                       PemCertInfo::CertPEM.c_str(),
+                       INVALID_DATA);
+               BOOST_CHECK_EQUAL(result, CERTSVC_BAD_ALLOC);
+       }
+
+       result = installCertificateToStore(
+               SYSTEM_STORE,
+               gNamePrexif.c_str(),
+               commonNamePrefix.c_str(),
+               NULL,
+               NULL,
+               PemCertInfo::CertPEM.c_str(),
+               PEM_CRT);
+       BOOST_CHECK_EQUAL(result, CERTSVC_FAIL);
+
+       result = installCertificateToStore(
+               NONE_STORE,
+               gNamePrexif.c_str(),
+               commonNamePrefix.c_str(),
+               NULL,
+               NULL,
+               PemCertInfo::CertPEM.c_str(),
+               PEM_CRT);
+       BOOST_CHECK_EQUAL(result, CERTSVC_FAIL);
+
+       deinitialize_db();
+}
+
+BOOST_AUTO_TEST_SUITE_END()
\ No newline at end of file
index e500b09..031bff9 100644 (file)
@@ -17,7 +17,6 @@
 #include "test_constant.h"
 
 namespace ServerCertInfo {
-
        const std::string ServerCertPemWithoutPassPath =
                std::string(TESTAPP_RES_DIR) +
                "unit_test_data/server_without_pass_cert.pem";
@@ -81,3 +80,94 @@ namespace ServerCertInfo {
 
        const std::string SubjectCommonName = "Tizen Security Root";
 }
+namespace PemCertInfo {
+       const std::string CertPEM =
+               "-----BEGIN CERTIFICATE-----\n"
+               "MIIECTCCAvGgAwIBAgIUJAGz+mRqwlXYGjX1yux4B/FcRq4wDQYJKoZIhvcNAQEL\n"
+               "BQAwgZMxCzAJBgNVBAYTAlZOMQ8wDQYDVQQIDAZIYSBOb2kxFDASBgNVBAcMC05h\n"
+               "bSBUdSBMaWVtMRAwDgYDVQQKDAdTYW1zdW5nMQwwCgYDVQQLDANTUlYxHDAaBgNV\n"
+               "BAMME1RpemVuIFNlY3VyaXR5IFJvb3QxHzAdBgkqhkiG9w0BCQEWEHRlc3RAc2Ft\n"
+               "c3VuZy5jb20wHhcNMjQwNTMxMDI1NzEwWhcNMzQwNTI5MDI1NzEwWjCBkzELMAkG\n"
+               "A1UEBhMCVk4xDzANBgNVBAgMBkhhIE5vaTEUMBIGA1UEBwwLTmFtIFR1IExpZW0x\n"
+               "EDAOBgNVBAoMB1NhbXN1bmcxDDAKBgNVBAsMA1NSVjEcMBoGA1UEAwwTVGl6ZW4g\n"
+               "U2VjdXJpdHkgUm9vdDEfMB0GCSqGSIb3DQEJARYQdGVzdEBzYW1zdW5nLmNvbTCC\n"
+               "ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMN6OOuMLFIeNxeNpzFfqK12\n"
+               "SRtdLBgv5tg+B0Fau7ju6kcFLq30Ah4F4xWqHZvJVoJJkdjJabWl35xP2klGcd8C\n"
+               "bnKGqs4BP6zOqaoDGP9Qtll4mQxxx+ikqmwMHWtJz6PiqGrGYgMM2C1C+6487wbI\n"
+               "tm/qJMZCO10d4dISFN3U/3nG4mObwPjzjZ7w4cgQos1BKs4QPcIyZEghevFDgPYo\n"
+               "wWc+LmVOvw+pEhDYIMGdQsj+bSSxORCyRlQ40eE7ihzU50v0ntQ1jr4SjX9PvCeS\n"
+               "kgLddhsamEQa13PaePu43CI5ysM7sZRArDZT4DJ6vPCPdtBqjCwAyzay6XNK4R8C\n"
+               "AwEAAaNTMFEwHQYDVR0OBBYEFL8hSjsVEZXe5CpQ1N22EbDdLmAMMB8GA1UdIwQY\n"
+               "MBaAFL8hSjsVEZXe5CpQ1N22EbDdLmAMMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI\n"
+               "hvcNAQELBQADggEBACFfl5g6lsYaz5MLXuUylkc8XsKjqq2/97KM6L7wmNMil2wR\n"
+               "mKbh2efo3hhPOfI66K9oUc69BzOQMgcP8WOptI4GfWOD4/Zk13zqy7Ad2hKvI5qh\n"
+               "YtQgVHLQrvNGLGX3FP6nkmR8RrfITy5gwL7U2UGU05JfKuq3qtQgpSkSKMSVmnUw\n"
+               "Awj0T57x0fQ/9nYjQcah5GBFCMzard/IAwwgjy6jrFxxGJFcirNfO1T78j54wjIH\n"
+               "EX2iy0iW8O45KezqekrC3bg9nmZce5A3eiC+ufj1HO+vNo1y9aLOMy3PYbW0zCS+\n"
+               "FD6OKm3pEwSEf+9clT3f+9dwTrQgo/HdKO72uQM=\n"
+               "-----END CERTIFICATE-----\n";
+
+       const std::string SubjectName =
+               "/C=VN/ST=Ha Noi/L=Nam Tu Liem/O=Samsung/OU=SRV/CN=Tizen Security Root/"
+               "emailAddress=test@samsung.com";
+}
+
+namespace P12CertInfo {
+       const std::string PrivateKey =
+               "-----BEGIN PRIVATE KEY-----\n"
+               "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDgVoaEKZLu0zFY\n"
+               "sRgq9Gyapmc9SK9sc87/+XwH5RmrpM/3Kwq3aFt51FSnc6BQVdZUxe7P/ZVPfXIK\n"
+               "i/bKd8l/2qKou2qpUj6iy9+LIIDjXE31joUuQ4YCde8VoYb6TMoWeHxRCkcLMV+7\n"
+               "U7+X7+KYZ2tvNZV0TYa9cJujCHwOHz6bHJczREre0IkTUik5+N0CP7fVf3hGIqpr\n"
+               "eluZoiVdMuhORZ//wTCkdc18Y9GFKGEkS2ujKeXXJJ5tOxfriJGAK5qA1enGIo4Z\n"
+               "Eo7EAu+bmFJDmGZPEUMWq5wEIXf7H/HSoyHPqO/x/rpKniYSDZ+6gqZ5rhFKKNbQ\n"
+               "pFbgNmQbAgMBAAECggEAb/AcrMOF0m9E9ylekshljIEtkHG9PpNGnYkiL1pMhc32\n"
+               "CzHJ5hxHULH3D5rtSkiaarBc6iFxKDnC9qpCGWLOA2LXuPPTU+t634Z045nzVf9P\n"
+               "0xArOhttObsY8iUoEarRR4cVGObU7ivTxcgTGMAUw9EO1W3aRi8M5WfT8PSh2fUj\n"
+               "iqweQ5ucHkhamtVLJPXiaQ61BDh1ZJlX2ezPLnwAirJ9jCxtEJo7ol5XX1hp1X0z\n"
+               "Qa9Cnkrg5jymQRs7iiPmRK38ir2UNRBs9UA8EIjD6b9fi2fGg9xSBtUsrX0jhAcy\n"
+               "XWgBfPvyMY4EO1afpPqjErDmJkmp07GXxPjhMpEi4QKBgQD/JRNHGtm1m/tEgb6v\n"
+               "dYYtZ/GAZNRuY4rYCAy5nx6lZvqljNyMdoyWu5jBfPouAhpJYC8+5xEptId9lfxs\n"
+               "Iya9IHqkKAAcswcAov46pwekMtv5+tCqPB87bqHdOZBw81PfliaT8klt+ewLdm3u\n"
+               "dRcGVhZsxyzeOJs2ry+7MVxhSwKBgQDhFwRBk10wzHZdHg01iDkauH3IMJSK4gAK\n"
+               "CgWDQ9mE72yjrtFlqiM+WbwtT3n5tF3WA+yLMm+vQ6VSJYquRvEymdrl2r+PiZxQ\n"
+               "0PuGf9Fekb08KoE/VmGoT9MrM/yTUOToc2iPnE6UwOdil5LHPO/Ftvd86VBDOUuW\n"
+               "o1tOGVkWcQKBgQDy7posWaRxBtN3pxGofn4DPbT0Swz5Dk5k40U6eAb19dcxSa21\n"
+               "ECtMWdJYaGbM57OfqbVSbzAoRXu8V9LAI7f+263qHyv8J3nDYW4u6lqcPNC2c9m6\n"
+               "PQR/0hbMTML6yLRTbuPMeiTwUcYuI9UH9vS1U8KGUB6od71Rk/wegCE1gQKBgHV+\n"
+               "8EfSxtiMQlUFNNv2yeg62d3ADioZIvAanxoQNuF/oXQn80Jgd5k6elIkpIVGM51d\n"
+               "2wImR8pzQz8IPcYPXiSNz4ggkdI5gRFmpYVl/0KgTOm1PlZznvKfCJoKvxOfLH5y\n"
+               "j+g3LYXU1HPQr1u1YWwRwErB95W/uMdfam/wJ2LhAoGBAPPa/3um+j+s8PFyFffb\n"
+               "6YYr24pewzhGVF0KCVAOmI1qWOaEAep2U1vdrHITEF8udRK6zC2JuyUqkNztEmur\n"
+               "UDAfw5IQ0HgPWrBd+rxOFxv1Zsh+le3G9K96LOu907VV5B5XgHJvrXiGyZLLcmNs\n"
+               "l4TnFmkpsdOTLYFNHeM9HCT/\n"
+               "-----END PRIVATE KEY-----\n";
+
+       const std::string EndUserCert =
+               "-----BEGIN CERTIFICATE-----\n"
+               "MIIDrzCCApcCFGhj+g7Hv144mpcTZoVphHmk/B4aMA0GCSqGSIb3DQEBCwUAMIGT\n"
+               "MQswCQYDVQQGEwJWTjEPMA0GA1UECAwGSGEgTm9pMRQwEgYDVQQHDAtOYW0gVHUg\n"
+               "TGllbTEQMA4GA1UECgwHU2Ftc3VuZzEMMAoGA1UECwwDU1JWMRwwGgYDVQQDDBNU\n"
+               "aXplbiBTZWN1cml0eSBSb290MR8wHQYJKoZIhvcNAQkBFhB0ZXN0QHNhbXN1bmcu\n"
+               "Y29tMB4XDTI0MDUzMTA0MDQxOVoXDTI1MDUzMTA0MDQxOVowgZMxCzAJBgNVBAYT\n"
+               "AlZOMQ8wDQYDVQQIDAZIYSBOb2kxFDASBgNVBAcMC05hbSBUdSBMaWVtMRAwDgYD\n"
+               "VQQKDAdTYW1zdW5nMQwwCgYDVQQLDANTUlYxHDAaBgNVBAMME1RpemVuIFNlY3Vy\n"
+               "aXR5IFJvb3QxHzAdBgkqhkiG9w0BCQEWEHRlc3RAc2Ftc3VuZy5jb20wggEiMA0G\n"
+               "CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDgVoaEKZLu0zFYsRgq9Gyapmc9SK9s\n"
+               "c87/+XwH5RmrpM/3Kwq3aFt51FSnc6BQVdZUxe7P/ZVPfXIKi/bKd8l/2qKou2qp\n"
+               "Uj6iy9+LIIDjXE31joUuQ4YCde8VoYb6TMoWeHxRCkcLMV+7U7+X7+KYZ2tvNZV0\n"
+               "TYa9cJujCHwOHz6bHJczREre0IkTUik5+N0CP7fVf3hGIqpreluZoiVdMuhORZ//\n"
+               "wTCkdc18Y9GFKGEkS2ujKeXXJJ5tOxfriJGAK5qA1enGIo4ZEo7EAu+bmFJDmGZP\n"
+               "EUMWq5wEIXf7H/HSoyHPqO/x/rpKniYSDZ+6gqZ5rhFKKNbQpFbgNmQbAgMBAAEw\n"
+               "DQYJKoZIhvcNAQELBQADggEBAM8e622cvH3BFKEkBKO9dx79sA5vIPx70MCz/TiN\n"
+               "AJidKAZiTw+sag06GJW89Wes85W7/hhyUG5S/xRKRIZhtaw+SakFZyZiM5UWxFu4\n"
+               "OJyyVDbaqIkimAip8EJjlq94DGfY+Ci3sr9dY6Jm5d7UY2vlWZg/zz5yFZdmTI3g\n"
+               "jiwmnYpPjw1tRi+w+MYTSpR+TMfuVgmWDpRk5+hh64MUjJ/6c1obY0+l4oqGhUGz\n"
+               "TjPDQCQ+WzFS//ZczpnAihMDkDFprJw+hnM35oVJX76EbRdQgDFpsTQkaXwiE9N0\n"
+               "vWbLDZFwdmftEHwnAHe0JbmsL6Vl0NW3GNTQ43rly+beU3A=\n"
+               "-----END CERTIFICATE-----\n";
+
+       const std::string SubjectName =
+               "/C=VN/ST=Ha Noi/L=Nam Tu Liem/O=Samsung/OU=SRV/CN=Tizen Security Root/"
+               "emailAddress=test@samsung.com";
+}
\ No newline at end of file
index 39e51b3..35aaabf 100644 (file)
@@ -21,4 +21,15 @@ namespace ServerCertInfo {
        extern const std::string FullFieldCertPem;
        extern const std::string CertDer;
        extern const std::string SubjectCommonName;
+}
+
+namespace PemCertInfo {
+       extern const std::string CertPEM;
+       extern const std::string SubjectName;
+}
+
+namespace P12CertInfo {
+       extern const std::string PrivateKey;
+       extern const std::string EndUserCert;
+       extern const std::string SubjectName;
 }
\ No newline at end of file