Add unit tests for vcore: CertificateCollection 67/313067/7
authorLe <xuan.tien@samsung.com>
Wed, 19 Jun 2024 01:49:29 +0000 (08:49 +0700)
committerLe <xuan.tien@samsung.com>
Wed, 3 Jul 2024 06:47:44 +0000 (13:47 +0700)
Change-Id: I71d9817af93137d664439de1617c364d6b4f3106
Signed-off-by: Le <xuan.tien@samsung.com>
unit-tests/CMakeLists.txt
unit-tests/test_vcore_certificate_collection.cpp [new file with mode: 0644]

index 683c70a..83743a6 100644 (file)
@@ -62,6 +62,7 @@ SET(UNIT_TESTS_SOURCES
     test_vcore_cert_store_type.cpp
     test_vcore_api.cpp
     test_vcore_time_conversion.cpp
+    test_vcore_certificate_collection.cpp
     test_cert_server_db.cpp
     colour_log_formatter.cpp
     ${PROJECT_SOURCE_DIR}/src/server/src/cert-server-logic.c
diff --git a/unit-tests/test_vcore_certificate_collection.cpp b/unit-tests/test_vcore_certificate_collection.cpp
new file mode 100644 (file)
index 0000000..3ebeb51
--- /dev/null
@@ -0,0 +1,234 @@
+/*
+ * 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 "test_macros.h"
+#include "vcore/CertificateCollection.h"
+#include <iostream>
+#include <stdio.h>
+#include <string.h>
+#include <list>
+
+const std::string certEE =
+       "MIIJGTCCBwGgAwIBAgITEgAxQ0VlMES59RTscQAAADFDRTANBgkqhkiG9w0BAQsF"
+       "ADBPMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u"
+       "MSAwHgYDVQQDExdNaWNyb3NvZnQgUlNBIFRMUyBDQSAwMTAeFw0yMjExMTUyMDE2"
+       "MzhaFw0yMzExMTUyMDE2MzhaMGExCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJXQTEQ"
+       "MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u"
+       "MRMwEQYDVQQDEwpyLmJpbmcuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB"
+       "CgKCAQEAvzvBoCT8A/rooZzeDm7yJ9PdB5c4ZE54P4q+R5ZaY3l9+UH7wkD/AMgx"
+       "5RUwpCg3JlZaSrl5kjp6xvjmhvy08v/mp0Jw80zG33lQ8DOk16VYBwpoSBy2Pn6E"
+       "6bhDYHGFybPzpKlKxiJHSYuiAF+05FfUk/jBmXFMkmsDlm5Fwq1y6/da4K0bJImC"
+       "msWDPDZrf3A8fu9lQeNRv3tbvrknOCGKaQ15iHxRpHhvMDxfX4/ba/ztw23wMExv"
+       "YKdAkUHQUMygbZE/vSBQhPtqqHFc+IY9sKpJ35oa4lfklnzgxlACogTmytJsrhry"
+       "lDeTp9bBAQwV2T7enHwoy1jdFaaJQwIDAQABo4IE2jCCBNYwggF+BgorBgEEAdZ5"
+       "AgQCBIIBbgSCAWoBaAB1AOg+0No+9QY1MudXKLyJa8kD08vREWvs62nhd31tBr1u"
+       "AAABhHz5BCoAAAQDAEYwRAIgTDH4xbzeE641O31H3wgjEfWbEhEKOfppCp+tYA3i"
+       "1CgCIF2TX3NmpCL3XEYDtbBv1ryuIA3cPGhgzynDWAdMiY5wAHYAVYHUwhaQNgFK"
+       "6gubVzxT8MDkOHhwJQgXL6OqHQcT0wwAAAGEfPkEXwAABAMARzBFAiEA3ao53zxV"
+       "/geztebynoFndOYoZiKOf0rSsa/PAEAsczcCIEOtGgNpraLTEJhe1OYbnuAo9Rak"
+       "eAbFPfjJdALwgGWVAHcAejKMVNi3LbYg6jjgUh7phBZwMhOFTTvSK8E6V6NS61IA"
+       "AAGEfPkC5AAABAMASDBGAiEAzov/r1LY9ELiZbJ2690S3ujq3gzpJ3Sxi6VN58gF"
+       "jH4CIQCG8bsL4aIfW3vB+o6mNl2xB9/cPEMbmFgUPBU8Lyr9uzAnBgkrBgEEAYI3"
+       "FQoEGjAYMAoGCCsGAQUFBwMCMAoGCCsGAQUFBwMBMD0GCSsGAQQBgjcVBwQwMC4G"
+       "JisGAQQBgjcVCIfahnWD7tkBgsmFG4G1nmGF9OtggV25+BCGkdB4AgFkAgElMIGH"
+       "BggrBgEFBQcBAQR7MHkwUwYIKwYBBQUHMAKGR2h0dHA6Ly93d3cubWljcm9zb2Z0"
+       "LmNvbS9wa2kvbXNjb3JwL01pY3Jvc29mdCUyMFJTQSUyMFRMUyUyMENBJTIwMDEu"
+       "Y3J0MCIGCCsGAQUFBzABhhZodHRwOi8vb2NzcC5tc29jc3AuY29tMB0GA1UdDgQW"
+       "BBSukOod1pztVw1Lx47hPotC/higDTAOBgNVHQ8BAf8EBAMCBLAwgeQGA1UdEQSB"
+       "3DCB2YIKci5iaW5nLmNvbYIUdGhha2EubXNmdHN0YXRpYy5jb22CDnRoYWthLmJp"
+       "bmcuY29tghF0aC5tc2Z0c3RhdGljLmNvbYILdGguYmluZy5jb22CE3Jha2EubXNm"
+       "dHN0YXRpYy5jb22CDXJha2EuYmluZy5jb22CEHIubXNmdHN0YXRpYy5jb22CDWFr"
+       "YW0uYmluZy5jb22CDSoubW0uYmluZy5uZXSCEyouZXhwbGljaXQuYmluZy5uZXSC"
+       "ECouYmluZ3N0YXRpYy5jb22CCiouYmluZy5jb20wgbAGA1UdHwSBqDCBpTCBoqCB"
+       "n6CBnIZNaHR0cDovL21zY3JsLm1pY3Jvc29mdC5jb20vcGtpL21zY29ycC9jcmwv"
+       "TWljcm9zb2Z0JTIwUlNBJTIwVExTJTIwQ0ElMjAwMS5jcmyGS2h0dHA6Ly9jcmwu"
+       "bWljcm9zb2Z0LmNvbS9wa2kvbXNjb3JwL2NybC9NaWNyb3NvZnQlMjBSU0ElMjBU"
+       "TFMlMjBDQSUyMDAxLmNybDBXBgNVHSAEUDBOMEIGCSsGAQQBgjcqATA1MDMGCCsG"
+       "AQUFBwIBFidodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL21zY29ycC9jcHMw"
+       "CAYGZ4EMAQICMB8GA1UdIwQYMBaAFLV2DDARzseSQk1Mx1wsyKkM6AtkMB0GA1Ud"
+       "JQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATANBgkqhkiG9w0BAQsFAAOCAgEAUce0"
+       "vFbvYp03JZdLVC7vjMuKOloMCcGQy0CUO3P+T4322/JvQGjgKStq/9FA+GMvqmu0"
+       "yuC4R69o8wlDOhabeJYt2T87BpE31GBHoAYkFE7kdSYfF6FP3fq2FzYcIi8OoKWI"
+       "HHZ1RsIrMKaC3sWxhrmdIpDImdgXFBXlA1CPFafeioF50bQXmjndR0xMNwnpnRNS"
+       "6XNHC9rYARXe7Jj0qk8JYTvLgPGkkaMHmnS7Hn914d1dFIZ2hyVvA+rUtVRQ1oQx"
+       "Q+R+wsRl59Q15MCSIMWnp5Fcg1gcAduGuRCvWKpusJmX3tWjdUSKEQ1UP1qV0eMm"
+       "lh64jNwJ+ejX6psgyWO2a+dFpuD2l8MgFb2gN2RgS4YsPZyDitCBkezHrmsn8txQ"
+       "yaRStDiu6UgS1Z3cqxsNHfct4BdLd7ngzBMY5CacUcCHjwPyoIHYu4G6f84LztQT"
+       "s+uwMhnP9iP/6RiF3xgJMyrIKxUjC0aDjgYyOOVS6VpVLsdVdq0KImHElO5aknT0"
+       "UzvSa5LocKrmAUv+23Dvy/UU94vERy3WelqFzb+ktRgvje0LSsHaIQC8YhokEFx2"
+       "cXdJs7PwmADM4dFCD467C2lsXTzrS4WcvSLfq6xOZ2enl8L6qfQpJ58J49uhUqx3"
+       "lJtG1Q+rccyveDAacyyCp/pDdMQdYLranGFFioA=";
+const std::string certIM =
+       "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";
+const std::string certRoot =
+       "MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ"
+       "RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD"
+       "VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX"
+       "DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y"
+       "ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy"
+       "VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr"
+       "mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr"
+       "IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK"
+       "mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu"
+       "XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy"
+       "dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye"
+       "jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1"
+       "BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3"
+       "DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92"
+       "9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx"
+       "jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0"
+       "Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz"
+       "ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS"
+       "R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp";
+
+using namespace ValidationCore;
+
+CertificateList createCertificateList(std::list<std::string> strList)
+{
+       CertificateList certList;
+       for (std::string certStr : strList) {
+               certList.push_back(CertificatePtr(new Certificate(certStr, Certificate::FORM_BASE64)));
+       }
+       return certList;
+}
+
+CertificateCollection collection;
+
+BOOST_AUTO_TEST_SUITE(CERT_CERTIFICATE_COLLECTION_TEST);
+
+POSITIVE_TEST_CASE(T_certificate_collection_load_certificate_list)
+{
+       std::list<std::string> strList = {certEE, certIM, certRoot};
+       CertificateList certList = createCertificateList(strList);
+       collection.load(certList);
+       BOOST_CHECK(!collection.empty());
+       collection.clear();
+}
+
+POSITIVE_TEST_CASE(T_certificate_collection_complete_certificate_chain)
+{
+       std::list<std::string> strList = {certEE, certIM, certRoot};
+       CertificateList certList = createCertificateList(strList);
+       collection.load(certList);
+       BOOST_CHECK(collection.completeCertificateChain());
+       collection.clear();
+
+       strList = {certRoot, certEE, certIM};
+       certList = createCertificateList(strList);
+       collection.load(certList);
+       BOOST_CHECK(collection.completeCertificateChain());
+       collection.clear();
+}
+
+POSITIVE_TEST_CASE(T_certificate_collection_check_is_chain)
+{
+       std::list<std::string> strList = {certEE, certIM, certRoot};
+       CertificateList certList = createCertificateList(strList);
+       collection.load(certList);
+       collection.sort();
+       BOOST_CHECK(collection.isChain());
+       collection.clear();
+}
+
+NEGATIVE_TEST_CASE(T_certificate_collection_check_is_chain_without_sorting)
+{
+       std::list<std::string> strList = {certEE, certIM, certRoot};
+       CertificateList certList = createCertificateList(strList);
+       collection.load(certList);
+       BOOST_CHECK_THROW(collection.isChain(), CertificateCollection::Exception::WrongUsage);
+       collection.clear();
+}
+
+POSITIVE_TEST_CASE(T_certificate_collection_get_chain)
+{
+       std::list<std::string> strList = {certEE, certIM, certRoot};
+       CertificateList certList = createCertificateList(strList);
+       collection.load(certList);
+       collection.sort();
+       CertificateList list = collection.getChain();
+       BOOST_CHECK(list.size() == 3);
+       collection.clear();
+}
+
+NEGATIVE_TEST_CASE(T_certificate_collection_get_chain_without_sorting)
+{
+       std::list<std::string> strList = {certEE, certIM, certRoot};
+       CertificateList certList = createCertificateList(strList);
+       collection.load(certList);
+       BOOST_CHECK_THROW(collection.getChain(), CertificateCollection::Exception::WrongUsage);
+       collection.clear();
+}
+
+POSITIVE_TEST_CASE(T_certificate_collection_sort)
+{
+       std::list<std::string> strList = {certEE, certIM, certRoot};
+       CertificateList certList = createCertificateList(strList);
+       collection.load(certList);
+       BOOST_CHECK(collection.sort());
+       collection.clear();
+}
+
+NEGATIVE_TEST_CASE(T_certificate_collection_sort_empty_list)
+{
+       CertificateList certList;
+       collection.load(certList);
+       BOOST_CHECK(collection.sort());
+}
+
+POSITIVE_TEST_CASE(T_certificate_collection_to_base_64_string)
+{
+       std::list<std::string> strList = {certEE, certIM, certRoot};
+       CertificateList certList = createCertificateList(strList);
+       collection.load(certList);
+       std::string result = collection.toBase64String();
+       BOOST_CHECK(result != "");
+       collection.clear();
+}
+
+POSITIVE_TEST_CASE(T_get_size_certificate_collection)
+{
+       BOOST_CHECK(collection.size() == 0);
+}
+
+BOOST_AUTO_TEST_SUITE_END();