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
HWTEST_F(TlsCertificateTest, CertificateTest001, TestSize.Level2)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
HWTEST_F(TlsCertificateTest, CertificateTest002, TestSize.Level2)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
HWTEST_F(TlsCertificateTest, CertificateTest003, TestSize.Level2)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
HWTEST_F(TlsCertificateTest, CopyConstruction, TestSize.Level2)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
HWTEST_F(TlsCertificateTest, AssignmentConstruction, TestSize.Level2)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
HWTEST_F(TlsCertificateTest, GetLocalCertString, TestSize.Level2)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
HWTEST_F(TlsCertificateTest, CertificateFromPemTest, TestSize.Level2)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
HWTEST_F(TlsCertificateTest, CertificateFromDerTest, TestSize.Level2)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
HWTEST_F(TlsCertificateTest, GetSignatureAlgorithmTest, TestSize.Level2)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
HWTEST_F(TlsCertificateTest, CaFromData, TestSize.Level2)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
HWTEST_F(TlsCertificateTest, AnalysisCertificateTest, TestSize.Level2)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
HWTEST_F(TlsCertificateTest, CaCertToStringTest, TestSize.Level2)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
HWTEST_F(TlsCertificateTest, LocalCertToStringTest, TestSize.Level2)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
HWTEST_F(TlsCertificateTest, SetX509VersionTest, TestSize.Level2)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
HWTEST_F(TlsCertificateTest, SetSerialNumberTest, TestSize.Level2)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
HWTEST_F(TlsCertificateTest, SetNotValidTimeTest, TestSize.Level2)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
HWTEST_F(TlsCertificateTest, SetSignatureAlgorithmTest, TestSize.Level2)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
HWTEST_F(TlsCertificateTest, SetLocalCertRawDataTest, TestSize.Level2)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