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