1 /*
2 * Copyright (c) 2022 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 "sys_installer_ipc_test.h"
17
18 #include <fstream>
19 #include "gtest/gtest.h"
20 #include "if_system_ability_manager.h"
21 #include "iservice_registry.h"
22 #include "isys_installer.h"
23 #include "isys_installer_callback.h"
24 #include "system_ability_definition.h"
25 #include "sys_installer_kits_impl.h"
26 #include "sys_installer_proxy.h"
27 #include "sys_installer_load_callback.h"
28
29 using namespace testing::ext;
30 using namespace std;
31
32 namespace OHOS {
33 namespace SysInstaller {
SetUpTestCase()34 void SysInstallerIpcUnitTest::SetUpTestCase()
35 {
36 cout << "SysInstallerIpcUnitTest SetUpTestCase" << std::endl;
37 }
38
TearDownTestCase()39 void SysInstallerIpcUnitTest::TearDownTestCase()
40 {
41 cout << "SysInstallerIpcUnitTest TearDownTestCase" << std::endl;
42 }
43
SetUp()44 void SysInstallerIpcUnitTest::SetUp()
45 {
46 cout << "SysInstallerIpcUnitTest SetUp" << std::endl;
47 }
48
TearDown()49 void SysInstallerIpcUnitTest::TearDown()
50 {
51 cout << "SysInstallerIpcUnitTest TearDown" << std::endl;
52 }
53
54 // init
55 HWTEST_F(SysInstallerIpcUnitTest, SysInstallerInit001, TestSize.Level1)
56 {
57 cout << " SysInstallerInit001 start " << std::endl;
58
59 auto ret = SysInstallerKitsImpl::GetInstance().SysInstallerInit();
60 ASSERT_EQ(ret, 0);
61 }
62
63 class ProcessCallbackTest : public ISysInstallerCallbackFunc {
64 public:
65 ProcessCallbackTest() = default;
66 ~ProcessCallbackTest() = default;
OnUpgradeProgress(UpdateStatus updateStatus,int percent,const std::string & resultMsg)67 void OnUpgradeProgress(UpdateStatus updateStatus, int percent, const std::string &resultMsg) override
68 {
69 printf("ProgressCallback progress %d percent %d msg %s\n", updateStatus, percent, resultMsg.c_str());
70 }
71 };
72
73 // callback
74 HWTEST_F(SysInstallerIpcUnitTest, SetCallBackTest001, TestSize.Level1)
75 {
76 cout << " SetCallBackTest001 start " << std::endl;
77 sptr<ISysInstallerCallbackFunc> callback = new ProcessCallbackTest;
78 auto ret = SysInstallerKitsImpl::GetInstance().SetUpdateCallback(callback);
79 ASSERT_EQ(ret, 0);
80 }
81
82 // get status
83 HWTEST_F(SysInstallerIpcUnitTest, GetStatusTest001, TestSize.Level1)
84 {
85 cout << " GetStatusTest001 start " << std::endl;
86 auto ret = SysInstallerKitsImpl::GetInstance().GetUpdateStatus();
87 ASSERT_EQ(ret, 0);
88 }
89
90 // update package
91 HWTEST_F(SysInstallerIpcUnitTest, UpdatePackageTest001, TestSize.Level1)
92 {
93 cout << " UpdatePackageTest001 start " << std::endl;
94 auto ret = SysInstallerKitsImpl::GetInstance().StartUpdatePackageZip(
95 "/data/ota_package/update.zip");
96 cout << " UpdatePackageTest001 ret " << ret << std::endl;
97 ASSERT_EQ(ret, 0);
98 }
99
100 // accessory update package
101 HWTEST_F(SysInstallerIpcUnitTest, AccUpdatePkgTest001, TestSize.Level1)
102 {
103 cout << "AccUpdatePkgTest001 start " << std::endl;
104 auto ret = SysInstallerKitsImpl::GetInstance().AccDecompressAndVerifyPkg(
105 "invalid path", "", 1);
106 ASSERT_NE(ret, 0);
107 ret = SysInstallerKitsImpl::GetInstance().AccDecompressAndVerifyPkg(
108 "", "/data/test/", 1);
109 ASSERT_NE(ret, 0);
110 ret = SysInstallerKitsImpl::GetInstance().AccDecompressAndVerifyPkg(
111 "invalid path", "/data/test/", 1);
112 ASSERT_NE(ret, 0);
113 ret = SysInstallerKitsImpl::GetInstance().AccDecompressAndVerifyPkg(
114 "/data/ota_package/update.zip", "invalid path", 1);
115 ASSERT_NE(ret, 0);
116
117 ret = SysInstallerKitsImpl::GetInstance().AccDecompressAndVerifyPkg(
118 "/data/ota_package/update.zip", "/data/test/", 1);
119 ASSERT_NE(ret, 0);
120
121 std::string path = "/data/updater/rmDir";
122 ret = mkdir(path.c_str(), S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
123 if (ret == 0) {
124 ofstream tmpFile;
125 string filePath = path + "/tmpFile";
126 tmpFile.open(filePath.c_str());
127 if (tmpFile.is_open()) {
128 tmpFile.close();
129 ret = SysInstallerKitsImpl::GetInstance().AccDeleteDir(path);
130 }
131 }
132
133 ret = SysInstallerKitsImpl::GetInstance().AccDeleteDir("");
134 ASSERT_NE(ret, 0);
135 }
136
137 // StartUpdateParaZip test
138 HWTEST_F(SysInstallerIpcUnitTest, StartUpdateParaZipTest, TestSize.Level1)
139 {
140 cout << " StartUpdateParaZip start " << std::endl;
141 SysInstallerLoadCallback sysInstallerLoadCallback {};
142 sysInstallerLoadCallback.OnLoadSystemAbilityFail(0);
143 sysInstallerLoadCallback.OnLoadSystemAbilityFail(4101); // 4041 : SYS_INSTALLER_DISTRIBUTED_SERVICE_ID
144 sptr<IRemoteObject> callback {};
145 SysInstallerProxy env(callback);
146 auto ret = env.StartUpdateParaZip("", "", "");
147 ASSERT_EQ(ret, 3); // 3 : ERR_FLATTEN_OBJECT
148 }
149
150 // StartDeleteParaZip test
151 HWTEST_F(SysInstallerIpcUnitTest, StartDeleteParaZipTest, TestSize.Level1)
152 {
153 cout << " StartDeleteParaZip start " << std::endl;
154 sptr<IRemoteObject> callback {};
155 SysInstallerProxy env(callback);
156 auto ret = env.StartDeleteParaZip("", "");
157 ASSERT_EQ(ret, 3); // 3 : ERR_FLATTEN_OBJECT
158 }
159
160 // AccDecompressAndVerifyPkg test
161 HWTEST_F(SysInstallerIpcUnitTest, AccDecompressAndVerifyPkgTest, TestSize.Level1)
162 {
163 cout << " AccDecompressAndVerifyPkgTest start " << std::endl;
164 sptr<IRemoteObject> callback {};
165 SysInstallerProxy env(callback);
166 auto ret = env.AccDecompressAndVerifyPkg("", "", 0);
167 ASSERT_EQ(ret, 3); // 3 : ERR_FLATTEN_OBJECT
168 }
169
170 // AccDeleteDir test
171 HWTEST_F(SysInstallerIpcUnitTest, AccDeleteDirTest, TestSize.Level1)
172 {
173 cout << " AccDeleteDirTest start " << std::endl;
174 sptr<IRemoteObject> callback {};
175 SysInstallerProxy env(callback);
176 auto ret = env.AccDeleteDir("");
177 ASSERT_EQ(ret, 3); // 3 : ERR_FLATTEN_OBJECT
178 }
179
180 // SysInstallerKitsImpl test
181 HWTEST_F(SysInstallerIpcUnitTest, SysInstallerKitsImplTest, TestSize.Level1)
182 {
183 cout << " SysInstallerKitsImplTest start " << std::endl;
184 wptr<IRemoteObject> remote;
185 SysInstallerKitsImpl::GetInstance().ResetService(remote);
186 auto ret = SysInstallerKitsImpl::GetInstance().StartUpdateParaZip("", "", "");
187 ASSERT_EQ(ret, -1);
188 ret = SysInstallerKitsImpl::GetInstance().StartDeleteParaZip("", "");
189 ASSERT_EQ(ret, -1);
190 ret = SysInstallerKitsImpl::GetInstance().AccDecompressAndVerifyPkg("", "", 0);
191 ASSERT_EQ(ret, -1);
192 ret = SysInstallerKitsImpl::GetInstance().AccDeleteDir("");
193 ASSERT_EQ(ret, -1);
194 }
195 } // SysInstaller
196 } // OHOS
197