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
26namespace OHOS {
27namespace NetStack {
28namespace TlsSocket {
29namespace {
30using namespace testing::ext;
31} // namespace
32
33class TlsCertificateTest : public testing::Test {
34public:
35    static void SetUpTestCase() {}
36
37    static void TearDownTestCase() {}
38
39    virtual void SetUp() {}
40
41    virtual void TearDown() {}
42};
43
44HWTEST_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
51HWTEST_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
59HWTEST_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
66HWTEST_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
74HWTEST_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
82HWTEST_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
90HWTEST_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
99HWTEST_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
108HWTEST_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
119HWTEST_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
152HWTEST_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
160HWTEST_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
168HWTEST_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
176HWTEST_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
184HWTEST_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
192HWTEST_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
200HWTEST_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
208HWTEST_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