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