1fb299fa2Sopenharmony_ci/*
2fb299fa2Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
3fb299fa2Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4fb299fa2Sopenharmony_ci * you may not use this file except in compliance with the License.
5fb299fa2Sopenharmony_ci * You may obtain a copy of the License at
6fb299fa2Sopenharmony_ci *
7fb299fa2Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8fb299fa2Sopenharmony_ci *
9fb299fa2Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10fb299fa2Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11fb299fa2Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12fb299fa2Sopenharmony_ci * See the License for the specific language governing permissions and
13fb299fa2Sopenharmony_ci * limitations under the License.
14fb299fa2Sopenharmony_ci */
15fb299fa2Sopenharmony_ci
16fb299fa2Sopenharmony_ci#include <fcntl.h>
17fb299fa2Sopenharmony_ci#include <gtest/gtest.h>
18fb299fa2Sopenharmony_ci#include <memory>
19fb299fa2Sopenharmony_ci#include <sys/ioctl.h>
20fb299fa2Sopenharmony_ci#include "common/flashd_define.h"
21fb299fa2Sopenharmony_ci#include "daemon/format_commander.h"
22fb299fa2Sopenharmony_ci#include "daemon/commander_factory.h"
23fb299fa2Sopenharmony_ci#include "daemon/daemon_updater.h"
24fb299fa2Sopenharmony_ci#include "daemon/flashd_utils.h"
25fb299fa2Sopenharmony_ci#include "hdi/client/update_hdi_client.h"
26fb299fa2Sopenharmony_ci#include "partition.h"
27fb299fa2Sopenharmony_ci#include "fs_manager/mount.h"
28fb299fa2Sopenharmony_ci#include "log/log.h"
29fb299fa2Sopenharmony_ci#include "securec.h"
30fb299fa2Sopenharmony_ci#include "updater/updater_const.h"
31fb299fa2Sopenharmony_ci#include "misc_info/misc_info.h"
32fb299fa2Sopenharmony_ci
33fb299fa2Sopenharmony_ciusing namespace std;
34fb299fa2Sopenharmony_ciusing namespace Flashd;
35fb299fa2Sopenharmony_ciusing namespace testing::ext;
36fb299fa2Sopenharmony_ciusing namespace Hdc;
37fb299fa2Sopenharmony_ci
38fb299fa2Sopenharmony_cinamespace {
39fb299fa2Sopenharmony_ci
40fb299fa2Sopenharmony_ciclass FLashServiceUnitTest : public testing::Test {
41fb299fa2Sopenharmony_cipublic:
42fb299fa2Sopenharmony_ci    FLashServiceUnitTest()
43fb299fa2Sopenharmony_ci    {
44fb299fa2Sopenharmony_ci        std::cout<<"FLashServiceUnitTest()";
45fb299fa2Sopenharmony_ci    }
46fb299fa2Sopenharmony_ci    ~FLashServiceUnitTest() {}
47fb299fa2Sopenharmony_ci
48fb299fa2Sopenharmony_ci    static void SetUpTestCase(void)
49fb299fa2Sopenharmony_ci    {
50fb299fa2Sopenharmony_ci        InitUpdaterLogger("FLASHD", TMP_LOG, TMP_STAGE_LOG, TMP_ERROR_CODE_PATH);
51fb299fa2Sopenharmony_ci    }
52fb299fa2Sopenharmony_ci    static void TearDownTestCase(void) {}
53fb299fa2Sopenharmony_ci    void SetUp() {}
54fb299fa2Sopenharmony_ci    void TearDown() {}
55fb299fa2Sopenharmony_ci    void TestBody() {}
56fb299fa2Sopenharmony_ci    std::unique_ptr<Flashd::Commander> commander_ = nullptr;
57fb299fa2Sopenharmony_ci};
58fb299fa2Sopenharmony_ci
59fb299fa2Sopenharmony_ciHWTEST_F(FLashServiceUnitTest, FormatCommanderDoCommand, TestSize.Level1)
60fb299fa2Sopenharmony_ci{
61fb299fa2Sopenharmony_ci    LoadFstab();
62fb299fa2Sopenharmony_ci    std::unique_ptr<Flashd::Commander> commander = nullptr;
63fb299fa2Sopenharmony_ci    Flashd::UpdaterState ret = UpdaterState::DOING;
64fb299fa2Sopenharmony_ci    auto callbackFail = [&ret](Flashd::CmdType type, Flashd::UpdaterState state, const std::string &msg) {
65fb299fa2Sopenharmony_ci        ret = state;
66fb299fa2Sopenharmony_ci    };
67fb299fa2Sopenharmony_ci    commander = Flashd::CommanderFactory::GetInstance().CreateCommander(Hdc::CMDSTR_FORMAT_PARTITION, callbackFail);
68fb299fa2Sopenharmony_ci    EXPECT_NE(nullptr, commander);
69fb299fa2Sopenharmony_ci    std::string cmdstr = "format data";
70fb299fa2Sopenharmony_ci    uint8_t *payload = nullptr;
71fb299fa2Sopenharmony_ci    int payloadSize = cmdstr.size() + 1;
72fb299fa2Sopenharmony_ci    commander->DoCommand(payload, payloadSize);
73fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::FAIL, ret);
74fb299fa2Sopenharmony_ci
75fb299fa2Sopenharmony_ci    payload = reinterpret_cast<uint8_t*>(cmdstr.data());
76fb299fa2Sopenharmony_ci    payloadSize = 0;
77fb299fa2Sopenharmony_ci    commander->DoCommand(payload, payloadSize);
78fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::FAIL, ret);
79fb299fa2Sopenharmony_ci
80fb299fa2Sopenharmony_ci    cmdstr = "format";
81fb299fa2Sopenharmony_ci    payload = reinterpret_cast<uint8_t*>(cmdstr.data());
82fb299fa2Sopenharmony_ci    payloadSize = cmdstr.size();
83fb299fa2Sopenharmony_ci    commander->DoCommand(payload, payloadSize);
84fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::FAIL, ret);
85fb299fa2Sopenharmony_ci
86fb299fa2Sopenharmony_ci    cmdstr = "format databack";
87fb299fa2Sopenharmony_ci    payload = reinterpret_cast<uint8_t*>(cmdstr.data());
88fb299fa2Sopenharmony_ci    payloadSize = cmdstr.size() + 1;
89fb299fa2Sopenharmony_ci    commander->DoCommand(payload, payloadSize);
90fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::FAIL, ret);
91fb299fa2Sopenharmony_ci}
92fb299fa2Sopenharmony_ci
93fb299fa2Sopenharmony_ciHWTEST_F(FLashServiceUnitTest, UpdateCommanderDoCommand, TestSize.Level1)
94fb299fa2Sopenharmony_ci{
95fb299fa2Sopenharmony_ci    LoadFstab();
96fb299fa2Sopenharmony_ci    std::unique_ptr<Flashd::Commander> commander = nullptr;
97fb299fa2Sopenharmony_ci    Flashd::UpdaterState ret = UpdaterState::DOING;
98fb299fa2Sopenharmony_ci    auto callbackFail = [&ret](Flashd::CmdType type, Flashd::UpdaterState state, const std::string &msg) {
99fb299fa2Sopenharmony_ci        ret = state;
100fb299fa2Sopenharmony_ci    };
101fb299fa2Sopenharmony_ci    commander = Flashd::CommanderFactory::GetInstance().CreateCommander(Hdc::CMDSTR_UPDATE_SYSTEM, callbackFail);
102fb299fa2Sopenharmony_ci    EXPECT_NE(nullptr, commander);
103fb299fa2Sopenharmony_ci    std::string cmdstr = "test.zip";
104fb299fa2Sopenharmony_ci    uint8_t *payload = nullptr;
105fb299fa2Sopenharmony_ci    int payloadSize = cmdstr.size();
106fb299fa2Sopenharmony_ci    commander->DoCommand(payload, payloadSize);
107fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::FAIL, ret);
108fb299fa2Sopenharmony_ci
109fb299fa2Sopenharmony_ci    payload = reinterpret_cast<uint8_t*>(cmdstr.data());
110fb299fa2Sopenharmony_ci    payloadSize = 0;
111fb299fa2Sopenharmony_ci    commander->DoCommand(payload, payloadSize);
112fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::FAIL, ret);
113fb299fa2Sopenharmony_ci
114fb299fa2Sopenharmony_ci    cmdstr = "update 123.zip";
115fb299fa2Sopenharmony_ci    payload = reinterpret_cast<uint8_t*>(cmdstr.data());
116fb299fa2Sopenharmony_ci    payloadSize = cmdstr.size() + 1;
117fb299fa2Sopenharmony_ci    commander->DoCommand(payload, payloadSize);
118fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::FAIL, ret);
119fb299fa2Sopenharmony_ci
120fb299fa2Sopenharmony_ci    cmdstr = "format databack";
121fb299fa2Sopenharmony_ci    payload = reinterpret_cast<uint8_t*>(cmdstr.data());
122fb299fa2Sopenharmony_ci    payloadSize = cmdstr.size() + 1;
123fb299fa2Sopenharmony_ci    commander->DoCommand(payload, payloadSize);
124fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::FAIL, ret);
125fb299fa2Sopenharmony_ci}
126fb299fa2Sopenharmony_ci
127fb299fa2Sopenharmony_ciHWTEST_F(FLashServiceUnitTest, EraseCommanderDoCommand, TestSize.Level1)
128fb299fa2Sopenharmony_ci{
129fb299fa2Sopenharmony_ci    LoadFstab();
130fb299fa2Sopenharmony_ci    std::unique_ptr<Flashd::Commander> commander = nullptr;
131fb299fa2Sopenharmony_ci    Flashd::UpdaterState ret = UpdaterState::DOING;
132fb299fa2Sopenharmony_ci    auto callbackFail = [&ret](Flashd::CmdType type, Flashd::UpdaterState state, const std::string &msg) {
133fb299fa2Sopenharmony_ci        ret = state;
134fb299fa2Sopenharmony_ci    };
135fb299fa2Sopenharmony_ci    commander = Flashd::CommanderFactory::GetInstance().CreateCommander(Hdc::CMDSTR_ERASE_PARTITION, callbackFail);
136fb299fa2Sopenharmony_ci    EXPECT_NE(nullptr, commander);
137fb299fa2Sopenharmony_ci    std::string cmdstr = "erase misc";
138fb299fa2Sopenharmony_ci    uint8_t *payload = nullptr;
139fb299fa2Sopenharmony_ci    int payloadSize = cmdstr.size() + 1;
140fb299fa2Sopenharmony_ci    commander->DoCommand(payload, payloadSize);
141fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::FAIL, ret);
142fb299fa2Sopenharmony_ci
143fb299fa2Sopenharmony_ci    payload = reinterpret_cast<uint8_t*>(cmdstr.data());
144fb299fa2Sopenharmony_ci    payloadSize = 0;
145fb299fa2Sopenharmony_ci    commander->DoCommand(payload, payloadSize);
146fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::FAIL, ret);
147fb299fa2Sopenharmony_ci
148fb299fa2Sopenharmony_ci    cmdstr = "erase";
149fb299fa2Sopenharmony_ci    payload = reinterpret_cast<uint8_t*>(cmdstr.data());
150fb299fa2Sopenharmony_ci    payloadSize = cmdstr.size();
151fb299fa2Sopenharmony_ci    commander->DoCommand(payload, payloadSize);
152fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::FAIL, ret);
153fb299fa2Sopenharmony_ci
154fb299fa2Sopenharmony_ci    cmdstr = "erase misctest";
155fb299fa2Sopenharmony_ci    payload = reinterpret_cast<uint8_t*>(cmdstr.data());
156fb299fa2Sopenharmony_ci    payloadSize = cmdstr.size() + 1;
157fb299fa2Sopenharmony_ci    commander->DoCommand(payload, payloadSize);
158fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::FAIL, ret);
159fb299fa2Sopenharmony_ci}
160fb299fa2Sopenharmony_ci
161fb299fa2Sopenharmony_ciHWTEST_F(FLashServiceUnitTest, FlashCommanderDoCommand, TestSize.Level1)
162fb299fa2Sopenharmony_ci{
163fb299fa2Sopenharmony_ci    LoadFstab();
164fb299fa2Sopenharmony_ci    std::unique_ptr<Flashd::Commander> commander = nullptr;
165fb299fa2Sopenharmony_ci    Flashd::UpdaterState ret = UpdaterState::DOING;
166fb299fa2Sopenharmony_ci    auto callbackFail = [&ret](Flashd::CmdType type, Flashd::UpdaterState state, const std::string &msg) {
167fb299fa2Sopenharmony_ci        ret = state;
168fb299fa2Sopenharmony_ci    };
169fb299fa2Sopenharmony_ci    commander = Flashd::CommanderFactory::GetInstance().CreateCommander(Hdc::CMDSTR_FLASH_PARTITION, callbackFail);
170fb299fa2Sopenharmony_ci    EXPECT_NE(nullptr, commander);
171fb299fa2Sopenharmony_ci    std::string cmdstr = "flash updater updater.img";
172fb299fa2Sopenharmony_ci    uint8_t *payload = nullptr;
173fb299fa2Sopenharmony_ci    int payloadSize = cmdstr.size() + 1;
174fb299fa2Sopenharmony_ci    commander->DoCommand(payload, payloadSize);
175fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::FAIL, ret);
176fb299fa2Sopenharmony_ci
177fb299fa2Sopenharmony_ci    payload = reinterpret_cast<uint8_t*>(cmdstr.data());
178fb299fa2Sopenharmony_ci    payloadSize = 0;
179fb299fa2Sopenharmony_ci    commander->DoCommand(payload, payloadSize);
180fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::FAIL, ret);
181fb299fa2Sopenharmony_ci
182fb299fa2Sopenharmony_ci    cmdstr = "flash updatertest updater.img";
183fb299fa2Sopenharmony_ci    payload = reinterpret_cast<uint8_t*>(cmdstr.data());
184fb299fa2Sopenharmony_ci    payloadSize = cmdstr.size() + 1;
185fb299fa2Sopenharmony_ci    commander->DoCommand(payload, payloadSize);
186fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::SUCCESS, ret);
187fb299fa2Sopenharmony_ci}
188fb299fa2Sopenharmony_ci
189fb299fa2Sopenharmony_ciHWTEST_F(FLashServiceUnitTest, GetFileName, TestSize.Level1)
190fb299fa2Sopenharmony_ci{
191fb299fa2Sopenharmony_ci    std::string testStr = "data/test/test.zip";
192fb299fa2Sopenharmony_ci    std::string res = GetFileName(testStr);
193fb299fa2Sopenharmony_ci    EXPECT_EQ("test.zip", res);
194fb299fa2Sopenharmony_ci
195fb299fa2Sopenharmony_ci    testStr = "D:\\test\\test.zip";
196fb299fa2Sopenharmony_ci    res = GetFileName(testStr);
197fb299fa2Sopenharmony_ci    EXPECT_EQ("test.zip", res);
198fb299fa2Sopenharmony_ci
199fb299fa2Sopenharmony_ci    testStr = "test.zip";
200fb299fa2Sopenharmony_ci    res = GetFileName(testStr);
201fb299fa2Sopenharmony_ci    EXPECT_EQ("", res);
202fb299fa2Sopenharmony_ci}
203fb299fa2Sopenharmony_ci
204fb299fa2Sopenharmony_ciHWTEST_F(FLashServiceUnitTest, GetWriter, TestSize.Level1)
205fb299fa2Sopenharmony_ci{
206fb299fa2Sopenharmony_ci    std::string partName = "";
207fb299fa2Sopenharmony_ci    std::string temp = "";
208fb299fa2Sopenharmony_ci    uint8_t *buffer = reinterpret_cast<uint8_t*>(temp.data());
209fb299fa2Sopenharmony_ci    int bufferSize = partName.size();
210fb299fa2Sopenharmony_ci    std::unique_ptr<FlashdWriter> writer = FlashdImageWriter::GetInstance().GetWriter(partName, buffer, bufferSize);
211fb299fa2Sopenharmony_ci    if (writer == nullptr) {
212fb299fa2Sopenharmony_ci        std::cout << "writer is nullptr";
213fb299fa2Sopenharmony_ci    }
214fb299fa2Sopenharmony_ci    EXPECT_NE(nullptr, writer);
215fb299fa2Sopenharmony_ci
216fb299fa2Sopenharmony_ci    partName = "test";
217fb299fa2Sopenharmony_ci    writer = FlashdImageWriter::GetInstance().GetWriter(partName, buffer, bufferSize);
218fb299fa2Sopenharmony_ci    EXPECT_NE(nullptr, writer);
219fb299fa2Sopenharmony_ci
220fb299fa2Sopenharmony_ci    int ret = writer->Write(partName, reinterpret_cast<uint8_t*>(temp.data()), temp.size());
221fb299fa2Sopenharmony_ci    EXPECT_EQ(-1, ret);
222fb299fa2Sopenharmony_ci}
223fb299fa2Sopenharmony_ci
224fb299fa2Sopenharmony_ciHWTEST_F(FLashServiceUnitTest, FlashdWriterRawWriter, TestSize.Level1)
225fb299fa2Sopenharmony_ci{
226fb299fa2Sopenharmony_ci    std::string partName = "updater_ramdisk.img";
227fb299fa2Sopenharmony_ci    std::string temp = "";
228fb299fa2Sopenharmony_ci    std::unique_ptr<FlashdWriterRaw> writer = std::make_unique<FlashdWriterRaw>();
229fb299fa2Sopenharmony_ci    if (writer == nullptr) {
230fb299fa2Sopenharmony_ci        std::cout << "writer is nullptr";
231fb299fa2Sopenharmony_ci    }
232fb299fa2Sopenharmony_ci    EXPECT_NE(nullptr, writer);
233fb299fa2Sopenharmony_ci
234fb299fa2Sopenharmony_ci    int ret = writer->Write(partName, reinterpret_cast<uint8_t*>(temp.data()), temp.size());
235fb299fa2Sopenharmony_ci    EXPECT_EQ(-1, ret);
236fb299fa2Sopenharmony_ci}
237fb299fa2Sopenharmony_ci
238fb299fa2Sopenharmony_cibool IsTestImg(const std::string &partition, const uint8_t *data, size_t len)
239fb299fa2Sopenharmony_ci{
240fb299fa2Sopenharmony_ci    if (data == nullptr) {
241fb299fa2Sopenharmony_ci        return false;
242fb299fa2Sopenharmony_ci    }
243fb299fa2Sopenharmony_ci    std::cout << "IsTestImg " << partition << " len " << len;
244fb299fa2Sopenharmony_ci    return true;
245fb299fa2Sopenharmony_ci}
246fb299fa2Sopenharmony_ci
247fb299fa2Sopenharmony_cistd::unique_ptr<FlashdWriter> GetTestWriter()
248fb299fa2Sopenharmony_ci{
249fb299fa2Sopenharmony_ci    return std::make_unique<FlashdWriterRaw>();
250fb299fa2Sopenharmony_ci}
251fb299fa2Sopenharmony_ci
252fb299fa2Sopenharmony_ciHWTEST_F(FLashServiceUnitTest, PartitionDoErase, TestSize.Level1)
253fb299fa2Sopenharmony_ci{
254fb299fa2Sopenharmony_ci    std::string partitionName = "test";
255fb299fa2Sopenharmony_ci    Partition partTest(partitionName);
256fb299fa2Sopenharmony_ci    int ret = partTest.DoErase();
257fb299fa2Sopenharmony_ci    EXPECT_EQ(FLASHING_OPEN_PART_ERROR, ret);
258fb299fa2Sopenharmony_ci}
259fb299fa2Sopenharmony_ci
260fb299fa2Sopenharmony_ciHWTEST_F(FLashServiceUnitTest, PartitionDoFormat, TestSize.Level1)
261fb299fa2Sopenharmony_ci{
262fb299fa2Sopenharmony_ci    std::string partitionName = "test";
263fb299fa2Sopenharmony_ci    Partition partTest(partitionName);
264fb299fa2Sopenharmony_ci    int ret = partTest.DoFormat();
265fb299fa2Sopenharmony_ci    EXPECT_EQ(-1, ret);
266fb299fa2Sopenharmony_ci}
267fb299fa2Sopenharmony_ci
268fb299fa2Sopenharmony_ciHWTEST_F(FLashServiceUnitTest, PartitionDoFlash, TestSize.Level1)
269fb299fa2Sopenharmony_ci{
270fb299fa2Sopenharmony_ci    std::string temp = "test.img";
271fb299fa2Sopenharmony_ci    uint8_t *buffer = reinterpret_cast<uint8_t*>(temp.data());
272fb299fa2Sopenharmony_ci    int bufferSize = 0;
273fb299fa2Sopenharmony_ci    std::unique_ptr<FlashdWriter> writer = nullptr;
274fb299fa2Sopenharmony_ci    std::string partName = "updater";
275fb299fa2Sopenharmony_ci    std::string cmdstr = "flash updater updater.img";
276fb299fa2Sopenharmony_ci    uint8_t *payload = reinterpret_cast<uint8_t*>(cmdstr.data());
277fb299fa2Sopenharmony_ci    int payloadSize = cmdstr.size();
278fb299fa2Sopenharmony_ci    std::unique_ptr<Partition> partition_ = std::make_unique<Partition>(partName, std::move(writer));
279fb299fa2Sopenharmony_ci    EXPECT_NE(nullptr, partition_);
280fb299fa2Sopenharmony_ci    int ret = partition_->DoFlash(payload, payloadSize);
281fb299fa2Sopenharmony_ci    EXPECT_EQ(FLASHING_ARG_INVALID, ret);
282fb299fa2Sopenharmony_ci    writer = FlashdImageWriter::GetInstance().GetWriter(partName, buffer, bufferSize);
283fb299fa2Sopenharmony_ci    EXPECT_NE(nullptr, partition_);
284fb299fa2Sopenharmony_ci
285fb299fa2Sopenharmony_ci    payloadSize = 0;
286fb299fa2Sopenharmony_ci    partition_ = std::make_unique<Partition>(partName, std::move(writer));
287fb299fa2Sopenharmony_ci    ret = partition_->DoFlash(payload, payloadSize);
288fb299fa2Sopenharmony_ci    EXPECT_EQ(FLASHING_ARG_INVALID, ret);
289fb299fa2Sopenharmony_ci    payloadSize = cmdstr.size();
290fb299fa2Sopenharmony_ci    payload = nullptr;
291fb299fa2Sopenharmony_ci    ret = partition_->DoFlash(payload, payloadSize);
292fb299fa2Sopenharmony_ci    EXPECT_EQ(FLASHING_ARG_INVALID, ret);
293fb299fa2Sopenharmony_ci}
294fb299fa2Sopenharmony_ci
295fb299fa2Sopenharmony_ciHWTEST_F(FLashServiceUnitTest, UpdateProgress, TestSize.Level1)
296fb299fa2Sopenharmony_ci{
297fb299fa2Sopenharmony_ci    std::string partitionName = "test";
298fb299fa2Sopenharmony_ci    Partition partTest(partitionName);
299fb299fa2Sopenharmony_ci    int ret = partTest.DoFormat();
300fb299fa2Sopenharmony_ci    EXPECT_EQ(-1, ret);
301fb299fa2Sopenharmony_ci}
302fb299fa2Sopenharmony_ci
303fb299fa2Sopenharmony_ciHWTEST_F(FLashServiceUnitTest, UpdateCommanderDoCommand2, TestSize.Level1)
304fb299fa2Sopenharmony_ci{
305fb299fa2Sopenharmony_ci    LoadFstab();
306fb299fa2Sopenharmony_ci    std::unique_ptr<Flashd::Commander> commander = nullptr;
307fb299fa2Sopenharmony_ci    Flashd::UpdaterState ret = UpdaterState::DOING;
308fb299fa2Sopenharmony_ci    auto callbackFail = [&ret](Flashd::CmdType type, Flashd::UpdaterState state, const std::string &msg) {
309fb299fa2Sopenharmony_ci        ret = state;
310fb299fa2Sopenharmony_ci    };
311fb299fa2Sopenharmony_ci    commander = Flashd::CommanderFactory::GetInstance().CreateCommander(Hdc::CMDSTR_UPDATE_SYSTEM, callbackFail);
312fb299fa2Sopenharmony_ci    EXPECT_NE(nullptr, commander);
313fb299fa2Sopenharmony_ci    std::string cmd = "update";
314fb299fa2Sopenharmony_ci    size_t size = cmd.size();
315fb299fa2Sopenharmony_ci    commander->DoCommand(cmd, size);
316fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::FAIL, ret);
317fb299fa2Sopenharmony_ci
318fb299fa2Sopenharmony_ci    cmd = "";
319fb299fa2Sopenharmony_ci    size = cmd.size();
320fb299fa2Sopenharmony_ci    commander->DoCommand(cmd, size);
321fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::FAIL, ret);
322fb299fa2Sopenharmony_ci
323fb299fa2Sopenharmony_ci    cmd = "update test.zip";
324fb299fa2Sopenharmony_ci    commander->DoCommand(cmd, size);
325fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::FAIL, ret);
326fb299fa2Sopenharmony_ci
327fb299fa2Sopenharmony_ci    LoadSpecificFstab("/data/updater/updater/etc/fstab.ut.updater");
328fb299fa2Sopenharmony_ci    cmd = "update test.zip";
329fb299fa2Sopenharmony_ci    commander->DoCommand(cmd, size);
330fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::FAIL, ret);
331fb299fa2Sopenharmony_ci}
332fb299fa2Sopenharmony_ci
333fb299fa2Sopenharmony_ciHWTEST_F(FLashServiceUnitTest, FlashCommanderDoCommand2, TestSize.Level1)
334fb299fa2Sopenharmony_ci{
335fb299fa2Sopenharmony_ci    LoadFstab();
336fb299fa2Sopenharmony_ci    std::unique_ptr<Flashd::Commander> commander = nullptr;
337fb299fa2Sopenharmony_ci    Flashd::UpdaterState ret = UpdaterState::DOING;
338fb299fa2Sopenharmony_ci    auto callbackFail = [&ret](Flashd::CmdType type, Flashd::UpdaterState state, const std::string &msg) {
339fb299fa2Sopenharmony_ci        ret = state;
340fb299fa2Sopenharmony_ci    };
341fb299fa2Sopenharmony_ci    commander = Flashd::CommanderFactory::GetInstance().CreateCommander(Hdc::CMDSTR_FLASH_PARTITION, callbackFail);
342fb299fa2Sopenharmony_ci    EXPECT_NE(nullptr, commander);
343fb299fa2Sopenharmony_ci    std::string cmd = "flash";
344fb299fa2Sopenharmony_ci    size_t size = cmd.size();
345fb299fa2Sopenharmony_ci    commander->DoCommand(cmd, size);
346fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::FAIL, ret);
347fb299fa2Sopenharmony_ci
348fb299fa2Sopenharmony_ci    cmd = "flash test test.img";
349fb299fa2Sopenharmony_ci    size = 20;
350fb299fa2Sopenharmony_ci    commander->DoCommand(cmd, size);
351fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::FAIL, ret);
352fb299fa2Sopenharmony_ci}
353fb299fa2Sopenharmony_ci
354fb299fa2Sopenharmony_ciHWTEST_F(FLashServiceUnitTest, PartitionEraseSuccessTest, TestSize.Level1)
355fb299fa2Sopenharmony_ci{
356fb299fa2Sopenharmony_ci    std::string partitionName = "misc";
357fb299fa2Sopenharmony_ci    Partition partTest(partitionName);
358fb299fa2Sopenharmony_ci    int ret = partTest.DoErase();
359fb299fa2Sopenharmony_ci    EXPECT_EQ(0, ret);
360fb299fa2Sopenharmony_ci
361fb299fa2Sopenharmony_ci    partitionName = "system";
362fb299fa2Sopenharmony_ci    ret = partTest.DoErase();
363fb299fa2Sopenharmony_ci    EXPECT_EQ(0, ret);
364fb299fa2Sopenharmony_ci
365fb299fa2Sopenharmony_ci    partitionName = "sys_prod";
366fb299fa2Sopenharmony_ci    ret = partTest.DoErase();
367fb299fa2Sopenharmony_ci    EXPECT_EQ(0, ret);
368fb299fa2Sopenharmony_ci
369fb299fa2Sopenharmony_ci    partitionName = "vendor";
370fb299fa2Sopenharmony_ci    ret = partTest.DoErase();
371fb299fa2Sopenharmony_ci    EXPECT_EQ(0, ret);
372fb299fa2Sopenharmony_ci
373fb299fa2Sopenharmony_ci    partitionName = "userdata";
374fb299fa2Sopenharmony_ci    ret = partTest.DoErase();
375fb299fa2Sopenharmony_ci    EXPECT_EQ(0, ret);
376fb299fa2Sopenharmony_ci}
377fb299fa2Sopenharmony_ci
378fb299fa2Sopenharmony_ciHWTEST_F(FLashServiceUnitTest, DoEraseCommanderSuccessTest, TestSize.Level1)
379fb299fa2Sopenharmony_ci{
380fb299fa2Sopenharmony_ci    LoadFstab();
381fb299fa2Sopenharmony_ci    std::unique_ptr<Flashd::Commander> commander = nullptr;
382fb299fa2Sopenharmony_ci    Flashd::UpdaterState ret = UpdaterState::DOING;
383fb299fa2Sopenharmony_ci    auto callbackFail = [&ret](Flashd::CmdType type, Flashd::UpdaterState state, const std::string &msg) {
384fb299fa2Sopenharmony_ci        ret = state;
385fb299fa2Sopenharmony_ci    };
386fb299fa2Sopenharmony_ci    commander = Flashd::CommanderFactory::GetInstance().CreateCommander(Hdc::CMDSTR_ERASE_PARTITION, callbackFail);
387fb299fa2Sopenharmony_ci    EXPECT_NE(nullptr, commander);
388fb299fa2Sopenharmony_ci    std::string cmdstr = "erase misc";
389fb299fa2Sopenharmony_ci    uint8_t *payload = reinterpret_cast<uint8_t*>(cmdstr.data());
390fb299fa2Sopenharmony_ci    int payloadSize = cmdstr.size() + 1;
391fb299fa2Sopenharmony_ci    commander->DoCommand(payload, payloadSize);
392fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::SUCCESS, ret);
393fb299fa2Sopenharmony_ci
394fb299fa2Sopenharmony_ci    cmdstr = "erase vendor";
395fb299fa2Sopenharmony_ci    payload = reinterpret_cast<uint8_t*>(cmdstr.data());
396fb299fa2Sopenharmony_ci    payloadSize = cmdstr.size() + 1;
397fb299fa2Sopenharmony_ci    commander->DoCommand(payload, payloadSize);
398fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::SUCCESS, ret);
399fb299fa2Sopenharmony_ci
400fb299fa2Sopenharmony_ci    cmdstr = "erase userdata";
401fb299fa2Sopenharmony_ci    payload = reinterpret_cast<uint8_t*>(cmdstr.data());
402fb299fa2Sopenharmony_ci    payloadSize = cmdstr.size() + 1;
403fb299fa2Sopenharmony_ci    commander->DoCommand(payload, payloadSize);
404fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::SUCCESS, ret);
405fb299fa2Sopenharmony_ci}
406fb299fa2Sopenharmony_ci
407fb299fa2Sopenharmony_ciHWTEST_F(FLashServiceUnitTest, DoFlashSuccessTest, TestSize.Level1)
408fb299fa2Sopenharmony_ci{
409fb299fa2Sopenharmony_ci    LoadFstab();
410fb299fa2Sopenharmony_ci    std::unique_ptr<Flashd::Commander> commander = nullptr;
411fb299fa2Sopenharmony_ci    Flashd::UpdaterState ret = UpdaterState::DOING;
412fb299fa2Sopenharmony_ci    auto callbackFail = [&ret](Flashd::CmdType type, Flashd::UpdaterState state, const std::string &msg) {
413fb299fa2Sopenharmony_ci        ret = state;
414fb299fa2Sopenharmony_ci    };
415fb299fa2Sopenharmony_ci    commander = Flashd::CommanderFactory::GetInstance().CreateCommander(Hdc::CMDSTR_FLASH_PARTITION, callbackFail);
416fb299fa2Sopenharmony_ci    EXPECT_NE(nullptr, commander);
417fb299fa2Sopenharmony_ci    std::string cmdstr = "flash updatertest updater.fd";
418fb299fa2Sopenharmony_ci    uint8_t *payload = reinterpret_cast<uint8_t*>(cmdstr.data());
419fb299fa2Sopenharmony_ci    int payloadSize = cmdstr.size() + 1;
420fb299fa2Sopenharmony_ci    commander->DoCommand(payload, payloadSize);
421fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::SUCCESS, ret);
422fb299fa2Sopenharmony_ci
423fb299fa2Sopenharmony_ci    cmdstr = "flash test test.img";
424fb299fa2Sopenharmony_ci    payload = reinterpret_cast<uint8_t*>(cmdstr.data());
425fb299fa2Sopenharmony_ci    payloadSize = cmdstr.size() + 1;
426fb299fa2Sopenharmony_ci    commander->DoCommand(payload, payloadSize);
427fb299fa2Sopenharmony_ci    EXPECT_EQ(UpdaterState::SUCCESS, ret);
428fb299fa2Sopenharmony_ci}
429fb299fa2Sopenharmony_ci
430fb299fa2Sopenharmony_ciHWTEST_F(FLashServiceUnitTest, CreateCommanderTest, TestSize.Level1)
431fb299fa2Sopenharmony_ci{
432fb299fa2Sopenharmony_ci    std::unique_ptr<Flashd::Commander> commander = nullptr;
433fb299fa2Sopenharmony_ci    Flashd::UpdaterState ret = UpdaterState::DOING;
434fb299fa2Sopenharmony_ci    auto callbackFail = [&ret](Flashd::CmdType type, Flashd::UpdaterState state, const std::string &msg) {
435fb299fa2Sopenharmony_ci        ret = state;
436fb299fa2Sopenharmony_ci    };
437fb299fa2Sopenharmony_ci    std::string cmd = "TEST";
438fb299fa2Sopenharmony_ci    commander = Flashd::CommanderFactory::GetInstance().CreateCommander(cmd, callbackFail);
439fb299fa2Sopenharmony_ci    EXPECT_EQ(nullptr, commander);
440fb299fa2Sopenharmony_ci
441fb299fa2Sopenharmony_ci    cmd = "";
442fb299fa2Sopenharmony_ci    commander = Flashd::CommanderFactory::GetInstance().CreateCommander(cmd, callbackFail);
443fb299fa2Sopenharmony_ci    EXPECT_EQ(nullptr, commander);
444fb299fa2Sopenharmony_ci
445fb299fa2Sopenharmony_ci    cmd = Hdc::CMDSTR_FLASH_PARTITION;
446fb299fa2Sopenharmony_ci    commander = Flashd::CommanderFactory::GetInstance().CreateCommander(cmd, callbackFail);
447fb299fa2Sopenharmony_ci    EXPECT_NE(nullptr, commander);
448fb299fa2Sopenharmony_ci
449fb299fa2Sopenharmony_ci    cmd = Hdc::CMDSTR_FORMAT_PARTITION;
450fb299fa2Sopenharmony_ci    commander = Flashd::CommanderFactory::GetInstance().CreateCommander(cmd, callbackFail);
451fb299fa2Sopenharmony_ci    EXPECT_NE(nullptr, commander);
452fb299fa2Sopenharmony_ci
453fb299fa2Sopenharmony_ci    cmd = Hdc::CMDSTR_ERASE_PARTITION;
454fb299fa2Sopenharmony_ci    commander = Flashd::CommanderFactory::GetInstance().CreateCommander(cmd, callbackFail);
455fb299fa2Sopenharmony_ci    EXPECT_NE(nullptr, commander);
456fb299fa2Sopenharmony_ci}
457fb299fa2Sopenharmony_ci
458fb299fa2Sopenharmony_ciHWTEST_F(FLashServiceUnitTest, GetLockStatusTest, TestSize.Level1)
459fb299fa2Sopenharmony_ci{
460fb299fa2Sopenharmony_ci    bool isLocked = true;
461fb299fa2Sopenharmony_ci    if (auto ret = Updater::UpdateHdiClient::GetInstance().GetLockStatus(isLocked); ret != 0) {
462fb299fa2Sopenharmony_ci        std::cout << "get lock failed";
463fb299fa2Sopenharmony_ci    }
464fb299fa2Sopenharmony_ci    EXPECT_EQ(isLocked, false);
465fb299fa2Sopenharmony_ci}
466fb299fa2Sopenharmony_ci
467fb299fa2Sopenharmony_ciHWTEST_F(FLashServiceUnitTest, CommandDispatchrTest, TestSize.Level1)
468fb299fa2Sopenharmony_ci{
469fb299fa2Sopenharmony_ci    HTaskInfo hTaskInfo = nullptr;
470fb299fa2Sopenharmony_ci    std::shared_ptr<TaskInformation> task = std::make_shared<TaskInformation>();
471fb299fa2Sopenharmony_ci    if (task == nullptr) {
472fb299fa2Sopenharmony_ci        return;
473fb299fa2Sopenharmony_ci    }
474fb299fa2Sopenharmony_ci    hTaskInfo = task.get();
475fb299fa2Sopenharmony_ci    hTaskInfo->channelId = 1;
476fb299fa2Sopenharmony_ci    hTaskInfo->sessionId = 0;
477fb299fa2Sopenharmony_ci    hTaskInfo->runLoop = uv_default_loop();
478fb299fa2Sopenharmony_ci    hTaskInfo->serverOrDaemon = 0;
479fb299fa2Sopenharmony_ci    hTaskInfo->ownerSessionClass = nullptr;
480fb299fa2Sopenharmony_ci    std::string testString = "x";
481fb299fa2Sopenharmony_ci    std::unique_ptr<DaemonUpdater> testDaemonUpdater = std::make_unique<DaemonUpdater>(hTaskInfo);
482fb299fa2Sopenharmony_ci    bool ret = testDaemonUpdater->CommandDispatch(CMD_UPDATER_UPDATE_INIT,
483fb299fa2Sopenharmony_ci        reinterpret_cast<uint8_t *>(const_cast<char*>(testString.c_str())), 1);
484fb299fa2Sopenharmony_ci    EXPECT_EQ(ret, false);
485fb299fa2Sopenharmony_ci    ret = testDaemonUpdater->CommandDispatch(CMD_UPDATER_DATA,
486fb299fa2Sopenharmony_ci        reinterpret_cast<uint8_t *>(const_cast<char*>(testString.c_str())), 1);
487fb299fa2Sopenharmony_ci    EXPECT_EQ(ret, true);
488fb299fa2Sopenharmony_ci    ret = testDaemonUpdater->CommandDispatch(CMD_UPDATER_CHECK,
489fb299fa2Sopenharmony_ci        reinterpret_cast<uint8_t *>(const_cast<char*>(testString.c_str())), 100); // 100 : test number
490fb299fa2Sopenharmony_ci    EXPECT_EQ(ret, true);
491fb299fa2Sopenharmony_ci    ret = testDaemonUpdater->CommandDispatch(CMD_UPDATER_DATA,
492fb299fa2Sopenharmony_ci        reinterpret_cast<uint8_t *>(const_cast<char*>(testString.c_str())), 1);
493fb299fa2Sopenharmony_ci    EXPECT_EQ(ret, true);
494fb299fa2Sopenharmony_ci    ret = testDaemonUpdater->CommandDispatch(CMD_UPDATER_ERASE,
495fb299fa2Sopenharmony_ci        reinterpret_cast<uint8_t *>(const_cast<char*>(testString.c_str())), 1);
496fb299fa2Sopenharmony_ci    EXPECT_EQ(ret, true);
497fb299fa2Sopenharmony_ci    ret = testDaemonUpdater->CommandDispatch(CMD_UPDATER_FORMAT,
498fb299fa2Sopenharmony_ci        reinterpret_cast<uint8_t *>(const_cast<char*>(testString.c_str())), 1);
499fb299fa2Sopenharmony_ci    EXPECT_EQ(ret, true);
500fb299fa2Sopenharmony_ci}
501fb299fa2Sopenharmony_ci} // namespace
502