169570cc8Sopenharmony_ci/*
269570cc8Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
369570cc8Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
469570cc8Sopenharmony_ci * you may not use this file except in compliance with the License.
569570cc8Sopenharmony_ci * You may obtain a copy of the License at
669570cc8Sopenharmony_ci *
769570cc8Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
869570cc8Sopenharmony_ci *
969570cc8Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1069570cc8Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1169570cc8Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1269570cc8Sopenharmony_ci * See the License for the specific language governing permissions and
1369570cc8Sopenharmony_ci * limitations under the License.
1469570cc8Sopenharmony_ci */
1569570cc8Sopenharmony_ci
1669570cc8Sopenharmony_ci#include <gtest/gtest.h>
1769570cc8Sopenharmony_ci
1869570cc8Sopenharmony_ci#include <cerrno>
1969570cc8Sopenharmony_ci#include <climits>
2069570cc8Sopenharmony_ci#include <cstdlib>
2169570cc8Sopenharmony_ci#include <cstring>
2269570cc8Sopenharmony_ci#include <memory>
2369570cc8Sopenharmony_ci#include <string>
2469570cc8Sopenharmony_ci#include <sys/stat.h>
2569570cc8Sopenharmony_ci#include <sys/types.h>
2669570cc8Sopenharmony_ci#include <unistd.h>
2769570cc8Sopenharmony_ci
2869570cc8Sopenharmony_ci#include "hnp_base.h"
2969570cc8Sopenharmony_ci#include "hnp_pack.h"
3069570cc8Sopenharmony_ci#include "securec.h"
3169570cc8Sopenharmony_ci
3269570cc8Sopenharmony_ciusing namespace testing;
3369570cc8Sopenharmony_ciusing namespace testing::ext;
3469570cc8Sopenharmony_ci
3569570cc8Sopenharmony_ci#ifdef __cplusplus
3669570cc8Sopenharmony_ci    extern "C" {
3769570cc8Sopenharmony_ci#endif
3869570cc8Sopenharmony_ci
3969570cc8Sopenharmony_ci
4069570cc8Sopenharmony_ci#ifdef __cplusplus
4169570cc8Sopenharmony_ci    }
4269570cc8Sopenharmony_ci#endif
4369570cc8Sopenharmony_ci
4469570cc8Sopenharmony_cinamespace OHOS {
4569570cc8Sopenharmony_ciclass HnpPackTest : public testing::Test {
4669570cc8Sopenharmony_cipublic:
4769570cc8Sopenharmony_ci    static void SetUpTestCase();
4869570cc8Sopenharmony_ci    static void TearDownTestCase();
4969570cc8Sopenharmony_ci    void SetUp();
5069570cc8Sopenharmony_ci    void TearDown();
5169570cc8Sopenharmony_ci};
5269570cc8Sopenharmony_ci
5369570cc8Sopenharmony_civoid HnpPackTest::SetUpTestCase()
5469570cc8Sopenharmony_ci{
5569570cc8Sopenharmony_ci    GTEST_LOG_(INFO) << "Hnp_Pack_TEST SetUpTestCase";
5669570cc8Sopenharmony_ci}
5769570cc8Sopenharmony_ci
5869570cc8Sopenharmony_civoid HnpPackTest::TearDownTestCase()
5969570cc8Sopenharmony_ci{
6069570cc8Sopenharmony_ci    GTEST_LOG_(INFO) << "Hnp_Pack_TEST TearDownTestCase";
6169570cc8Sopenharmony_ci}
6269570cc8Sopenharmony_ci
6369570cc8Sopenharmony_civoid HnpPackTest::SetUp()
6469570cc8Sopenharmony_ci{
6569570cc8Sopenharmony_ci    GTEST_LOG_(INFO) << "Hnp_Pack_TEST SetUp";
6669570cc8Sopenharmony_ci}
6769570cc8Sopenharmony_ci
6869570cc8Sopenharmony_civoid HnpPackTest::TearDown()
6969570cc8Sopenharmony_ci{
7069570cc8Sopenharmony_ci    GTEST_LOG_(INFO) << "Hnp_Pack_TEST TearDown";
7169570cc8Sopenharmony_ci}
7269570cc8Sopenharmony_ci
7369570cc8Sopenharmony_ci
7469570cc8Sopenharmony_ci/**
7569570cc8Sopenharmony_ci* @tc.name: Hnp_Pack_001
7669570cc8Sopenharmony_ci* @tc.desc:  Verify set Arg if HnpCmdPack succeed.
7769570cc8Sopenharmony_ci* @tc.type: FUNC
7869570cc8Sopenharmony_ci* @tc.require:issueI98PSE
7969570cc8Sopenharmony_ci* @tc.author:
8069570cc8Sopenharmony_ci*/
8169570cc8Sopenharmony_ciHWTEST_F(HnpPackTest, Hnp_Pack_001, TestSize.Level0)
8269570cc8Sopenharmony_ci{
8369570cc8Sopenharmony_ci    GTEST_LOG_(INFO) << "Hnp_Pack_001 start";
8469570cc8Sopenharmony_ci
8569570cc8Sopenharmony_ci    // clear resource before test
8669570cc8Sopenharmony_ci    remove("./hnp_out/sample.hnp");
8769570cc8Sopenharmony_ci    rmdir("hnp_out");
8869570cc8Sopenharmony_ci    remove("hnp_sample/hnp.json");
8969570cc8Sopenharmony_ci    rmdir("hnp_sample");
9069570cc8Sopenharmony_ci
9169570cc8Sopenharmony_ci    EXPECT_EQ(mkdir("hnp_sample", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH), 0);
9269570cc8Sopenharmony_ci    EXPECT_EQ(mkdir("hnp_out", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH), 0);
9369570cc8Sopenharmony_ci
9469570cc8Sopenharmony_ci    char arg1[] = "hnp", arg2[] = "pack";
9569570cc8Sopenharmony_ci
9669570cc8Sopenharmony_ci    { // param num not enough
9769570cc8Sopenharmony_ci        char *argv[] = {arg1, arg2};
9869570cc8Sopenharmony_ci        int argc = sizeof(argv) / sizeof(argv[0]);
9969570cc8Sopenharmony_ci
10069570cc8Sopenharmony_ci        EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_OPERATOR_ARGV_MISS);
10169570cc8Sopenharmony_ci    }
10269570cc8Sopenharmony_ci    { // src dir path is invalid
10369570cc8Sopenharmony_ci        char arg3[] = "-i", arg4[] = "./hnp_sample2", arg5[] = "-o", arg6[] = "./hnp_out";
10469570cc8Sopenharmony_ci        char *argv[] = {arg1, arg2, arg3, arg4, arg5, arg6};
10569570cc8Sopenharmony_ci        int argc = sizeof(argv) / sizeof(argv[0]);
10669570cc8Sopenharmony_ci
10769570cc8Sopenharmony_ci        EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_PACK_GET_REALPATH_FAILED);
10869570cc8Sopenharmony_ci    }
10969570cc8Sopenharmony_ci    { // no name and version
11069570cc8Sopenharmony_ci        char arg3[] = "-i", arg4[] = "./hnp_sample", arg5[] = "-o", arg6[] = "./hnp_out";
11169570cc8Sopenharmony_ci        char *argv[] = {arg1, arg2, arg3, arg4, arg5, arg6};
11269570cc8Sopenharmony_ci        int argc = sizeof(argv) / sizeof(argv[0]);
11369570cc8Sopenharmony_ci
11469570cc8Sopenharmony_ci        EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_OPERATOR_ARGV_MISS);
11569570cc8Sopenharmony_ci    }
11669570cc8Sopenharmony_ci    { // ok
11769570cc8Sopenharmony_ci        char arg3[] = "-i", arg4[] = "./hnp_sample", arg5[] = "-o", arg6[] = "./hnp_out";
11869570cc8Sopenharmony_ci        char arg7[] = "-n", arg8[] = "sample", arg9[] = "-v", arg10[] = "1.1";
11969570cc8Sopenharmony_ci        char *argv[] = {arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10};
12069570cc8Sopenharmony_ci        int argc = sizeof(argv) / sizeof(argv[0]);
12169570cc8Sopenharmony_ci
12269570cc8Sopenharmony_ci        EXPECT_EQ(HnpCmdPack(argc, argv), 0);
12369570cc8Sopenharmony_ci        EXPECT_EQ(remove("./hnp_out/sample.hnp"), 0);
12469570cc8Sopenharmony_ci    }
12569570cc8Sopenharmony_ci
12669570cc8Sopenharmony_ci    EXPECT_EQ(rmdir("hnp_sample"), 0);
12769570cc8Sopenharmony_ci    EXPECT_EQ(rmdir("hnp_out"), 0);
12869570cc8Sopenharmony_ci
12969570cc8Sopenharmony_ci    GTEST_LOG_(INFO) << "Hnp_Pack_001 end";
13069570cc8Sopenharmony_ci}
13169570cc8Sopenharmony_ci
13269570cc8Sopenharmony_ci/**
13369570cc8Sopenharmony_ci* @tc.name: Hnp_Pack_002
13469570cc8Sopenharmony_ci* @tc.desc:  Verify set Arg with cfg if HnpCmdPack succeed.
13569570cc8Sopenharmony_ci* @tc.type: FUNC
13669570cc8Sopenharmony_ci* @tc.require:issueI98PSE
13769570cc8Sopenharmony_ci* @tc.author:
13869570cc8Sopenharmony_ci*/
13969570cc8Sopenharmony_ciHWTEST_F(HnpPackTest, Hnp_Pack_002, TestSize.Level0)
14069570cc8Sopenharmony_ci{
14169570cc8Sopenharmony_ci    GTEST_LOG_(INFO) << "Hnp_Pack_002 start";
14269570cc8Sopenharmony_ci
14369570cc8Sopenharmony_ci    EXPECT_EQ(mkdir("hnp_sample", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH), 0);
14469570cc8Sopenharmony_ci    EXPECT_EQ(mkdir("hnp_out", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH), 0);
14569570cc8Sopenharmony_ci    FILE *fp = fopen("./hnp_sample/hnp.json", "w");
14669570cc8Sopenharmony_ci    EXPECT_NE(fp, nullptr);
14769570cc8Sopenharmony_ci    fclose(fp);
14869570cc8Sopenharmony_ci
14969570cc8Sopenharmony_ci    char arg1[] = "hnp", arg2[] = "pack";
15069570cc8Sopenharmony_ci    char arg3[] = "-i", arg4[] = "./hnp_sample", arg5[] = "-o", arg6[] = "./hnp_out";
15169570cc8Sopenharmony_ci    char *argv[] = {arg1, arg2, arg3, arg4, arg5, arg6};
15269570cc8Sopenharmony_ci    int argc = sizeof(argv) / sizeof(argv[0]);
15369570cc8Sopenharmony_ci
15469570cc8Sopenharmony_ci    { // cfg file content is empty
15569570cc8Sopenharmony_ci        EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_BASE_READ_FILE_STREAM_FAILED);
15669570cc8Sopenharmony_ci    }
15769570cc8Sopenharmony_ci    { // cfg file not json formaat
15869570cc8Sopenharmony_ci        char cfg[] = "this is for test!";
15969570cc8Sopenharmony_ci        fp = fopen("./hnp_sample/hnp.json", "w");
16069570cc8Sopenharmony_ci        EXPECT_EQ(fwrite(cfg, sizeof(char), strlen(cfg) + 1, fp), strlen(cfg) + 1);
16169570cc8Sopenharmony_ci        fclose(fp);
16269570cc8Sopenharmony_ci
16369570cc8Sopenharmony_ci        EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_BASE_PARSE_JSON_FAILED);
16469570cc8Sopenharmony_ci    }
16569570cc8Sopenharmony_ci    EXPECT_EQ(remove("./hnp_sample/hnp.json"), 0);
16669570cc8Sopenharmony_ci    EXPECT_EQ(rmdir("hnp_sample"), 0);
16769570cc8Sopenharmony_ci    EXPECT_EQ(rmdir("hnp_out"), 0);
16869570cc8Sopenharmony_ci
16969570cc8Sopenharmony_ci    GTEST_LOG_(INFO) << "Hnp_Pack_002 end";
17069570cc8Sopenharmony_ci}
17169570cc8Sopenharmony_ci
17269570cc8Sopenharmony_ci/**
17369570cc8Sopenharmony_ci* @tc.name: Hnp_Pack_003
17469570cc8Sopenharmony_ci* @tc.desc:  Verify set cfg type item invalid if HnpCmdPack succeed.
17569570cc8Sopenharmony_ci* @tc.type: FUNC
17669570cc8Sopenharmony_ci* @tc.require:issueI98PSE
17769570cc8Sopenharmony_ci* @tc.author:
17869570cc8Sopenharmony_ci*/
17969570cc8Sopenharmony_ciHWTEST_F(HnpPackTest, Hnp_Pack_003, TestSize.Level0)
18069570cc8Sopenharmony_ci{
18169570cc8Sopenharmony_ci    GTEST_LOG_(INFO) << "Hnp_Pack_003 start";
18269570cc8Sopenharmony_ci
18369570cc8Sopenharmony_ci    EXPECT_EQ(mkdir("hnp_sample", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH), 0);
18469570cc8Sopenharmony_ci    EXPECT_EQ(mkdir("hnp_out", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH), 0);
18569570cc8Sopenharmony_ci    FILE *fp = fopen("./hnp_sample/hnp.json", "w");
18669570cc8Sopenharmony_ci    EXPECT_NE(fp, nullptr);
18769570cc8Sopenharmony_ci    fclose(fp);
18869570cc8Sopenharmony_ci
18969570cc8Sopenharmony_ci    char arg1[] = "hnp", arg2[] = "pack";
19069570cc8Sopenharmony_ci    char arg3[] = "-i", arg4[] = "./hnp_sample", arg5[] = "-o", arg6[] = "./hnp_out";
19169570cc8Sopenharmony_ci    char *argv[] = {arg1, arg2, arg3, arg4, arg5, arg6};
19269570cc8Sopenharmony_ci    int argc = sizeof(argv) / sizeof(argv[0]);
19369570cc8Sopenharmony_ci
19469570cc8Sopenharmony_ci    { // cfg file content has not type item
19569570cc8Sopenharmony_ci        char cfg[] = "{\"typ\":\"hnp-config\",\"name\":\"sample\",\"version\":\"1.1\",\"install\":"
19669570cc8Sopenharmony_ci            "{\"links\":[{\"source\":\"bin/out\",\"target\":\"out\"},{\"source\":\"bin/out2\","
19769570cc8Sopenharmony_ci            "\"target\":\"out2\"}]}}";
19869570cc8Sopenharmony_ci        fp = fopen("./hnp_sample/hnp.json", "w");
19969570cc8Sopenharmony_ci        EXPECT_EQ(fwrite(cfg, sizeof(char), strlen(cfg) + 1, fp), strlen(cfg) + 1);
20069570cc8Sopenharmony_ci        fclose(fp);
20169570cc8Sopenharmony_ci
20269570cc8Sopenharmony_ci        EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_BASE_PARSE_ITEM_NO_FOUND);
20369570cc8Sopenharmony_ci    }
20469570cc8Sopenharmony_ci    { // type item value is not expected
20569570cc8Sopenharmony_ci        char cfg[] = "{\"type\":\"hnpconfig\",\"name\":\"sample\",\"version\":\"1.1\",\"install\":"
20669570cc8Sopenharmony_ci            "{\"links\":[{\"source\":\"bin/out\",\"target\":\"out\"},{\"source\":\"bin/out2\","
20769570cc8Sopenharmony_ci            "\"target\":\"out2\"}]}}";
20869570cc8Sopenharmony_ci        fp = fopen("./hnp_sample/hnp.json", "w");
20969570cc8Sopenharmony_ci        EXPECT_EQ(fwrite(cfg, sizeof(char), strlen(cfg) + 1, fp), strlen(cfg) + 1);
21069570cc8Sopenharmony_ci        fclose(fp);
21169570cc8Sopenharmony_ci
21269570cc8Sopenharmony_ci        EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_BASE_PARSE_ITEM_NO_FOUND);
21369570cc8Sopenharmony_ci    }
21469570cc8Sopenharmony_ci
21569570cc8Sopenharmony_ci    EXPECT_EQ(remove("./hnp_sample/hnp.json"), 0);
21669570cc8Sopenharmony_ci    EXPECT_EQ(rmdir("hnp_sample"), 0);
21769570cc8Sopenharmony_ci    EXPECT_EQ(rmdir("hnp_out"), 0);
21869570cc8Sopenharmony_ci
21969570cc8Sopenharmony_ci    GTEST_LOG_(INFO) << "Hnp_Pack_003 end";
22069570cc8Sopenharmony_ci}
22169570cc8Sopenharmony_ci
22269570cc8Sopenharmony_ci/**
22369570cc8Sopenharmony_ci* @tc.name: Hnp_Pack_004
22469570cc8Sopenharmony_ci* @tc.desc:  Verify set cfg invalid if HnpCmdPack succeed.
22569570cc8Sopenharmony_ci* @tc.type: FUNC
22669570cc8Sopenharmony_ci* @tc.require:issueI98PSE
22769570cc8Sopenharmony_ci* @tc.author:
22869570cc8Sopenharmony_ci*/
22969570cc8Sopenharmony_ciHWTEST_F(HnpPackTest, Hnp_Pack_004, TestSize.Level0)
23069570cc8Sopenharmony_ci{
23169570cc8Sopenharmony_ci    GTEST_LOG_(INFO) << "Hnp_Pack_004 start";
23269570cc8Sopenharmony_ci
23369570cc8Sopenharmony_ci    EXPECT_EQ(mkdir("hnp_sample", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH), 0);
23469570cc8Sopenharmony_ci    EXPECT_EQ(mkdir("hnp_out", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH), 0);
23569570cc8Sopenharmony_ci    FILE *fp = fopen("./hnp_sample/hnp.json", "w");
23669570cc8Sopenharmony_ci    EXPECT_NE(fp, nullptr);
23769570cc8Sopenharmony_ci    fclose(fp);
23869570cc8Sopenharmony_ci
23969570cc8Sopenharmony_ci    char arg1[] = "hnp", arg2[] = "pack";
24069570cc8Sopenharmony_ci    char arg3[] = "-i", arg4[] = "./hnp_sample", arg5[] = "-o", arg6[] = "./hnp_out";
24169570cc8Sopenharmony_ci    char *argv[] = {arg1, arg2, arg3, arg4, arg5, arg6};
24269570cc8Sopenharmony_ci    int argc = sizeof(argv) / sizeof(argv[0]);
24369570cc8Sopenharmony_ci
24469570cc8Sopenharmony_ci    { // cfg file content has not name item
24569570cc8Sopenharmony_ci        char cfg[] = "{\"type\":\"hnp-config\",\"version\":\"1.1\",\"install\":"
24669570cc8Sopenharmony_ci            "{\"links\":[{\"source\":\"bin/out\",\"target\":\"out\"},{\"source\":\"bin/out2\","
24769570cc8Sopenharmony_ci            "\"target\":\"out2\"}]}}";
24869570cc8Sopenharmony_ci        fp = fopen("./hnp_sample/hnp.json", "w");
24969570cc8Sopenharmony_ci        EXPECT_EQ(fwrite(cfg, sizeof(char), strlen(cfg) + 1, fp), strlen(cfg) + 1);
25069570cc8Sopenharmony_ci        fclose(fp);
25169570cc8Sopenharmony_ci
25269570cc8Sopenharmony_ci        EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_BASE_PARSE_ITEM_NO_FOUND);
25369570cc8Sopenharmony_ci    }
25469570cc8Sopenharmony_ci    { // cfg file content has not version item
25569570cc8Sopenharmony_ci        char cfg[] = "{\"type\":\"hnp-config\",\"name\":\"sample\",\"install\":"
25669570cc8Sopenharmony_ci            "{\"links\":[{\"source\":\"bin/out\",\"target\":\"out\"},{\"source\":\"bin/out2\","
25769570cc8Sopenharmony_ci            "\"target\":\"out2\"}]}}";
25869570cc8Sopenharmony_ci        fp = fopen("./hnp_sample/hnp.json", "w");
25969570cc8Sopenharmony_ci        EXPECT_EQ(fwrite(cfg, sizeof(char), strlen(cfg) + 1, fp), strlen(cfg) + 1);
26069570cc8Sopenharmony_ci        fclose(fp);
26169570cc8Sopenharmony_ci
26269570cc8Sopenharmony_ci        EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_BASE_PARSE_ITEM_NO_FOUND);
26369570cc8Sopenharmony_ci    }
26469570cc8Sopenharmony_ci    { // cfg file content has not install item
26569570cc8Sopenharmony_ci        char cfg[] = "{\"type\":\"hnp-config\",\"name\":\"sample\",\"version\":\"1.1\",\"uninstall\":"
26669570cc8Sopenharmony_ci            "{\"links\":[{\"source\":\"bin/out\",\"target\":\"out\"},{\"source\":\"bin/out2\","
26769570cc8Sopenharmony_ci            "\"target\":\"out2\"}]}}";
26869570cc8Sopenharmony_ci        fp = fopen("./hnp_sample/hnp.json", "w");
26969570cc8Sopenharmony_ci        EXPECT_EQ(fwrite(cfg, sizeof(char), strlen(cfg) + 1, fp), strlen(cfg) + 1);
27069570cc8Sopenharmony_ci        fclose(fp);
27169570cc8Sopenharmony_ci
27269570cc8Sopenharmony_ci        EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_BASE_PARSE_ITEM_NO_FOUND);
27369570cc8Sopenharmony_ci    }
27469570cc8Sopenharmony_ci
27569570cc8Sopenharmony_ci    EXPECT_EQ(remove("./hnp_sample/hnp.json"), 0);
27669570cc8Sopenharmony_ci    EXPECT_EQ(rmdir("hnp_sample"), 0);
27769570cc8Sopenharmony_ci    EXPECT_EQ(rmdir("hnp_out"), 0);
27869570cc8Sopenharmony_ci
27969570cc8Sopenharmony_ci    GTEST_LOG_(INFO) << "Hnp_Pack_004 end";
28069570cc8Sopenharmony_ci}
28169570cc8Sopenharmony_ci
28269570cc8Sopenharmony_ci/**
28369570cc8Sopenharmony_ci* @tc.name: Hnp_Pack_005
28469570cc8Sopenharmony_ci* @tc.desc:  Verify set cfg links item invalid if HnpCmdPack succeed.
28569570cc8Sopenharmony_ci* @tc.type: FUNC
28669570cc8Sopenharmony_ci* @tc.require:issueI98PSE
28769570cc8Sopenharmony_ci* @tc.author:
28869570cc8Sopenharmony_ci*/
28969570cc8Sopenharmony_ciHWTEST_F(HnpPackTest, Hnp_Pack_005, TestSize.Level0)
29069570cc8Sopenharmony_ci{
29169570cc8Sopenharmony_ci    GTEST_LOG_(INFO) << "Hnp_Pack_005 start";
29269570cc8Sopenharmony_ci
29369570cc8Sopenharmony_ci    EXPECT_EQ(mkdir("hnp_sample", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH), 0);
29469570cc8Sopenharmony_ci    EXPECT_EQ(mkdir("hnp_out", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH), 0);
29569570cc8Sopenharmony_ci    FILE *fp = fopen("./hnp_sample/hnp.json", "w");
29669570cc8Sopenharmony_ci    EXPECT_NE(fp, nullptr);
29769570cc8Sopenharmony_ci    fclose(fp);
29869570cc8Sopenharmony_ci
29969570cc8Sopenharmony_ci    char arg1[] = "hnp", arg2[] = "pack";
30069570cc8Sopenharmony_ci    char arg3[] = "-i", arg4[] = "./hnp_sample", arg5[] = "-o", arg6[] = "./hnp_out";
30169570cc8Sopenharmony_ci    char *argv[] = {arg1, arg2, arg3, arg4, arg5, arg6};
30269570cc8Sopenharmony_ci    int argc = sizeof(argv) / sizeof(argv[0]);
30369570cc8Sopenharmony_ci
30469570cc8Sopenharmony_ci    { // link arry item has not source item
30569570cc8Sopenharmony_ci        char cfg[] = "{\"type\":\"hnp-config\",\"name\":\"sample\",\"version\":\"1.1\",\"install\":"
30669570cc8Sopenharmony_ci            "{\"links\":[{\"src\":\"bin/out\",\"target\":\"out\"},{\"source\":\"bin/out2\","
30769570cc8Sopenharmony_ci            "\"target\":\"out2\"}]}}";
30869570cc8Sopenharmony_ci        fp = fopen("./hnp_sample/hnp.json", "w");
30969570cc8Sopenharmony_ci        EXPECT_EQ(fwrite(cfg, sizeof(char), strlen(cfg) + 1, fp), strlen(cfg) + 1);
31069570cc8Sopenharmony_ci        fclose(fp);
31169570cc8Sopenharmony_ci
31269570cc8Sopenharmony_ci        EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_BASE_PARSE_ITEM_NO_FOUND);
31369570cc8Sopenharmony_ci    }
31469570cc8Sopenharmony_ci    { // ok, link arry item has not target item
31569570cc8Sopenharmony_ci        char cfg[] = "{\"type\":\"hnp-config\",\"name\":\"sample\",\"version\":\"1.1\",\"install\":"
31669570cc8Sopenharmony_ci            "{\"links\":[{\"source\":\"a.out\",\"tar\":\"out\"},{\"source\":\"a.out\","
31769570cc8Sopenharmony_ci            "\"target\":\"out2\"}]}}";
31869570cc8Sopenharmony_ci        fp = fopen("./hnp_sample/hnp.json", "w");
31969570cc8Sopenharmony_ci        EXPECT_EQ(fwrite(cfg, sizeof(char), strlen(cfg) + 1, fp), strlen(cfg) + 1);
32069570cc8Sopenharmony_ci        fclose(fp);
32169570cc8Sopenharmony_ci
32269570cc8Sopenharmony_ci        EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_PACK_GET_REALPATH_FAILED);
32369570cc8Sopenharmony_ci
32469570cc8Sopenharmony_ci        FILE *fp = fopen("./hnp_sample/a.out", "w");
32569570cc8Sopenharmony_ci        EXPECT_NE(fp, nullptr);
32669570cc8Sopenharmony_ci        fclose(fp);
32769570cc8Sopenharmony_ci        EXPECT_EQ(HnpCmdPack(argc, argv), 0);
32869570cc8Sopenharmony_ci        EXPECT_EQ(remove("./hnp_sample/a.out"), 0);
32969570cc8Sopenharmony_ci        EXPECT_EQ(remove("./hnp_out/sample.hnp"), 0);
33069570cc8Sopenharmony_ci    }
33169570cc8Sopenharmony_ci
33269570cc8Sopenharmony_ci    EXPECT_EQ(remove("./hnp_sample/hnp.json"), 0);
33369570cc8Sopenharmony_ci    EXPECT_EQ(rmdir("hnp_sample"), 0);
33469570cc8Sopenharmony_ci    EXPECT_EQ(rmdir("hnp_out"), 0);
33569570cc8Sopenharmony_ci
33669570cc8Sopenharmony_ci    GTEST_LOG_(INFO) << "Hnp_Pack_005 end";
33769570cc8Sopenharmony_ci}
33869570cc8Sopenharmony_ci
33969570cc8Sopenharmony_ci/**
34069570cc8Sopenharmony_ci* @tc.name: Hnp_Pack_006
34169570cc8Sopenharmony_ci* @tc.desc:  Verify set cfg valid if HnpCmdPack succeed.
34269570cc8Sopenharmony_ci* @tc.type: FUNC
34369570cc8Sopenharmony_ci* @tc.require:issueI98PSE
34469570cc8Sopenharmony_ci* @tc.author:
34569570cc8Sopenharmony_ci*/
34669570cc8Sopenharmony_ciHWTEST_F(HnpPackTest, Hnp_Pack_006, TestSize.Level0)
34769570cc8Sopenharmony_ci{
34869570cc8Sopenharmony_ci    GTEST_LOG_(INFO) << "Hnp_Pack_006 start";
34969570cc8Sopenharmony_ci
35069570cc8Sopenharmony_ci    EXPECT_EQ(mkdir("hnp_sample", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH), 0);
35169570cc8Sopenharmony_ci    EXPECT_EQ(mkdir("hnp_out", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH), 0);
35269570cc8Sopenharmony_ci    FILE *fp = fopen("./hnp_sample/hnp.json", "w");
35369570cc8Sopenharmony_ci    EXPECT_NE(fp, nullptr);
35469570cc8Sopenharmony_ci    fclose(fp);
35569570cc8Sopenharmony_ci
35669570cc8Sopenharmony_ci    char arg1[] = "hnp", arg2[] = "pack";
35769570cc8Sopenharmony_ci    char arg3[] = "-i", arg4[] = "./hnp_sample", arg5[] = "-o", arg6[] = "./hnp_out";
35869570cc8Sopenharmony_ci    char *argv[] = {arg1, arg2, arg3, arg4, arg5, arg6};
35969570cc8Sopenharmony_ci    int argc = sizeof(argv) / sizeof(argv[0]);
36069570cc8Sopenharmony_ci
36169570cc8Sopenharmony_ci    { // ok. no links item in install item
36269570cc8Sopenharmony_ci        char cfg[] = "{\"type\":\"hnp-config\",\"name\":\"sample\",\"version\":\"1.1\",\"install\":{}}";
36369570cc8Sopenharmony_ci        fp = fopen("./hnp_sample/hnp.json", "w");
36469570cc8Sopenharmony_ci        EXPECT_EQ(fwrite(cfg, sizeof(char), strlen(cfg) + 1, fp), strlen(cfg) + 1);
36569570cc8Sopenharmony_ci        fclose(fp);
36669570cc8Sopenharmony_ci
36769570cc8Sopenharmony_ci        EXPECT_EQ(HnpCmdPack(argc, argv), 0);
36869570cc8Sopenharmony_ci        EXPECT_EQ(remove("./hnp_out/sample.hnp"), 0);
36969570cc8Sopenharmony_ci    }
37069570cc8Sopenharmony_ci    { // ok. no array in links item
37169570cc8Sopenharmony_ci        char cfg[] = "{\"type\":\"hnp-config\",\"name\":\"sample\",\"version\":\"1.1\",\"install\":"
37269570cc8Sopenharmony_ci            "{\"links\":[]}}";
37369570cc8Sopenharmony_ci        fp = fopen("./hnp_sample/hnp.json", "w");
37469570cc8Sopenharmony_ci        EXPECT_EQ(fwrite(cfg, sizeof(char), strlen(cfg) + 1, fp), strlen(cfg) + 1);
37569570cc8Sopenharmony_ci        fclose(fp);
37669570cc8Sopenharmony_ci
37769570cc8Sopenharmony_ci        EXPECT_EQ(HnpCmdPack(argc, argv), 0);
37869570cc8Sopenharmony_ci        EXPECT_EQ(remove("./hnp_out/sample.hnp"), 0);
37969570cc8Sopenharmony_ci    }
38069570cc8Sopenharmony_ci    { // ok. 2 links
38169570cc8Sopenharmony_ci        char cfg[] = "{\"type\":\"hnp-config\",\"name\":\"sample\",\"version\":\"1.1\",\"install\":"
38269570cc8Sopenharmony_ci            "{\"links\":[{\"source\":\"a.out\",\"target\":\"out\"},{\"source\":\"a.out\","
38369570cc8Sopenharmony_ci            "\"target\":\"out2\"}]}}";
38469570cc8Sopenharmony_ci        fp = fopen("./hnp_sample/hnp.json", "w");
38569570cc8Sopenharmony_ci        EXPECT_EQ(fwrite(cfg, sizeof(char), strlen(cfg) + 1, fp), strlen(cfg) + 1);
38669570cc8Sopenharmony_ci        fclose(fp);
38769570cc8Sopenharmony_ci
38869570cc8Sopenharmony_ci        EXPECT_EQ(HnpCmdPack(argc, argv), HNP_ERRNO_PACK_GET_REALPATH_FAILED);
38969570cc8Sopenharmony_ci
39069570cc8Sopenharmony_ci        FILE *fp = fopen("./hnp_sample/a.out", "w");
39169570cc8Sopenharmony_ci        EXPECT_NE(fp, nullptr);
39269570cc8Sopenharmony_ci        fclose(fp);
39369570cc8Sopenharmony_ci        EXPECT_EQ(HnpCmdPack(argc, argv), 0);
39469570cc8Sopenharmony_ci        EXPECT_EQ(remove("./hnp_sample/a.out"), 0);
39569570cc8Sopenharmony_ci        EXPECT_EQ(remove("./hnp_out/sample.hnp"), 0);
39669570cc8Sopenharmony_ci    }
39769570cc8Sopenharmony_ci
39869570cc8Sopenharmony_ci    EXPECT_EQ(remove("./hnp_sample/hnp.json"), 0);
39969570cc8Sopenharmony_ci    EXPECT_EQ(rmdir("hnp_sample"), 0);
40069570cc8Sopenharmony_ci    EXPECT_EQ(rmdir("hnp_out"), 0);
40169570cc8Sopenharmony_ci
40269570cc8Sopenharmony_ci    GTEST_LOG_(INFO) << "Hnp_Pack_006 end";
40369570cc8Sopenharmony_ci}
40469570cc8Sopenharmony_ci
40569570cc8Sopenharmony_ci
40669570cc8Sopenharmony_ci} // namespace OHOS
407