1 /* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include <gtest/gtest.h> 17 #include <iostream> 18 #include <openssl/pem.h> 19 #include <string> 20 21 #define private public 22 #include "tls.h" 23 #include "TlsTest.h" 24 #include "tls_certificate.h" 25 26 namespace OHOS { 27 namespace NetStack { 28 namespace TlsSocket { 29 namespace { 30 using namespace testing::ext; 31 } // namespace 32 33 class TlsCertificateTest : public testing::Test { 34 public: SetUpTestCase()35 static void SetUpTestCase() {} 36 TearDownTestCase()37 static void TearDownTestCase() {} 38 SetUp()39 virtual void SetUp() {} 40 TearDown()41 virtual void TearDown() {} 42 }; 43 44 HWTEST_F(TlsCertificateTest, CertificateTest001, TestSize.Level2) 45 { 46 TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT); 47 bool isCertFromData = tlsCertificate.CertificateFromData(CLIENT_FILE, LOCAL_CERT); 48 EXPECT_EQ(isCertFromData, true); 49 } 50 51 HWTEST_F(TlsCertificateTest, CertificateTest002, TestSize.Level2) 52 { 53 std::string data = ""; 54 TLSCertificate tlsCertificate = TLSCertificate(data, EncodingFormat::DER, LOCAL_CERT); 55 bool ret = tlsCertificate.CertificateFromDer(CLIENT_FILE, LOCAL_CERT); 56 EXPECT_EQ(ret, false); 57 } 58 59 HWTEST_F(TlsCertificateTest, CertificateTest003, TestSize.Level2) 60 { 61 TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, EncodingFormat::PEM, LOCAL_CERT); 62 bool ret = tlsCertificate.CertificateFromPem(CA_CRT_FILE, LOCAL_CERT); 63 EXPECT_FALSE(ret); 64 } 65 66 HWTEST_F(TlsCertificateTest, CopyConstruction, TestSize.Level2) 67 { 68 TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT); 69 TLSCertificate tlsCopy = TLSCertificate(tlsCertificate); 70 bool isCertFromData = tlsCopy.CertificateFromData(CLIENT_FILE, LOCAL_CERT); 71 EXPECT_EQ(isCertFromData, true); 72 } 73 74 HWTEST_F(TlsCertificateTest, AssignmentConstruction, TestSize.Level2) 75 { 76 TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT); 77 TLSCertificate tlsCert = tlsCertificate; 78 bool isCertFromData = tlsCert.CertificateFromData(CLIENT_FILE, LOCAL_CERT); 79 EXPECT_EQ(isCertFromData, true); 80 } 81 82 HWTEST_F(TlsCertificateTest, GetLocalCertString, TestSize.Level2) 83 { 84 TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT); 85 std::string localCert = tlsCertificate.GetLocalCertString(); 86 std::cout << "localCert:" << localCert << std::endl; 87 EXPECT_NE(localCert.c_str(), nullptr); 88 } 89 90 HWTEST_F(TlsCertificateTest, CertificateFromPemTest, TestSize.Level2) 91 { 92 TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT); 93 bool ret = tlsCertificate.CertificateFromPem(CERTIFICAT, LOCAL_CERT); 94 EXPECT_FALSE(ret); 95 ret = tlsCertificate.CertificateFromPem("", LOCAL_CERT); 96 EXPECT_FALSE(ret); 97 } 98 99 HWTEST_F(TlsCertificateTest, CertificateFromDerTest, TestSize.Level2) 100 { 101 TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT); 102 bool ret = tlsCertificate.CertificateFromDer(CA_CRT_FILE, LOCAL_CERT); 103 EXPECT_FALSE(ret); 104 ret = tlsCertificate.CertificateFromDer("", LOCAL_CERT); 105 EXPECT_FALSE(ret); 106 } 107 108 HWTEST_F(TlsCertificateTest, GetSignatureAlgorithmTest, TestSize.Level2) 109 { 110 TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT); 111 tlsCertificate.CertificateFromDer(CERTIFICAT, CA_CERT); 112 std::string ret = tlsCertificate.GetSignatureAlgorithm(); 113 EXPECT_FALSE(ret.empty()); 114 TLSCertificate tlsCertificate2 = TLSCertificate("", LOCAL_CERT); 115 ret = tlsCertificate2.GetSignatureAlgorithm(); 116 EXPECT_TRUE(ret.empty()); 117 } 118 119 HWTEST_F(TlsCertificateTest, CaFromData, TestSize.Level2) 120 { 121 TLSCertificate tlsCertificate = TLSCertificate(CA_CRT_FILE, CA_CERT); 122 bool isFilePath = tlsCertificate.CertificateFromData(CA_CRT_FILE, CA_CERT); 123 124 BIO *bio = BIO_new_mem_buf(CA_CRT_FILE, -1); 125 X509 *x509Ca = PEM_read_bio_X509(bio, nullptr, nullptr, nullptr); 126 BIO_free(bio); 127 bool setLocalCertRawData = tlsCertificate.SetLocalCertRawData(x509Ca); 128 EXPECT_TRUE(setLocalCertRawData); 129 bool setX509Version = tlsCertificate.SetX509Version(x509Ca); 130 EXPECT_TRUE(setX509Version); 131 bool setSerialNumber = tlsCertificate.SetSerialNumber(x509Ca); 132 EXPECT_TRUE(setSerialNumber); 133 bool setNotValidTime = tlsCertificate.SetNotValidTime(x509Ca); 134 EXPECT_TRUE(setNotValidTime); 135 bool setSignatureAlgorithm = tlsCertificate.SetSignatureAlgorithm(x509Ca); 136 EXPECT_TRUE(setSignatureAlgorithm); 137 bool caCertToString = tlsCertificate.CaCertToString(x509Ca); 138 EXPECT_TRUE(caCertToString); 139 bool localCertToString = tlsCertificate.LocalCertToString(x509Ca); 140 EXPECT_TRUE(localCertToString); 141 142 BIO *bioCrt = BIO_new_mem_buf(CLIENT_FILE, -1); 143 X509 *x509Crt = PEM_read_bio_X509(bioCrt, nullptr, nullptr, nullptr); 144 BIO_free(bioCrt); 145 bool analysisCert = tlsCertificate.AnalysisCertificate(CertType::LOCAL_CERT, x509Crt); 146 EXPECT_TRUE(analysisCert); 147 bool analysisCa = tlsCertificate.AnalysisCertificate(CertType::CA_CERT, x509Ca); 148 EXPECT_TRUE(analysisCa); 149 EXPECT_EQ(isFilePath, true); 150 } 151 152 HWTEST_F(TlsCertificateTest, AnalysisCertificateTest, TestSize.Level2) 153 { 154 TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT); 155 X509 *x509 = nullptr; 156 bool ret = tlsCertificate.AnalysisCertificate(CertType::LOCAL_CERT, x509); 157 EXPECT_FALSE(ret); 158 } 159 160 HWTEST_F(TlsCertificateTest, CaCertToStringTest, TestSize.Level2) 161 { 162 TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT); 163 X509 *x509 = nullptr; 164 bool ret = tlsCertificate.CaCertToString(x509); 165 EXPECT_FALSE(ret); 166 } 167 168 HWTEST_F(TlsCertificateTest, LocalCertToStringTest, TestSize.Level2) 169 { 170 TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT); 171 X509 *x509 = nullptr; 172 bool ret = tlsCertificate.LocalCertToString(x509); 173 EXPECT_FALSE(ret); 174 } 175 176 HWTEST_F(TlsCertificateTest, SetX509VersionTest, TestSize.Level2) 177 { 178 TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT); 179 X509 *x509 = nullptr; 180 bool ret = tlsCertificate.SetX509Version(x509); 181 EXPECT_FALSE(ret); 182 } 183 184 HWTEST_F(TlsCertificateTest, SetSerialNumberTest, TestSize.Level2) 185 { 186 TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT); 187 X509 *x509 = nullptr; 188 bool ret = tlsCertificate.SetSerialNumber(x509); 189 EXPECT_FALSE(ret); 190 } 191 192 HWTEST_F(TlsCertificateTest, SetNotValidTimeTest, TestSize.Level2) 193 { 194 TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT); 195 X509 *x509 = nullptr; 196 bool ret = tlsCertificate.SetNotValidTime(x509); 197 EXPECT_FALSE(ret); 198 } 199 200 HWTEST_F(TlsCertificateTest, SetSignatureAlgorithmTest, TestSize.Level2) 201 { 202 TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT); 203 X509 *x509 = nullptr; 204 bool ret = tlsCertificate.SetSignatureAlgorithm(x509); 205 EXPECT_FALSE(ret); 206 } 207 208 HWTEST_F(TlsCertificateTest, SetLocalCertRawDataTest, TestSize.Level2) 209 { 210 TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT); 211 X509 *x509 = nullptr; 212 bool ret = tlsCertificate.SetLocalCertRawData(x509); 213 EXPECT_FALSE(ret); 214 } 215 } // namespace TlsSocket 216 } // namespace NetStack 217 } // namespace OHOS 218