1/*
2 * Copyright (c) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#include "update_partitions_unittest.h"
17#include <cerrno>
18#include <cstdio>
19#include <iostream>
20#include <string>
21#include <unistd.h>
22#include <vector>
23#include "log.h"
24#include "package/pkg_manager.h"
25#include "script_instruction.h"
26#include "script_manager.h"
27#include "script_utils.h"
28#include "unittest_comm.h"
29#include "update_processor.h"
30#include "utils.h"
31
32using namespace Updater;
33using namespace testing::ext;
34using namespace Uscript;
35using namespace std;
36using namespace Hpackage;
37
38namespace UpdaterUt {
39void UpdatePartitionsUnitTest::SetUp(void)
40{
41    cout << "Updater Unit UpdatePartitionsUnitTest Begin!" << endl;
42}
43
44void UpdatePartitionsUnitTest::TearDown(void)
45{
46    cout << "Updater Unit UpdatePartitionsUnitTest End!" << endl;
47}
48
49// do something at the each function begining
50void UpdatePartitionsUnitTest::SetUpTestCase(void) {}
51
52// do something at the each function end
53void UpdatePartitionsUnitTest::TearDownTestCase(void) {}
54
55HWTEST_F(UpdatePartitionsUnitTest, UpdatePartitions_Unitest01, TestSize.Level1)
56{
57    const string packagePath = "/data/updater/updater/parts/updaterpart01.zip";
58    PkgManager::PkgManagerPtr pkgManager = PkgManager::CreatePackageInstance();
59    std::vector<std::string> components;
60    int partRet = -1;
61    int ret = pkgManager->LoadPackage(packagePath, GetTestCertName(), components);
62    cout << "load package's ret:" << ret << endl;
63    UpdaterEnv* env = new UpdaterEnv(pkgManager, nullptr, false);
64    Hpackage::HashDataVerifier scriptVerifier {pkgManager};
65    ScriptManager* scriptManager = ScriptManager::GetScriptManager(env, &scriptVerifier);
66    for (int32_t i = 0; i < ScriptManager::MAX_PRIORITY; i++) {
67        ret = scriptManager->ExecuteScript(i);
68        cout << " execute ret:" << ret << endl;
69        if (i == 1) { // only run update_partitions script
70            partRet = ret;
71        }
72    }
73    delete env;
74    ScriptManager::ReleaseScriptManager();
75    PkgManager::ReleasePackageInstance(pkgManager);
76    EXPECT_EQ(partRet, USCRIPT_SUCCESS);
77}
78
79HWTEST_F(UpdatePartitionsUnitTest, UpdatePartitions_Unitest02, TestSize.Level1)
80{
81    const string packagePath = "/data/updater/updater/parts/updaterpart02.zip";
82    PkgManager::PkgManagerPtr pkgManager = PkgManager::CreatePackageInstance();
83    std::vector<std::string> components;
84    int partRet = -1;
85    int ret = pkgManager->LoadPackage(packagePath, GetTestCertName(), components);
86    cout << "load package's ret:" << ret << endl;
87    UpdaterEnv* env = new UpdaterEnv(pkgManager, nullptr, false);
88    Hpackage::HashDataVerifier scriptVerifier {pkgManager};
89    ScriptManager* scriptManager = ScriptManager::GetScriptManager(env, &scriptVerifier);
90    for (int32_t i = 0; i < ScriptManager::MAX_PRIORITY; i++) {
91        ret = scriptManager->ExecuteScript(i);
92        cout << " execute ret:" << ret << endl;
93        if (i == 1) { // only run update_partitions script
94            partRet = ret;
95        }
96    }
97    delete env;
98    ScriptManager::ReleaseScriptManager();
99    PkgManager::ReleasePackageInstance(pkgManager);
100    EXPECT_EQ(partRet, USCRIPT_SUCCESS);
101}
102} // namespace updater_ut
103