100600bfbSopenharmony_ci/*
200600bfbSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd.
300600bfbSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
400600bfbSopenharmony_ci * you may not use this file except in compliance with the License.
500600bfbSopenharmony_ci * You may obtain a copy of the License at
600600bfbSopenharmony_ci *
700600bfbSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
800600bfbSopenharmony_ci *
900600bfbSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1000600bfbSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1100600bfbSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1200600bfbSopenharmony_ci * See the License for the specific language governing permissions and
1300600bfbSopenharmony_ci * limitations under the License.
1400600bfbSopenharmony_ci */
1500600bfbSopenharmony_ci
1600600bfbSopenharmony_ci#include <gtest/gtest.h>
1700600bfbSopenharmony_ci#include <vector>
1800600bfbSopenharmony_ci#include <unistd.h>
1900600bfbSopenharmony_ci
2000600bfbSopenharmony_ci#include "directory_ex.h"
2100600bfbSopenharmony_ci#include "executor/zip_output.h"
2200600bfbSopenharmony_ci#include "executor/fd_output.h"
2300600bfbSopenharmony_ci#include "executor/zipfolder_output.h"
2400600bfbSopenharmony_ci#define private public
2500600bfbSopenharmony_ci#include "raw_param.h"
2600600bfbSopenharmony_ci#undef private
2700600bfbSopenharmony_ci
2800600bfbSopenharmony_ciusing namespace std;
2900600bfbSopenharmony_ciusing namespace testing::ext;
3000600bfbSopenharmony_ciusing namespace OHOS;
3100600bfbSopenharmony_ciusing namespace OHOS::HiviewDFX;
3200600bfbSopenharmony_cinamespace OHOS {
3300600bfbSopenharmony_cinamespace HiviewDFX {
3400600bfbSopenharmony_ciclass HidumperOutputTest : public testing::Test {
3500600bfbSopenharmony_cipublic:
3600600bfbSopenharmony_ci    static void SetUpTestCase(void);
3700600bfbSopenharmony_ci    static void TearDownTestCase(void);
3800600bfbSopenharmony_ci    void SetUp();
3900600bfbSopenharmony_ci    void TearDown();
4000600bfbSopenharmony_ci
4100600bfbSopenharmony_ciprotected:
4200600bfbSopenharmony_ci    static const std::string FILE_ROOT;
4300600bfbSopenharmony_ci};
4400600bfbSopenharmony_ci
4500600bfbSopenharmony_civoid HidumperOutputTest::SetUpTestCase(void)
4600600bfbSopenharmony_ci{
4700600bfbSopenharmony_ci    ForceCreateDirectory(FILE_ROOT);
4800600bfbSopenharmony_ci}
4900600bfbSopenharmony_civoid HidumperOutputTest::TearDownTestCase(void)
5000600bfbSopenharmony_ci{
5100600bfbSopenharmony_ci    ForceRemoveDirectory(FILE_ROOT);
5200600bfbSopenharmony_ci}
5300600bfbSopenharmony_civoid HidumperOutputTest::SetUp(void)
5400600bfbSopenharmony_ci{
5500600bfbSopenharmony_ci}
5600600bfbSopenharmony_civoid HidumperOutputTest::TearDown(void)
5700600bfbSopenharmony_ci{
5800600bfbSopenharmony_ci}
5900600bfbSopenharmony_ci
6000600bfbSopenharmony_ciconst std::string HidumperOutputTest::FILE_ROOT = "/data/local/tmp/hidumper_test/";
6100600bfbSopenharmony_ci
6200600bfbSopenharmony_ci/**
6300600bfbSopenharmony_ci * @tc.name: HidumperOutputTest001
6400600bfbSopenharmony_ci * @tc.desc: Test ZipOutpu with multibytes content.
6500600bfbSopenharmony_ci * @tc.type: FUNC
6600600bfbSopenharmony_ci */
6700600bfbSopenharmony_ciHWTEST_F(HidumperOutputTest, HidumperOutputTest001, TestSize.Level3)
6800600bfbSopenharmony_ci{
6900600bfbSopenharmony_ci    auto parameter = std::make_shared<DumperParameter>();
7000600bfbSopenharmony_ci    auto dump_datas = std::make_shared<std::vector<std::vector<std::string>>>();
7100600bfbSopenharmony_ci    auto zip_output = make_shared<ZipOutput>();
7200600bfbSopenharmony_ci
7300600bfbSopenharmony_ci    // multibytes content
7400600bfbSopenharmony_ci    {
7500600bfbSopenharmony_ci        std::string line_content;
7600600bfbSopenharmony_ci        line_content = "根据输出结果(win32 + vc 编译器)可以看到,"
7700600bfbSopenharmony_ci                       "strShort 对象的地址和 c_str() 的地址很接近,"
7800600bfbSopenharmony_ci                       "都在 strShort 对象的栈控件内,"
7900600bfbSopenharmony_ci                       "而 strLong 的 c_str() 地址很明显与 strLong 对象地址不同,是在 heap 中分配的.";
8000600bfbSopenharmony_ci        std::vector<std::string> line_vector;
8100600bfbSopenharmony_ci        line_vector.push_back(line_content);
8200600bfbSopenharmony_ci        dump_datas->push_back(line_vector);
8300600bfbSopenharmony_ci    }
8400600bfbSopenharmony_ci
8500600bfbSopenharmony_ci    DumperOpts opts;
8600600bfbSopenharmony_ci    opts.path_ = FILE_ROOT + "GZ_HidumperOutputTest001.gz";
8700600bfbSopenharmony_ci    parameter->SetOpts(opts);
8800600bfbSopenharmony_ci
8900600bfbSopenharmony_ci    auto config = std::make_shared<DumpCfg>();
9000600bfbSopenharmony_ci    zip_output->SetDumpConfig(config);
9100600bfbSopenharmony_ci
9200600bfbSopenharmony_ci    DumpStatus ret = zip_output->PreExecute(parameter, dump_datas);
9300600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "PreExecute failed.";
9400600bfbSopenharmony_ci
9500600bfbSopenharmony_ci    ret = zip_output->Execute();
9600600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "Execute failed.";
9700600bfbSopenharmony_ci
9800600bfbSopenharmony_ci    ret = zip_output->AfterExecute();
9900600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "AfterExecute failed.";
10000600bfbSopenharmony_ci}
10100600bfbSopenharmony_ci
10200600bfbSopenharmony_ci/**
10300600bfbSopenharmony_ci * @tc.name: HidumperOutputTest002
10400600bfbSopenharmony_ci * @tc.desc: Test ZipOutpu with content size touch buffer size.
10500600bfbSopenharmony_ci * @tc.type: FUNC
10600600bfbSopenharmony_ci */
10700600bfbSopenharmony_ciHWTEST_F(HidumperOutputTest, HidumperOutputTest002, TestSize.Level3)
10800600bfbSopenharmony_ci{
10900600bfbSopenharmony_ci    auto parameter = std::make_shared<DumperParameter>();
11000600bfbSopenharmony_ci    auto dump_datas = std::make_shared<std::vector<std::vector<std::string>>>();
11100600bfbSopenharmony_ci    auto zip_output = make_shared<ZipOutput>();
11200600bfbSopenharmony_ci
11300600bfbSopenharmony_ci    // Touch Buffer Size
11400600bfbSopenharmony_ci    {
11500600bfbSopenharmony_ci        std::string line_content;
11600600bfbSopenharmony_ci        line_content = "HidumperOutputTest001 big one!HidumperOutputTest001 big one!"
11700600bfbSopenharmony_ci                       "HidumperOutputTest001 big one!HidumperOutputTest001 big one!"
11800600bfbSopenharmony_ci                       "HidumperOutputTest001 big one!HidumperOutputTest001 big one!"
11900600bfbSopenharmony_ci                       "HidumperOutputTest001 big one!HidumperOutputTest001 big one!"
12000600bfbSopenharmony_ci                       "HidumperOut123456";
12100600bfbSopenharmony_ci        std::vector<std::string> line_vector;
12200600bfbSopenharmony_ci        line_vector.push_back(line_content);
12300600bfbSopenharmony_ci        dump_datas->push_back(line_vector);
12400600bfbSopenharmony_ci    }
12500600bfbSopenharmony_ci
12600600bfbSopenharmony_ci    DumperOpts opts;
12700600bfbSopenharmony_ci    opts.path_ = FILE_ROOT + "GZ_HidumperOutputTest002.gz";
12800600bfbSopenharmony_ci    parameter->SetOpts(opts);
12900600bfbSopenharmony_ci
13000600bfbSopenharmony_ci    DumpStatus ret = zip_output->PreExecute(parameter, dump_datas);
13100600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "PreExecute failed.";
13200600bfbSopenharmony_ci
13300600bfbSopenharmony_ci    ret = zip_output->Execute();
13400600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "Execute failed.";
13500600bfbSopenharmony_ci
13600600bfbSopenharmony_ci    ret = zip_output->AfterExecute();
13700600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "AfterExecute failed.";
13800600bfbSopenharmony_ci}
13900600bfbSopenharmony_ci
14000600bfbSopenharmony_ci/**
14100600bfbSopenharmony_ci * @tc.name: HidumperOutputTest003
14200600bfbSopenharmony_ci * @tc.desc: Test ZipOutpu with content size touch buffer size - 1.
14300600bfbSopenharmony_ci * @tc.type: FUNC
14400600bfbSopenharmony_ci */
14500600bfbSopenharmony_ciHWTEST_F(HidumperOutputTest, HidumperOutputTest003, TestSize.Level3)
14600600bfbSopenharmony_ci{
14700600bfbSopenharmony_ci    auto parameter = std::make_shared<DumperParameter>();
14800600bfbSopenharmony_ci    auto dump_datas = std::make_shared<std::vector<std::vector<std::string>>>();
14900600bfbSopenharmony_ci    auto zip_output = make_shared<ZipOutput>();
15000600bfbSopenharmony_ci
15100600bfbSopenharmony_ci    // Touch Buffer Size - 1
15200600bfbSopenharmony_ci    {
15300600bfbSopenharmony_ci        std::string line_content;
15400600bfbSopenharmony_ci        line_content = "HidumperOutputTest003 big one!"
15500600bfbSopenharmony_ci                       "HidumperOutputTest003 big one!"
15600600bfbSopenharmony_ci                       "HidumperOutputTest003 big one!"
15700600bfbSopenharmony_ci                       "HidumperOutputTest003 big one!"
15800600bfbSopenharmony_ci                       "HidumperOutputTest003 big one!"
15900600bfbSopenharmony_ci                       "HidumperOutputTest003 big one!"
16000600bfbSopenharmony_ci                       "HidumperOutputTest003 big one!"
16100600bfbSopenharmony_ci                       "HidumperOutputTest003 big one!"
16200600bfbSopenharmony_ci                       "HidumperOu12345";
16300600bfbSopenharmony_ci        std::vector<std::string> line_vector;
16400600bfbSopenharmony_ci        line_vector.push_back(line_content);
16500600bfbSopenharmony_ci        dump_datas->push_back(line_vector);
16600600bfbSopenharmony_ci    }
16700600bfbSopenharmony_ci
16800600bfbSopenharmony_ci    DumperOpts opts;
16900600bfbSopenharmony_ci    opts.path_ = FILE_ROOT + "GZ_HidumperOutputTest003.gz";
17000600bfbSopenharmony_ci    parameter->SetOpts(opts);
17100600bfbSopenharmony_ci
17200600bfbSopenharmony_ci    DumpStatus ret = zip_output->PreExecute(parameter, dump_datas);
17300600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "PreExecute failed.";
17400600bfbSopenharmony_ci
17500600bfbSopenharmony_ci    ret = zip_output->Execute();
17600600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "Execute failed.";
17700600bfbSopenharmony_ci
17800600bfbSopenharmony_ci    ret = zip_output->AfterExecute();
17900600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "AfterExecute failed.";
18000600bfbSopenharmony_ci}
18100600bfbSopenharmony_ci
18200600bfbSopenharmony_ci/**
18300600bfbSopenharmony_ci * @tc.name: HidumperOutputTest004
18400600bfbSopenharmony_ci * @tc.desc: Test ZipOutpu with content size touch buffer size + 1.
18500600bfbSopenharmony_ci * @tc.type: FUNC
18600600bfbSopenharmony_ci */
18700600bfbSopenharmony_ciHWTEST_F(HidumperOutputTest, HidumperOutputTest004, TestSize.Level3)
18800600bfbSopenharmony_ci{
18900600bfbSopenharmony_ci    auto parameter = std::make_shared<DumperParameter>();
19000600bfbSopenharmony_ci    auto dump_datas = std::make_shared<std::vector<std::vector<std::string>>>();
19100600bfbSopenharmony_ci    auto zip_output = make_shared<ZipOutput>();
19200600bfbSopenharmony_ci
19300600bfbSopenharmony_ci    // Touch Buffer Size + 1
19400600bfbSopenharmony_ci    {
19500600bfbSopenharmony_ci        std::string line_content;
19600600bfbSopenharmony_ci        line_content = "HidumperOutputTest004 big one!"
19700600bfbSopenharmony_ci                       "HidumperOutputTest004 big one!"
19800600bfbSopenharmony_ci                       "HidumperOutputTest004 big one!"
19900600bfbSopenharmony_ci                       "HidumperOutputTest004 big one!"
20000600bfbSopenharmony_ci                       "HidumperOutputTest004 big one!"
20100600bfbSopenharmony_ci                       "HidumperOutputTest004 big one!"
20200600bfbSopenharmony_ci                       "HidumperOutputTest004 big one!"
20300600bfbSopenharmony_ci                       "HidumperOutputTest004 big one!"
20400600bfbSopenharmony_ci                       "HidumperOu1234567";
20500600bfbSopenharmony_ci        std::vector<std::string> line_vector;
20600600bfbSopenharmony_ci        line_vector.push_back(line_content);
20700600bfbSopenharmony_ci        dump_datas->push_back(line_vector);
20800600bfbSopenharmony_ci    }
20900600bfbSopenharmony_ci
21000600bfbSopenharmony_ci    DumperOpts opts;
21100600bfbSopenharmony_ci    opts.path_ = FILE_ROOT + "GZ_HidumperOutputTest004.gz";
21200600bfbSopenharmony_ci    parameter->SetOpts(opts);
21300600bfbSopenharmony_ci
21400600bfbSopenharmony_ci    DumpStatus ret = zip_output->PreExecute(parameter, dump_datas);
21500600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "PreExecute failed.";
21600600bfbSopenharmony_ci
21700600bfbSopenharmony_ci    ret = zip_output->Execute();
21800600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "Execute failed.";
21900600bfbSopenharmony_ci
22000600bfbSopenharmony_ci    ret = zip_output->AfterExecute();
22100600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "AfterExecute failed.";
22200600bfbSopenharmony_ci}
22300600bfbSopenharmony_ci
22400600bfbSopenharmony_ci/**
22500600bfbSopenharmony_ci * @tc.name: HidumperOutputTest005
22600600bfbSopenharmony_ci * @tc.desc: Test ZipOutpu with multi lines content.
22700600bfbSopenharmony_ci * @tc.type: FUNC
22800600bfbSopenharmony_ci */
22900600bfbSopenharmony_ciHWTEST_F(HidumperOutputTest, HidumperOutputTest005, TestSize.Level3)
23000600bfbSopenharmony_ci{
23100600bfbSopenharmony_ci    auto parameter = std::make_shared<DumperParameter>();
23200600bfbSopenharmony_ci    auto dump_datas = std::make_shared<std::vector<std::vector<std::string>>>();
23300600bfbSopenharmony_ci    auto zip_output = make_shared<ZipOutput>();
23400600bfbSopenharmony_ci
23500600bfbSopenharmony_ci    // Multi lines
23600600bfbSopenharmony_ci    for (int i = 1; i < 1000; i++) {
23700600bfbSopenharmony_ci        std::string line_content;
23800600bfbSopenharmony_ci        line_content = "HidumperOutputTest005 big one!"
23900600bfbSopenharmony_ci                       "HidumperOutputTest005 big two!"
24000600bfbSopenharmony_ci                       "HidumperOutputTest005 big three!"
24100600bfbSopenharmony_ci                       "HidumperOutputTest005 big four!"
24200600bfbSopenharmony_ci                       "HidumperOutputTest005 big five!"
24300600bfbSopenharmony_ci                       "HidumperOutputTest005 big six!"
24400600bfbSopenharmony_ci                       "HidumperOutputTest005 big seven!"
24500600bfbSopenharmony_ci                       "HidumperOutputTest005 big eight!"
24600600bfbSopenharmony_ci                       "HidumperOutputTest005 big nine!"
24700600bfbSopenharmony_ci                       "HidumperOutputTest005 big ten!"
24800600bfbSopenharmony_ci                       "HidumperOutputTest005 big eleven!"
24900600bfbSopenharmony_ci                       "HidumperOutputTest005 big twelve!"
25000600bfbSopenharmony_ci                       "HidumperOutputTest005 big thirteen!"
25100600bfbSopenharmony_ci                       "HidumperOutputTest005 big fourteen!";
25200600bfbSopenharmony_ci        std::vector<std::string> line_vector;
25300600bfbSopenharmony_ci        line_vector.push_back(line_content);
25400600bfbSopenharmony_ci        dump_datas->push_back(line_vector);
25500600bfbSopenharmony_ci    }
25600600bfbSopenharmony_ci
25700600bfbSopenharmony_ci    DumperOpts opts;
25800600bfbSopenharmony_ci    opts.path_ = FILE_ROOT + "GZ_HidumperOutputTest005.gz";
25900600bfbSopenharmony_ci    parameter->SetOpts(opts);
26000600bfbSopenharmony_ci
26100600bfbSopenharmony_ci    DumpStatus ret = zip_output->PreExecute(parameter, dump_datas);
26200600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "PreExecute failed.";
26300600bfbSopenharmony_ci
26400600bfbSopenharmony_ci    ret = zip_output->Execute();
26500600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "Execute failed.";
26600600bfbSopenharmony_ci
26700600bfbSopenharmony_ci    ret = zip_output->AfterExecute();
26800600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "AfterExecute failed.";
26900600bfbSopenharmony_ci}
27000600bfbSopenharmony_ci
27100600bfbSopenharmony_ci/**
27200600bfbSopenharmony_ci * @tc.name: HidumperOutputTest006
27300600bfbSopenharmony_ci * @tc.desc: Test ZipOutpu with short string.
27400600bfbSopenharmony_ci * @tc.type: FUNC
27500600bfbSopenharmony_ci */
27600600bfbSopenharmony_ciHWTEST_F(HidumperOutputTest, HidumperOutputTest006, TestSize.Level3)
27700600bfbSopenharmony_ci{
27800600bfbSopenharmony_ci    auto parameter = std::make_shared<DumperParameter>();
27900600bfbSopenharmony_ci    auto dump_datas = std::make_shared<std::vector<std::vector<std::string>>>();
28000600bfbSopenharmony_ci    auto zip_output = make_shared<ZipOutput>();
28100600bfbSopenharmony_ci
28200600bfbSopenharmony_ci    std::string line_content;
28300600bfbSopenharmony_ci    line_content = "cmd is:";
28400600bfbSopenharmony_ci    std::vector<std::string> line_vector;
28500600bfbSopenharmony_ci    line_vector.push_back(line_content);
28600600bfbSopenharmony_ci    dump_datas->push_back(line_vector);
28700600bfbSopenharmony_ci
28800600bfbSopenharmony_ci    DumperOpts opts;
28900600bfbSopenharmony_ci    opts.path_ = FILE_ROOT + "GZ_HidumperOutputTest006.gz";
29000600bfbSopenharmony_ci    parameter->SetOpts(opts);
29100600bfbSopenharmony_ci
29200600bfbSopenharmony_ci    DumpStatus ret = zip_output->PreExecute(parameter, dump_datas);
29300600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "PreExecute failed.";
29400600bfbSopenharmony_ci
29500600bfbSopenharmony_ci    ret = zip_output->Execute();
29600600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "Execute failed.";
29700600bfbSopenharmony_ci
29800600bfbSopenharmony_ci    ret = zip_output->AfterExecute();
29900600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "AfterExecute failed.";
30000600bfbSopenharmony_ci}
30100600bfbSopenharmony_ci
30200600bfbSopenharmony_ci/**
30300600bfbSopenharmony_ci * @tc.name: HidumperOutputTest008
30400600bfbSopenharmony_ci * @tc.desc: Test ZipOutpu with short string.
30500600bfbSopenharmony_ci * @tc.type: FUNC
30600600bfbSopenharmony_ci */
30700600bfbSopenharmony_ciHWTEST_F(HidumperOutputTest, HidumperOutputTest008, TestSize.Level3)
30800600bfbSopenharmony_ci{
30900600bfbSopenharmony_ci    auto parameter = std::make_shared<DumperParameter>();
31000600bfbSopenharmony_ci    auto dumpDatas = std::make_shared<std::vector<std::vector<std::string>>>();
31100600bfbSopenharmony_ci    auto zipFdOutput = make_shared<ZipFolderOutput>();
31200600bfbSopenharmony_ci
31300600bfbSopenharmony_ci    DumperOpts opts;
31400600bfbSopenharmony_ci    opts.path_ = FILE_ROOT + "zipOutputTest.gz";
31500600bfbSopenharmony_ci    parameter->SetOpts(opts);
31600600bfbSopenharmony_ci
31700600bfbSopenharmony_ci    std::string srcpath = "/data/log/hilog";
31800600bfbSopenharmony_ci    std::vector<std::u16string> args;
31900600bfbSopenharmony_ci    auto rawparam = std::make_shared<RawParam>(0, 1, 0, args, -1);
32000600bfbSopenharmony_ci    rawparam->SetFolder(srcpath);
32100600bfbSopenharmony_ci    parameter->setClientCallback(rawparam);
32200600bfbSopenharmony_ci
32300600bfbSopenharmony_ci    DumpStatus ret = zipFdOutput -> PreExecute(parameter, dumpDatas);
32400600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "PreExecute failed.";
32500600bfbSopenharmony_ci
32600600bfbSopenharmony_ci    ret = zipFdOutput->Execute();
32700600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "Execute failed.";
32800600bfbSopenharmony_ci
32900600bfbSopenharmony_ci    ret = zipFdOutput->AfterExecute();
33000600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "AfterExecute failed.";
33100600bfbSopenharmony_ci
33200600bfbSopenharmony_ci    zipFdOutput->Reset();
33300600bfbSopenharmony_ci}
33400600bfbSopenharmony_ci
33500600bfbSopenharmony_ci/**
33600600bfbSopenharmony_ci * @tc.name: HidumperOutputTest009
33700600bfbSopenharmony_ci * @tc.desc: Test ZipOutpu with multibytes content.
33800600bfbSopenharmony_ci * @tc.type: FUNC
33900600bfbSopenharmony_ci */
34000600bfbSopenharmony_ciHWTEST_F(HidumperOutputTest, HidumperOutputTest009, TestSize.Level3)
34100600bfbSopenharmony_ci{
34200600bfbSopenharmony_ci    auto parameter = std::make_shared<DumperParameter>();
34300600bfbSopenharmony_ci    auto dump_datas = std::make_shared<std::vector<std::vector<std::string>>>();
34400600bfbSopenharmony_ci    auto zip_output = make_shared<ZipOutput>();
34500600bfbSopenharmony_ci
34600600bfbSopenharmony_ci    // multibytes content
34700600bfbSopenharmony_ci    {
34800600bfbSopenharmony_ci        std::string line_content;
34900600bfbSopenharmony_ci        for (int i = 0; i < 1025; i++) { // 1025: loop size
35000600bfbSopenharmony_ci            line_content += "HidumperOutputTest000008 big one";
35100600bfbSopenharmony_ci        }
35200600bfbSopenharmony_ci        std::vector<std::string> line_vector;
35300600bfbSopenharmony_ci        line_vector.push_back(line_content);
35400600bfbSopenharmony_ci        dump_datas->push_back(line_vector);
35500600bfbSopenharmony_ci    }
35600600bfbSopenharmony_ci
35700600bfbSopenharmony_ci    DumperOpts opts;
35800600bfbSopenharmony_ci    opts.path_ = FILE_ROOT + "GZ_HidumperOutputTest008.gz";
35900600bfbSopenharmony_ci    parameter->SetOpts(opts);
36000600bfbSopenharmony_ci
36100600bfbSopenharmony_ci    auto config = std::make_shared<DumpCfg>();
36200600bfbSopenharmony_ci    zip_output->SetDumpConfig(config);
36300600bfbSopenharmony_ci
36400600bfbSopenharmony_ci    DumpStatus ret = zip_output->PreExecute(parameter, dump_datas);
36500600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "PreExecute failed.";
36600600bfbSopenharmony_ci
36700600bfbSopenharmony_ci    ret = zip_output->Execute();
36800600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "Execute failed.";
36900600bfbSopenharmony_ci
37000600bfbSopenharmony_ci    ret = zip_output->AfterExecute();
37100600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "AfterExecute failed.";
37200600bfbSopenharmony_ci}
37300600bfbSopenharmony_ci
37400600bfbSopenharmony_ci/**
37500600bfbSopenharmony_ci * @tc.name: HidumperOutputTest007
37600600bfbSopenharmony_ci * @tc.desc: Test FdOutput.
37700600bfbSopenharmony_ci * @tc.type: FUNC
37800600bfbSopenharmony_ci */
37900600bfbSopenharmony_ciHWTEST_F(HidumperOutputTest, HidumperOutputTest007, TestSize.Level3)
38000600bfbSopenharmony_ci{
38100600bfbSopenharmony_ci    auto parameter = std::make_shared<DumperParameter>();
38200600bfbSopenharmony_ci    std::vector<std::u16string> args;
38300600bfbSopenharmony_ci    auto reqCtl = std::make_shared<RawParam>(0, 0, 0, args, STDOUT_FILENO);
38400600bfbSopenharmony_ci    parameter->setClientCallback(reqCtl);
38500600bfbSopenharmony_ci    auto dumpDatas = std::make_shared<std::vector<std::vector<std::string>>>();
38600600bfbSopenharmony_ci    auto fdOutput = make_shared<FDOutput>();
38700600bfbSopenharmony_ci
38800600bfbSopenharmony_ci    std::string lineContent;
38900600bfbSopenharmony_ci    lineContent = "this is FdOutputTest";
39000600bfbSopenharmony_ci    std::vector<std::string> lineVector;
39100600bfbSopenharmony_ci    lineVector.push_back(lineContent);
39200600bfbSopenharmony_ci    dumpDatas->push_back(lineVector);
39300600bfbSopenharmony_ci
39400600bfbSopenharmony_ci    DumpStatus ret = fdOutput->PreExecute(parameter, dumpDatas);
39500600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "PreExecute failed.";
39600600bfbSopenharmony_ci
39700600bfbSopenharmony_ci    ret = fdOutput->Execute();
39800600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "Execute failed.";
39900600bfbSopenharmony_ci
40000600bfbSopenharmony_ci    ret = fdOutput->AfterExecute();
40100600bfbSopenharmony_ci    ASSERT_TRUE(ret == DumpStatus::DUMP_OK) << "AfterExecute failed.";
40200600bfbSopenharmony_ci}
40300600bfbSopenharmony_ci} // namespace HiviewDFX
40400600bfbSopenharmony_ci} // namespace OHOS
405