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