11e934351Sopenharmony_ci/*
21e934351Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
31e934351Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
41e934351Sopenharmony_ci * you may not use this file except in compliance with the License.
51e934351Sopenharmony_ci * You may obtain a copy of the License at
61e934351Sopenharmony_ci *
71e934351Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
81e934351Sopenharmony_ci *
91e934351Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
101e934351Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
111e934351Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
121e934351Sopenharmony_ci * See the License for the specific language governing permissions and
131e934351Sopenharmony_ci * limitations under the License.
141e934351Sopenharmony_ci */
151e934351Sopenharmony_ci
161e934351Sopenharmony_ci#include <gtest/gtest.h>
171e934351Sopenharmony_ci#include <iostream>
181e934351Sopenharmony_ci#include <openssl/pem.h>
191e934351Sopenharmony_ci#include <string>
201e934351Sopenharmony_ci
211e934351Sopenharmony_ci#define private public
221e934351Sopenharmony_ci#include "tls.h"
231e934351Sopenharmony_ci#include "TlsTest.h"
241e934351Sopenharmony_ci#include "tls_certificate.h"
251e934351Sopenharmony_ci
261e934351Sopenharmony_cinamespace OHOS {
271e934351Sopenharmony_cinamespace NetStack {
281e934351Sopenharmony_cinamespace TlsSocket {
291e934351Sopenharmony_cinamespace {
301e934351Sopenharmony_ciusing namespace testing::ext;
311e934351Sopenharmony_ci} // namespace
321e934351Sopenharmony_ci
331e934351Sopenharmony_ciclass TlsCertificateTest : public testing::Test {
341e934351Sopenharmony_cipublic:
351e934351Sopenharmony_ci    static void SetUpTestCase() {}
361e934351Sopenharmony_ci
371e934351Sopenharmony_ci    static void TearDownTestCase() {}
381e934351Sopenharmony_ci
391e934351Sopenharmony_ci    virtual void SetUp() {}
401e934351Sopenharmony_ci
411e934351Sopenharmony_ci    virtual void TearDown() {}
421e934351Sopenharmony_ci};
431e934351Sopenharmony_ci
441e934351Sopenharmony_ciHWTEST_F(TlsCertificateTest, CertificateTest001, TestSize.Level2)
451e934351Sopenharmony_ci{
461e934351Sopenharmony_ci    TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
471e934351Sopenharmony_ci    bool isCertFromData = tlsCertificate.CertificateFromData(CLIENT_FILE, LOCAL_CERT);
481e934351Sopenharmony_ci    EXPECT_EQ(isCertFromData, true);
491e934351Sopenharmony_ci}
501e934351Sopenharmony_ci
511e934351Sopenharmony_ciHWTEST_F(TlsCertificateTest, CertificateTest002, TestSize.Level2)
521e934351Sopenharmony_ci{
531e934351Sopenharmony_ci    std::string data = "";
541e934351Sopenharmony_ci    TLSCertificate tlsCertificate = TLSCertificate(data, EncodingFormat::DER, LOCAL_CERT);
551e934351Sopenharmony_ci    bool ret = tlsCertificate.CertificateFromDer(CLIENT_FILE, LOCAL_CERT);
561e934351Sopenharmony_ci    EXPECT_EQ(ret, false);
571e934351Sopenharmony_ci}
581e934351Sopenharmony_ci
591e934351Sopenharmony_ciHWTEST_F(TlsCertificateTest, CertificateTest003, TestSize.Level2)
601e934351Sopenharmony_ci{
611e934351Sopenharmony_ci    TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, EncodingFormat::PEM, LOCAL_CERT);
621e934351Sopenharmony_ci    bool ret = tlsCertificate.CertificateFromPem(CA_CRT_FILE, LOCAL_CERT);
631e934351Sopenharmony_ci    EXPECT_FALSE(ret);
641e934351Sopenharmony_ci}
651e934351Sopenharmony_ci
661e934351Sopenharmony_ciHWTEST_F(TlsCertificateTest, CopyConstruction, TestSize.Level2)
671e934351Sopenharmony_ci{
681e934351Sopenharmony_ci    TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
691e934351Sopenharmony_ci    TLSCertificate tlsCopy = TLSCertificate(tlsCertificate);
701e934351Sopenharmony_ci    bool isCertFromData = tlsCopy.CertificateFromData(CLIENT_FILE, LOCAL_CERT);
711e934351Sopenharmony_ci    EXPECT_EQ(isCertFromData, true);
721e934351Sopenharmony_ci}
731e934351Sopenharmony_ci
741e934351Sopenharmony_ciHWTEST_F(TlsCertificateTest, AssignmentConstruction, TestSize.Level2)
751e934351Sopenharmony_ci{
761e934351Sopenharmony_ci    TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
771e934351Sopenharmony_ci    TLSCertificate tlsCert = tlsCertificate;
781e934351Sopenharmony_ci    bool isCertFromData = tlsCert.CertificateFromData(CLIENT_FILE, LOCAL_CERT);
791e934351Sopenharmony_ci    EXPECT_EQ(isCertFromData, true);
801e934351Sopenharmony_ci}
811e934351Sopenharmony_ci
821e934351Sopenharmony_ciHWTEST_F(TlsCertificateTest, GetLocalCertString, TestSize.Level2)
831e934351Sopenharmony_ci{
841e934351Sopenharmony_ci    TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
851e934351Sopenharmony_ci    std::string localCert = tlsCertificate.GetLocalCertString();
861e934351Sopenharmony_ci    std::cout << "localCert:" << localCert << std::endl;
871e934351Sopenharmony_ci    EXPECT_NE(localCert.c_str(), nullptr);
881e934351Sopenharmony_ci}
891e934351Sopenharmony_ci
901e934351Sopenharmony_ciHWTEST_F(TlsCertificateTest, CertificateFromPemTest, TestSize.Level2)
911e934351Sopenharmony_ci{
921e934351Sopenharmony_ci    TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
931e934351Sopenharmony_ci    bool ret = tlsCertificate.CertificateFromPem(CERTIFICAT, LOCAL_CERT);
941e934351Sopenharmony_ci    EXPECT_FALSE(ret);
951e934351Sopenharmony_ci    ret = tlsCertificate.CertificateFromPem("", LOCAL_CERT);
961e934351Sopenharmony_ci    EXPECT_FALSE(ret);
971e934351Sopenharmony_ci}
981e934351Sopenharmony_ci
991e934351Sopenharmony_ciHWTEST_F(TlsCertificateTest, CertificateFromDerTest, TestSize.Level2)
1001e934351Sopenharmony_ci{
1011e934351Sopenharmony_ci    TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
1021e934351Sopenharmony_ci    bool ret = tlsCertificate.CertificateFromDer(CA_CRT_FILE, LOCAL_CERT);
1031e934351Sopenharmony_ci    EXPECT_FALSE(ret);
1041e934351Sopenharmony_ci    ret = tlsCertificate.CertificateFromDer("", LOCAL_CERT);
1051e934351Sopenharmony_ci    EXPECT_FALSE(ret);
1061e934351Sopenharmony_ci}
1071e934351Sopenharmony_ci
1081e934351Sopenharmony_ciHWTEST_F(TlsCertificateTest, GetSignatureAlgorithmTest, TestSize.Level2)
1091e934351Sopenharmony_ci{
1101e934351Sopenharmony_ci    TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
1111e934351Sopenharmony_ci    tlsCertificate.CertificateFromDer(CERTIFICAT, CA_CERT);
1121e934351Sopenharmony_ci    std::string ret = tlsCertificate.GetSignatureAlgorithm();
1131e934351Sopenharmony_ci    EXPECT_FALSE(ret.empty());
1141e934351Sopenharmony_ci    TLSCertificate tlsCertificate2 = TLSCertificate("", LOCAL_CERT);
1151e934351Sopenharmony_ci    ret = tlsCertificate2.GetSignatureAlgorithm();
1161e934351Sopenharmony_ci    EXPECT_TRUE(ret.empty());
1171e934351Sopenharmony_ci}
1181e934351Sopenharmony_ci
1191e934351Sopenharmony_ciHWTEST_F(TlsCertificateTest, CaFromData, TestSize.Level2)
1201e934351Sopenharmony_ci{
1211e934351Sopenharmony_ci    TLSCertificate tlsCertificate = TLSCertificate(CA_CRT_FILE, CA_CERT);
1221e934351Sopenharmony_ci    bool isFilePath = tlsCertificate.CertificateFromData(CA_CRT_FILE, CA_CERT);
1231e934351Sopenharmony_ci
1241e934351Sopenharmony_ci    BIO *bio = BIO_new_mem_buf(CA_CRT_FILE, -1);
1251e934351Sopenharmony_ci    X509 *x509Ca = PEM_read_bio_X509(bio, nullptr, nullptr, nullptr);
1261e934351Sopenharmony_ci    BIO_free(bio);
1271e934351Sopenharmony_ci    bool setLocalCertRawData = tlsCertificate.SetLocalCertRawData(x509Ca);
1281e934351Sopenharmony_ci    EXPECT_TRUE(setLocalCertRawData);
1291e934351Sopenharmony_ci    bool setX509Version = tlsCertificate.SetX509Version(x509Ca);
1301e934351Sopenharmony_ci    EXPECT_TRUE(setX509Version);
1311e934351Sopenharmony_ci    bool setSerialNumber = tlsCertificate.SetSerialNumber(x509Ca);
1321e934351Sopenharmony_ci    EXPECT_TRUE(setSerialNumber);
1331e934351Sopenharmony_ci    bool setNotValidTime = tlsCertificate.SetNotValidTime(x509Ca);
1341e934351Sopenharmony_ci    EXPECT_TRUE(setNotValidTime);
1351e934351Sopenharmony_ci    bool setSignatureAlgorithm = tlsCertificate.SetSignatureAlgorithm(x509Ca);
1361e934351Sopenharmony_ci    EXPECT_TRUE(setSignatureAlgorithm);
1371e934351Sopenharmony_ci    bool caCertToString = tlsCertificate.CaCertToString(x509Ca);
1381e934351Sopenharmony_ci    EXPECT_TRUE(caCertToString);
1391e934351Sopenharmony_ci    bool localCertToString = tlsCertificate.LocalCertToString(x509Ca);
1401e934351Sopenharmony_ci    EXPECT_TRUE(localCertToString);
1411e934351Sopenharmony_ci
1421e934351Sopenharmony_ci    BIO *bioCrt = BIO_new_mem_buf(CLIENT_FILE, -1);
1431e934351Sopenharmony_ci    X509 *x509Crt = PEM_read_bio_X509(bioCrt, nullptr, nullptr, nullptr);
1441e934351Sopenharmony_ci    BIO_free(bioCrt);
1451e934351Sopenharmony_ci    bool analysisCert = tlsCertificate.AnalysisCertificate(CertType::LOCAL_CERT, x509Crt);
1461e934351Sopenharmony_ci    EXPECT_TRUE(analysisCert);
1471e934351Sopenharmony_ci    bool analysisCa = tlsCertificate.AnalysisCertificate(CertType::CA_CERT, x509Ca);
1481e934351Sopenharmony_ci    EXPECT_TRUE(analysisCa);
1491e934351Sopenharmony_ci    EXPECT_EQ(isFilePath, true);
1501e934351Sopenharmony_ci}
1511e934351Sopenharmony_ci
1521e934351Sopenharmony_ciHWTEST_F(TlsCertificateTest, AnalysisCertificateTest, TestSize.Level2)
1531e934351Sopenharmony_ci{
1541e934351Sopenharmony_ci    TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
1551e934351Sopenharmony_ci    X509 *x509 = nullptr;
1561e934351Sopenharmony_ci    bool ret = tlsCertificate.AnalysisCertificate(CertType::LOCAL_CERT, x509);
1571e934351Sopenharmony_ci    EXPECT_FALSE(ret);
1581e934351Sopenharmony_ci}
1591e934351Sopenharmony_ci
1601e934351Sopenharmony_ciHWTEST_F(TlsCertificateTest, CaCertToStringTest, TestSize.Level2)
1611e934351Sopenharmony_ci{
1621e934351Sopenharmony_ci    TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
1631e934351Sopenharmony_ci    X509 *x509 = nullptr;
1641e934351Sopenharmony_ci    bool ret = tlsCertificate.CaCertToString(x509);
1651e934351Sopenharmony_ci    EXPECT_FALSE(ret);
1661e934351Sopenharmony_ci}
1671e934351Sopenharmony_ci
1681e934351Sopenharmony_ciHWTEST_F(TlsCertificateTest, LocalCertToStringTest, TestSize.Level2)
1691e934351Sopenharmony_ci{
1701e934351Sopenharmony_ci    TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
1711e934351Sopenharmony_ci    X509 *x509 = nullptr;
1721e934351Sopenharmony_ci    bool ret = tlsCertificate.LocalCertToString(x509);
1731e934351Sopenharmony_ci    EXPECT_FALSE(ret);
1741e934351Sopenharmony_ci}
1751e934351Sopenharmony_ci
1761e934351Sopenharmony_ciHWTEST_F(TlsCertificateTest, SetX509VersionTest, TestSize.Level2)
1771e934351Sopenharmony_ci{
1781e934351Sopenharmony_ci    TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
1791e934351Sopenharmony_ci    X509 *x509 = nullptr;
1801e934351Sopenharmony_ci    bool ret = tlsCertificate.SetX509Version(x509);
1811e934351Sopenharmony_ci    EXPECT_FALSE(ret);
1821e934351Sopenharmony_ci}
1831e934351Sopenharmony_ci
1841e934351Sopenharmony_ciHWTEST_F(TlsCertificateTest, SetSerialNumberTest, TestSize.Level2)
1851e934351Sopenharmony_ci{
1861e934351Sopenharmony_ci    TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
1871e934351Sopenharmony_ci    X509 *x509 = nullptr;
1881e934351Sopenharmony_ci    bool ret = tlsCertificate.SetSerialNumber(x509);
1891e934351Sopenharmony_ci    EXPECT_FALSE(ret);
1901e934351Sopenharmony_ci}
1911e934351Sopenharmony_ci
1921e934351Sopenharmony_ciHWTEST_F(TlsCertificateTest, SetNotValidTimeTest, TestSize.Level2)
1931e934351Sopenharmony_ci{
1941e934351Sopenharmony_ci    TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
1951e934351Sopenharmony_ci    X509 *x509 = nullptr;
1961e934351Sopenharmony_ci    bool ret = tlsCertificate.SetNotValidTime(x509);
1971e934351Sopenharmony_ci    EXPECT_FALSE(ret);
1981e934351Sopenharmony_ci}
1991e934351Sopenharmony_ci
2001e934351Sopenharmony_ciHWTEST_F(TlsCertificateTest, SetSignatureAlgorithmTest, TestSize.Level2)
2011e934351Sopenharmony_ci{
2021e934351Sopenharmony_ci    TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
2031e934351Sopenharmony_ci    X509 *x509 = nullptr;
2041e934351Sopenharmony_ci    bool ret = tlsCertificate.SetSignatureAlgorithm(x509);
2051e934351Sopenharmony_ci    EXPECT_FALSE(ret);
2061e934351Sopenharmony_ci}
2071e934351Sopenharmony_ci
2081e934351Sopenharmony_ciHWTEST_F(TlsCertificateTest, SetLocalCertRawDataTest, TestSize.Level2)
2091e934351Sopenharmony_ci{
2101e934351Sopenharmony_ci    TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
2111e934351Sopenharmony_ci    X509 *x509 = nullptr;
2121e934351Sopenharmony_ci    bool ret = tlsCertificate.SetLocalCertRawData(x509);
2131e934351Sopenharmony_ci    EXPECT_FALSE(ret);
2141e934351Sopenharmony_ci}
2151e934351Sopenharmony_ci} // namespace TlsSocket
2161e934351Sopenharmony_ci} // namespace NetStack
2171e934351Sopenharmony_ci} // namespace OHOS
218