* Copyright (c) 2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <gtest/gtest.h>
#include <iostream>
#include <openssl/pem.h>
#include <string>
#define private public
#include "tls.h"
#include "TlsTest.h"
#include "tls_certificate.h"
namespace OHOS {
namespace NetStack {
namespace TlsSocket {
namespace {
using namespace testing::ext;
}
class TlsCertificateTest : public testing::Test {
public:
static void SetUpTestCase() {}
static void TearDownTestCase() {}
virtual void SetUp() {}
virtual void TearDown() {}
};
HWTEST_F(TlsCertificateTest, CertificateTest001, TestSize.Level2)
{
TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
bool isCertFromData = tlsCertificate.CertificateFromData(CLIENT_FILE, LOCAL_CERT);
EXPECT_EQ(isCertFromData, true);
}
HWTEST_F(TlsCertificateTest, CertificateTest002, TestSize.Level2)
{
std::string data = "";
TLSCertificate tlsCertificate = TLSCertificate(data, EncodingFormat::DER, LOCAL_CERT);
bool ret = tlsCertificate.CertificateFromDer(CLIENT_FILE, LOCAL_CERT);
EXPECT_EQ(ret, false);
}
HWTEST_F(TlsCertificateTest, CertificateTest003, TestSize.Level2)
{
TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, EncodingFormat::PEM, LOCAL_CERT);
bool ret = tlsCertificate.CertificateFromPem(CA_CRT_FILE, LOCAL_CERT);
EXPECT_FALSE(ret);
}
HWTEST_F(TlsCertificateTest, CopyConstruction, TestSize.Level2)
{
TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
TLSCertificate tlsCopy = TLSCertificate(tlsCertificate);
bool isCertFromData = tlsCopy.CertificateFromData(CLIENT_FILE, LOCAL_CERT);
EXPECT_EQ(isCertFromData, true);
}
HWTEST_F(TlsCertificateTest, AssignmentConstruction, TestSize.Level2)
{
TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
TLSCertificate tlsCert = tlsCertificate;
bool isCertFromData = tlsCert.CertificateFromData(CLIENT_FILE, LOCAL_CERT);
EXPECT_EQ(isCertFromData, true);
}
HWTEST_F(TlsCertificateTest, GetLocalCertString, TestSize.Level2)
{
TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
std::string localCert = tlsCertificate.GetLocalCertString();
std::cout << "localCert:" << localCert << std::endl;
EXPECT_NE(localCert.c_str(), nullptr);
}
HWTEST_F(TlsCertificateTest, CertificateFromPemTest, TestSize.Level2)
{
TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
bool ret = tlsCertificate.CertificateFromPem(CERTIFICAT, LOCAL_CERT);
EXPECT_FALSE(ret);
ret = tlsCertificate.CertificateFromPem("", LOCAL_CERT);
EXPECT_FALSE(ret);
}
HWTEST_F(TlsCertificateTest, CertificateFromDerTest, TestSize.Level2)
{
TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
bool ret = tlsCertificate.CertificateFromDer(CA_CRT_FILE, LOCAL_CERT);
EXPECT_FALSE(ret);
ret = tlsCertificate.CertificateFromDer("", LOCAL_CERT);
EXPECT_FALSE(ret);
}
HWTEST_F(TlsCertificateTest, GetSignatureAlgorithmTest, TestSize.Level2)
{
TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
tlsCertificate.CertificateFromDer(CERTIFICAT, CA_CERT);
std::string ret = tlsCertificate.GetSignatureAlgorithm();
EXPECT_FALSE(ret.empty());
TLSCertificate tlsCertificate2 = TLSCertificate("", LOCAL_CERT);
ret = tlsCertificate2.GetSignatureAlgorithm();
EXPECT_TRUE(ret.empty());
}
HWTEST_F(TlsCertificateTest, CaFromData, TestSize.Level2)
{
TLSCertificate tlsCertificate = TLSCertificate(CA_CRT_FILE, CA_CERT);
bool isFilePath = tlsCertificate.CertificateFromData(CA_CRT_FILE, CA_CERT);
BIO *bio = BIO_new_mem_buf(CA_CRT_FILE, -1);
X509 *x509Ca = PEM_read_bio_X509(bio, nullptr, nullptr, nullptr);
BIO_free(bio);
bool setLocalCertRawData = tlsCertificate.SetLocalCertRawData(x509Ca);
EXPECT_TRUE(setLocalCertRawData);
bool setX509Version = tlsCertificate.SetX509Version(x509Ca);
EXPECT_TRUE(setX509Version);
bool setSerialNumber = tlsCertificate.SetSerialNumber(x509Ca);
EXPECT_TRUE(setSerialNumber);
bool setNotValidTime = tlsCertificate.SetNotValidTime(x509Ca);
EXPECT_TRUE(setNotValidTime);
bool setSignatureAlgorithm = tlsCertificate.SetSignatureAlgorithm(x509Ca);
EXPECT_TRUE(setSignatureAlgorithm);
bool caCertToString = tlsCertificate.CaCertToString(x509Ca);
EXPECT_TRUE(caCertToString);
bool localCertToString = tlsCertificate.LocalCertToString(x509Ca);
EXPECT_TRUE(localCertToString);
BIO *bioCrt = BIO_new_mem_buf(CLIENT_FILE, -1);
X509 *x509Crt = PEM_read_bio_X509(bioCrt, nullptr, nullptr, nullptr);
BIO_free(bioCrt);
bool analysisCert = tlsCertificate.AnalysisCertificate(CertType::LOCAL_CERT, x509Crt);
EXPECT_TRUE(analysisCert);
bool analysisCa = tlsCertificate.AnalysisCertificate(CertType::CA_CERT, x509Ca);
EXPECT_TRUE(analysisCa);
EXPECT_EQ(isFilePath, true);
}
HWTEST_F(TlsCertificateTest, AnalysisCertificateTest, TestSize.Level2)
{
TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
X509 *x509 = nullptr;
bool ret = tlsCertificate.AnalysisCertificate(CertType::LOCAL_CERT, x509);
EXPECT_FALSE(ret);
}
HWTEST_F(TlsCertificateTest, CaCertToStringTest, TestSize.Level2)
{
TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
X509 *x509 = nullptr;
bool ret = tlsCertificate.CaCertToString(x509);
EXPECT_FALSE(ret);
}
HWTEST_F(TlsCertificateTest, LocalCertToStringTest, TestSize.Level2)
{
TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
X509 *x509 = nullptr;
bool ret = tlsCertificate.LocalCertToString(x509);
EXPECT_FALSE(ret);
}
HWTEST_F(TlsCertificateTest, SetX509VersionTest, TestSize.Level2)
{
TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
X509 *x509 = nullptr;
bool ret = tlsCertificate.SetX509Version(x509);
EXPECT_FALSE(ret);
}
HWTEST_F(TlsCertificateTest, SetSerialNumberTest, TestSize.Level2)
{
TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
X509 *x509 = nullptr;
bool ret = tlsCertificate.SetSerialNumber(x509);
EXPECT_FALSE(ret);
}
HWTEST_F(TlsCertificateTest, SetNotValidTimeTest, TestSize.Level2)
{
TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
X509 *x509 = nullptr;
bool ret = tlsCertificate.SetNotValidTime(x509);
EXPECT_FALSE(ret);
}
HWTEST_F(TlsCertificateTest, SetSignatureAlgorithmTest, TestSize.Level2)
{
TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
X509 *x509 = nullptr;
bool ret = tlsCertificate.SetSignatureAlgorithm(x509);
EXPECT_FALSE(ret);
}
HWTEST_F(TlsCertificateTest, SetLocalCertRawDataTest, TestSize.Level2)
{
TLSCertificate tlsCertificate = TLSCertificate(CLIENT_FILE, LOCAL_CERT);
X509 *x509 = nullptr;
bool ret = tlsCertificate.SetLocalCertRawData(x509);
EXPECT_FALSE(ret);
}
}
}
}