* 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 <cerrno>
#include <climits>
#include <cstdlib>
#include <cstring>
#include <memory>
#include <string>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include "hnp_base.h"
#include "hnp_pack.h"
#include "securec.h"
using namespace testing;
using namespace testing::ext;
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
namespace OHOS {
class HnpPackTest : public testing::Test {
public:
static void SetUpTestCase();
static void TearDownTestCase();
void SetUp();
void TearDown();
};
void HnpPackTest::SetUpTestCase()
{
GTEST_LOG_(INFO) << "Hnp_Pack_TEST SetUpTestCase";
}
void HnpPackTest::TearDownTestCase()
{
GTEST_LOG_(INFO) << "Hnp_Pack_TEST TearDownTestCase";
}
void HnpPackTest::SetUp()
{
GTEST_LOG_(INFO) << "Hnp_Pack_TEST SetUp";
}
void HnpPackTest::TearDown()
{
GTEST_LOG_(INFO) << "Hnp_Pack_TEST TearDown";
}
* @tc.name: Hnp_Pack_001
* @tc.desc: Verify set Arg if HnpCmdPack succeed.
* @tc.type: FUNC
* @tc.require:issueI98PSE
* @tc.author:
*/
HWTEST_F(HnpPackTest, Hnp_Pack_001, TestSize.Level0)
{
GTEST_LOG_(INFO) << "Hnp_Pack_001 start";
remove("./hnp_out/sample.hnp");
rmdir("hnp_out");
remove("hnp_sample/hnp.json");
rmdir("hnp_sample");
EXPECT_EQ(mkdir("hnp_sample", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH), 0);
EXPECT_EQ(mkdir("hnp_out", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH), 0);
char arg1[] = "hnp", arg2[] = "pack";
{
char *argv[] = {arg1, arg2};
int argc = sizeof(argv) / sizeof(argv[0]);
EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_OPERATOR_ARGV_MISS);
}
{
char arg3[] = "-i", arg4[] = "./hnp_sample2", arg5[] = "-o", arg6[] = "./hnp_out";
char *argv[] = {arg1, arg2, arg3, arg4, arg5, arg6};
int argc = sizeof(argv) / sizeof(argv[0]);
EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_PACK_GET_REALPATH_FAILED);
}
{
char arg3[] = "-i", arg4[] = "./hnp_sample", arg5[] = "-o", arg6[] = "./hnp_out";
char *argv[] = {arg1, arg2, arg3, arg4, arg5, arg6};
int argc = sizeof(argv) / sizeof(argv[0]);
EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_OPERATOR_ARGV_MISS);
}
{
char arg3[] = "-i", arg4[] = "./hnp_sample", arg5[] = "-o", arg6[] = "./hnp_out";
char arg7[] = "-n", arg8[] = "sample", arg9[] = "-v", arg10[] = "1.1";
char *argv[] = {arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10};
int argc = sizeof(argv) / sizeof(argv[0]);
EXPECT_EQ(HnpCmdPack(argc, argv), 0);
EXPECT_EQ(remove("./hnp_out/sample.hnp"), 0);
}
EXPECT_EQ(rmdir("hnp_sample"), 0);
EXPECT_EQ(rmdir("hnp_out"), 0);
GTEST_LOG_(INFO) << "Hnp_Pack_001 end";
}
* @tc.name: Hnp_Pack_002
* @tc.desc: Verify set Arg with cfg if HnpCmdPack succeed.
* @tc.type: FUNC
* @tc.require:issueI98PSE
* @tc.author:
*/
HWTEST_F(HnpPackTest, Hnp_Pack_002, TestSize.Level0)
{
GTEST_LOG_(INFO) << "Hnp_Pack_002 start";
EXPECT_EQ(mkdir("hnp_sample", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH), 0);
EXPECT_EQ(mkdir("hnp_out", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH), 0);
FILE *fp = fopen("./hnp_sample/hnp.json", "w");
EXPECT_NE(fp, nullptr);
fclose(fp);
char arg1[] = "hnp", arg2[] = "pack";
char arg3[] = "-i", arg4[] = "./hnp_sample", arg5[] = "-o", arg6[] = "./hnp_out";
char *argv[] = {arg1, arg2, arg3, arg4, arg5, arg6};
int argc = sizeof(argv) / sizeof(argv[0]);
{
EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_BASE_READ_FILE_STREAM_FAILED);
}
{
char cfg[] = "this is for test!";
fp = fopen("./hnp_sample/hnp.json", "w");
EXPECT_EQ(fwrite(cfg, sizeof(char), strlen(cfg) + 1, fp), strlen(cfg) + 1);
fclose(fp);
EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_BASE_PARSE_JSON_FAILED);
}
EXPECT_EQ(remove("./hnp_sample/hnp.json"), 0);
EXPECT_EQ(rmdir("hnp_sample"), 0);
EXPECT_EQ(rmdir("hnp_out"), 0);
GTEST_LOG_(INFO) << "Hnp_Pack_002 end";
}
* @tc.name: Hnp_Pack_003
* @tc.desc: Verify set cfg type item invalid if HnpCmdPack succeed.
* @tc.type: FUNC
* @tc.require:issueI98PSE
* @tc.author:
*/
HWTEST_F(HnpPackTest, Hnp_Pack_003, TestSize.Level0)
{
GTEST_LOG_(INFO) << "Hnp_Pack_003 start";
EXPECT_EQ(mkdir("hnp_sample", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH), 0);
EXPECT_EQ(mkdir("hnp_out", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH), 0);
FILE *fp = fopen("./hnp_sample/hnp.json", "w");
EXPECT_NE(fp, nullptr);
fclose(fp);
char arg1[] = "hnp", arg2[] = "pack";
char arg3[] = "-i", arg4[] = "./hnp_sample", arg5[] = "-o", arg6[] = "./hnp_out";
char *argv[] = {arg1, arg2, arg3, arg4, arg5, arg6};
int argc = sizeof(argv) / sizeof(argv[0]);
{
char cfg[] = "{\"typ\":\"hnp-config\",\"name\":\"sample\",\"version\":\"1.1\",\"install\":"
"{\"links\":[{\"source\":\"bin/out\",\"target\":\"out\"},{\"source\":\"bin/out2\","
"\"target\":\"out2\"}]}}";
fp = fopen("./hnp_sample/hnp.json", "w");
EXPECT_EQ(fwrite(cfg, sizeof(char), strlen(cfg) + 1, fp), strlen(cfg) + 1);
fclose(fp);
EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_BASE_PARSE_ITEM_NO_FOUND);
}
{
char cfg[] = "{\"type\":\"hnpconfig\",\"name\":\"sample\",\"version\":\"1.1\",\"install\":"
"{\"links\":[{\"source\":\"bin/out\",\"target\":\"out\"},{\"source\":\"bin/out2\","
"\"target\":\"out2\"}]}}";
fp = fopen("./hnp_sample/hnp.json", "w");
EXPECT_EQ(fwrite(cfg, sizeof(char), strlen(cfg) + 1, fp), strlen(cfg) + 1);
fclose(fp);
EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_BASE_PARSE_ITEM_NO_FOUND);
}
EXPECT_EQ(remove("./hnp_sample/hnp.json"), 0);
EXPECT_EQ(rmdir("hnp_sample"), 0);
EXPECT_EQ(rmdir("hnp_out"), 0);
GTEST_LOG_(INFO) << "Hnp_Pack_003 end";
}
* @tc.name: Hnp_Pack_004
* @tc.desc: Verify set cfg invalid if HnpCmdPack succeed.
* @tc.type: FUNC
* @tc.require:issueI98PSE
* @tc.author:
*/
HWTEST_F(HnpPackTest, Hnp_Pack_004, TestSize.Level0)
{
GTEST_LOG_(INFO) << "Hnp_Pack_004 start";
EXPECT_EQ(mkdir("hnp_sample", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH), 0);
EXPECT_EQ(mkdir("hnp_out", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH), 0);
FILE *fp = fopen("./hnp_sample/hnp.json", "w");
EXPECT_NE(fp, nullptr);
fclose(fp);
char arg1[] = "hnp", arg2[] = "pack";
char arg3[] = "-i", arg4[] = "./hnp_sample", arg5[] = "-o", arg6[] = "./hnp_out";
char *argv[] = {arg1, arg2, arg3, arg4, arg5, arg6};
int argc = sizeof(argv) / sizeof(argv[0]);
{
char cfg[] = "{\"type\":\"hnp-config\",\"version\":\"1.1\",\"install\":"
"{\"links\":[{\"source\":\"bin/out\",\"target\":\"out\"},{\"source\":\"bin/out2\","
"\"target\":\"out2\"}]}}";
fp = fopen("./hnp_sample/hnp.json", "w");
EXPECT_EQ(fwrite(cfg, sizeof(char), strlen(cfg) + 1, fp), strlen(cfg) + 1);
fclose(fp);
EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_BASE_PARSE_ITEM_NO_FOUND);
}
{
char cfg[] = "{\"type\":\"hnp-config\",\"name\":\"sample\",\"install\":"
"{\"links\":[{\"source\":\"bin/out\",\"target\":\"out\"},{\"source\":\"bin/out2\","
"\"target\":\"out2\"}]}}";
fp = fopen("./hnp_sample/hnp.json", "w");
EXPECT_EQ(fwrite(cfg, sizeof(char), strlen(cfg) + 1, fp), strlen(cfg) + 1);
fclose(fp);
EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_BASE_PARSE_ITEM_NO_FOUND);
}
{
char cfg[] = "{\"type\":\"hnp-config\",\"name\":\"sample\",\"version\":\"1.1\",\"uninstall\":"
"{\"links\":[{\"source\":\"bin/out\",\"target\":\"out\"},{\"source\":\"bin/out2\","
"\"target\":\"out2\"}]}}";
fp = fopen("./hnp_sample/hnp.json", "w");
EXPECT_EQ(fwrite(cfg, sizeof(char), strlen(cfg) + 1, fp), strlen(cfg) + 1);
fclose(fp);
EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_BASE_PARSE_ITEM_NO_FOUND);
}
EXPECT_EQ(remove("./hnp_sample/hnp.json"), 0);
EXPECT_EQ(rmdir("hnp_sample"), 0);
EXPECT_EQ(rmdir("hnp_out"), 0);
GTEST_LOG_(INFO) << "Hnp_Pack_004 end";
}
* @tc.name: Hnp_Pack_005
* @tc.desc: Verify set cfg links item invalid if HnpCmdPack succeed.
* @tc.type: FUNC
* @tc.require:issueI98PSE
* @tc.author:
*/
HWTEST_F(HnpPackTest, Hnp_Pack_005, TestSize.Level0)
{
GTEST_LOG_(INFO) << "Hnp_Pack_005 start";
EXPECT_EQ(mkdir("hnp_sample", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH), 0);
EXPECT_EQ(mkdir("hnp_out", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH), 0);
FILE *fp = fopen("./hnp_sample/hnp.json", "w");
EXPECT_NE(fp, nullptr);
fclose(fp);
char arg1[] = "hnp", arg2[] = "pack";
char arg3[] = "-i", arg4[] = "./hnp_sample", arg5[] = "-o", arg6[] = "./hnp_out";
char *argv[] = {arg1, arg2, arg3, arg4, arg5, arg6};
int argc = sizeof(argv) / sizeof(argv[0]);
{
char cfg[] = "{\"type\":\"hnp-config\",\"name\":\"sample\",\"version\":\"1.1\",\"install\":"
"{\"links\":[{\"src\":\"bin/out\",\"target\":\"out\"},{\"source\":\"bin/out2\","
"\"target\":\"out2\"}]}}";
fp = fopen("./hnp_sample/hnp.json", "w");
EXPECT_EQ(fwrite(cfg, sizeof(char), strlen(cfg) + 1, fp), strlen(cfg) + 1);
fclose(fp);
EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_BASE_PARSE_ITEM_NO_FOUND);
}
{
char cfg[] = "{\"type\":\"hnp-config\",\"name\":\"sample\",\"version\":\"1.1\",\"install\":"
"{\"links\":[{\"source\":\"a.out\",\"tar\":\"out\"},{\"source\":\"a.out\","
"\"target\":\"out2\"}]}}";
fp = fopen("./hnp_sample/hnp.json", "w");
EXPECT_EQ(fwrite(cfg, sizeof(char), strlen(cfg) + 1, fp), strlen(cfg) + 1);
fclose(fp);
EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_PACK_GET_REALPATH_FAILED);
FILE *fp = fopen("./hnp_sample/a.out", "w");
EXPECT_NE(fp, nullptr);
fclose(fp);
EXPECT_EQ(HnpCmdPack(argc, argv), 0);
EXPECT_EQ(remove("./hnp_sample/a.out"), 0);
EXPECT_EQ(remove("./hnp_out/sample.hnp"), 0);
}
EXPECT_EQ(remove("./hnp_sample/hnp.json"), 0);
EXPECT_EQ(rmdir("hnp_sample"), 0);
EXPECT_EQ(rmdir("hnp_out"), 0);
GTEST_LOG_(INFO) << "Hnp_Pack_005 end";
}
* @tc.name: Hnp_Pack_006
* @tc.desc: Verify set cfg valid if HnpCmdPack succeed.
* @tc.type: FUNC
* @tc.require:issueI98PSE
* @tc.author:
*/
HWTEST_F(HnpPackTest, Hnp_Pack_006, TestSize.Level0)
{
GTEST_LOG_(INFO) << "Hnp_Pack_006 start";
EXPECT_EQ(mkdir("hnp_sample", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH), 0);
EXPECT_EQ(mkdir("hnp_out", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH), 0);
FILE *fp = fopen("./hnp_sample/hnp.json", "w");
EXPECT_NE(fp, nullptr);
fclose(fp);
char arg1[] = "hnp", arg2[] = "pack";
char arg3[] = "-i", arg4[] = "./hnp_sample", arg5[] = "-o", arg6[] = "./hnp_out";
char *argv[] = {arg1, arg2, arg3, arg4, arg5, arg6};
int argc = sizeof(argv) / sizeof(argv[0]);
{
char cfg[] = "{\"type\":\"hnp-config\",\"name\":\"sample\",\"version\":\"1.1\",\"install\":{}}";
fp = fopen("./hnp_sample/hnp.json", "w");
EXPECT_EQ(fwrite(cfg, sizeof(char), strlen(cfg) + 1, fp), strlen(cfg) + 1);
fclose(fp);
EXPECT_EQ(HnpCmdPack(argc, argv), 0);
EXPECT_EQ(remove("./hnp_out/sample.hnp"), 0);
}
{
char cfg[] = "{\"type\":\"hnp-config\",\"name\":\"sample\",\"version\":\"1.1\",\"install\":"
"{\"links\":[]}}";
fp = fopen("./hnp_sample/hnp.json", "w");
EXPECT_EQ(fwrite(cfg, sizeof(char), strlen(cfg) + 1, fp), strlen(cfg) + 1);
fclose(fp);
EXPECT_EQ(HnpCmdPack(argc, argv), 0);
EXPECT_EQ(remove("./hnp_out/sample.hnp"), 0);
}
{
char cfg[] = "{\"type\":\"hnp-config\",\"name\":\"sample\",\"version\":\"1.1\",\"install\":"
"{\"links\":[{\"source\":\"a.out\",\"target\":\"out\"},{\"source\":\"a.out\","
"\"target\":\"out2\"}]}}";
fp = fopen("./hnp_sample/hnp.json", "w");
EXPECT_EQ(fwrite(cfg, sizeof(char), strlen(cfg) + 1, fp), strlen(cfg) + 1);
fclose(fp);
EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_PACK_GET_REALPATH_FAILED);
FILE *fp = fopen("./hnp_sample/a.out", "w");
EXPECT_NE(fp, nullptr);
fclose(fp);
EXPECT_EQ(HnpCmdPack(argc, argv), 0);
EXPECT_EQ(remove("./hnp_sample/a.out"), 0);
EXPECT_EQ(remove("./hnp_out/sample.hnp"), 0);
}
EXPECT_EQ(remove("./hnp_sample/hnp.json"), 0);
EXPECT_EQ(rmdir("hnp_sample"), 0);
EXPECT_EQ(rmdir("hnp_out"), 0);
GTEST_LOG_(INFO) << "Hnp_Pack_006 end";
}
}