1 /*
2 * Copyright (c) 2024 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 <cstdint>
17 #include <gtest/gtest.h>
18 #include <string>
19 #include <vector>
20
21 #define private public
22 #define protected public
23 #include "app_fwk_update_client.h"
24 #include "app_fwk_update_service.h"
25 #include "app_fwk_update_load_callback.h"
26 #undef protected
27 #undef private
28 #include "iservice_registry.h"
29 #include "system_ability_definition.h"
30
31 using namespace testing::ext;
32
33 namespace OHOS::NWeb {
34 class AppFwkUpdateClientTest : public testing::Test {
35 public:
AppFwkUpdateClientTest()36 AppFwkUpdateClientTest() {}
~AppFwkUpdateClientTest()37 virtual ~AppFwkUpdateClientTest() {}
38
SetUpTestCase()39 static void SetUpTestCase() {}
TearDownTestCase()40 static void TearDownTestCase() {}
SetUp()41 void SetUp() override {}
42 void TearDown() override;
43 sptr<IRemoteObject> GetAppFwkUpdateRemoteObject(AppFwkUpdateClient &appClient);
44 };
45
TearDown()46 void AppFwkUpdateClientTest::TearDown()
47 {
48 sptr<ISystemAbilityManager> samgr =
49 SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
50 if (samgr != nullptr) {
51 (void)samgr->UnloadSystemAbility(SUBSYS_WEBVIEW_SYS_UPDATE_SERVICE_ID);
52 }
53 }
54
GetAppFwkUpdateRemoteObject(AppFwkUpdateClient & appClient)55 sptr<IRemoteObject> AppFwkUpdateClientTest::GetAppFwkUpdateRemoteObject(AppFwkUpdateClient &appClient)
56 {
57 (void)appClient.GetFwkUpdateProxy();
58 auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
59 if (systemAbilityMgr == nullptr) {
60 return nullptr;
61 }
62 return systemAbilityMgr->CheckSystemAbility(SUBSYS_WEBVIEW_SYS_UPDATE_SERVICE_ID);
63 }
64
65
66 /**
67 * @tc.name: AppFwkUpdateClientTest_001
68 * @tc.desc: invoke app_fwk_update service in client program.
69 * @tc.type: Func
70 * @tc.require:
71 */
72 HWTEST_F(AppFwkUpdateClientTest, AppFwkUpdateClientTest_001, TestSize.Level0)
73 {
74 AppFwkUpdateClient &appFwkUpdateClient = AppFwkUpdateClient::GetInstance();
75 EXPECT_NE(appFwkUpdateClient.appFwkUpdateDiedRecipient_, nullptr);
76 auto &client_1 = AppFwkUpdateClient::GetInstance();
77 auto &client_2 = AppFwkUpdateClient::GetInstance();
78 EXPECT_EQ(&client_1, &client_2);
79 EXPECT_EQ(client_1.appFwkUpdateDiedRecipient_, client_2.appFwkUpdateDiedRecipient_);
80 }
81
82 /**
83 * @tc.name: AppFwkUpdateClientTest_002
84 * @tc.desc: LoadSystemAbility(SUBSYS_WEBVIEW_SYS_UPDATE_SERVICE_ID, loadCallback)
85 * @tc.type: Func
86 * @tc.require:
87 */
88 HWTEST_F(AppFwkUpdateClientTest, AppFwkUpdateClientTest_002, TestSize.Level0)
89 {
90 auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
91 ASSERT_NE(systemAbilityMgr, nullptr);
92
93 sptr<AppFwkUpdateLoadCallback> loadCallback = new (std::nothrow) AppFwkUpdateLoadCallback();
94 EXPECT_NE(loadCallback, nullptr);
95
96 auto ret = systemAbilityMgr->LoadSystemAbility(SUBSYS_WEBVIEW_SYS_UPDATE_SERVICE_ID, loadCallback);
97 EXPECT_EQ(ret, ERR_OK);
98 }
99
100 /**
101 * @tc.name: AppFwkUpdateClientTest_003
102 * @tc.desc: appFwkUpdateClient.LoadFwkService()
103 * @tc.type: Func
104 * @tc.require:
105 */
106 HWTEST_F(AppFwkUpdateClientTest, AppFwkUpdateClientTest_003, TestSize.Level0)
107 {
108 AppFwkUpdateClient& appFwkUpdateClient = AppFwkUpdateClient::GetInstance();
109 appFwkUpdateClient.SetFwkUpdate(nullptr);
110 EXPECT_EQ(appFwkUpdateClient.GetFwkUpdate(), nullptr);
111
112 bool retLoad = appFwkUpdateClient.LoadFwkService();
113 EXPECT_TRUE(retLoad);
114 EXPECT_NE(appFwkUpdateClient.GetFwkUpdate(), nullptr);
115 }
116
117 /**
118 * @tc.name: AppFwkUpdateClientTest_004
119 * @tc.desc: appFwkUpdateClient.VerifyPackageInstall()
120 * @tc.type: Func
121 * @tc.require:
122 */
123 HWTEST_F(AppFwkUpdateClientTest, AppFwkUpdateClientTest_004, TestSize.Level0)
124 {
125 AppFwkUpdateClient &appFwkUpdateClient = AppFwkUpdateClient::GetInstance();
126 int32_t ret = appFwkUpdateClient.VerifyPackageInstall("com.ohos.nweb", "");
127 EXPECT_EQ(ret, -1);
128 }
129 /**
130 * @tc.name: AppFwkUpdateClientTest_005
131 * @tc.desc: appFwkUpdateClient.GetFwkUpdateProxy()
132 * @tc.type: Func
133 * @tc.require:
134 */
135 HWTEST_F(AppFwkUpdateClientTest, AppFwkUpdateClientTest_005, TestSize.Level0)
136 {
137 AppFwkUpdateClient &appFwkUpdateClient = AppFwkUpdateClient::GetInstance();
138 sptr<IRemoteObject> remoteObject = GetAppFwkUpdateRemoteObject(appFwkUpdateClient);
139 EXPECT_NE(appFwkUpdateClient.GetFwkUpdateProxy(), nullptr);
140
141 sptr<IAppFwkUpdateService> fwkUpdateProxy_check = iface_cast<IAppFwkUpdateService>(remoteObject);
142 EXPECT_NE(fwkUpdateProxy_check, nullptr);
143 }
144
145 /**
146 * @tc.name: AppFwkUpdateClientTest_006
147 * @tc.desc: appFwkUpdateClient.loadSaFinished_
148 * @tc.type: Func
149 * @tc.require:
150 */
151 HWTEST_F(AppFwkUpdateClientTest, AppFwkUpdateClientTest_006, TestSize.Level0)
152 {
153 AppFwkUpdateClient &appFwkUpdateClient = AppFwkUpdateClient::GetInstance();
154 auto aotCompilerProxy = appFwkUpdateClient.GetFwkUpdateProxy();
155 EXPECT_TRUE(appFwkUpdateClient.loadSaFinished_);
156 EXPECT_NE(appFwkUpdateClient.GetFwkUpdate(), nullptr);
157 }
158
159 /**
160 * @tc.name: AppFwkUpdateClientTest_007
161 * @tc.desc: appFwkUpdateClient.AppFwkUpdateOnRemoteDied()
162 * @tc.type: Func
163 * @tc.require:
164 */
165 HWTEST_F(AppFwkUpdateClientTest, AppFwkUpdateClientTest_007, TestSize.Level0)
166 {
167 AppFwkUpdateClient &appFwkUpdateClient = AppFwkUpdateClient::GetInstance();
168 sptr<IRemoteObject> remoteObject = GetAppFwkUpdateRemoteObject(appFwkUpdateClient);
169 EXPECT_NE(appFwkUpdateClient.GetFwkUpdate(), nullptr);
170
171 wptr<IRemoteObject> remoteObject_weak = remoteObject;
172 appFwkUpdateClient.AppFwkUpdateOnRemoteDied(remoteObject_weak);
173 EXPECT_EQ(appFwkUpdateClient.GetFwkUpdate(), nullptr);
174 }
175
176 /**
177 * @tc.name: AppFwkUpdateClientTest_008
178 * @tc.desc: callback.OnLoadSystemAbilitySuccess()
179 * @tc.type: Func
180 * @tc.require:
181 */
182 HWTEST_F(AppFwkUpdateClientTest, AppFwkUpdateClientTest_008, TestSize.Level0)
183 {
184 AppFwkUpdateClient &appFwkUpdateClient = AppFwkUpdateClient::GetInstance();
185 AppFwkUpdateLoadCallback callback;
186 sptr<IRemoteObject> remoteObject = GetAppFwkUpdateRemoteObject(appFwkUpdateClient);
187 appFwkUpdateClient.SetFwkUpdate(nullptr);
188
189 callback.OnLoadSystemAbilitySuccess(SUBSYS_WEBVIEW_SYS_UPDATE_SERVICE_ID, nullptr);
190 EXPECT_EQ(appFwkUpdateClient.GetFwkUpdate(), nullptr);
191
192 callback.OnLoadSystemAbilitySuccess(SUBSYS_WEBVIEW_SYS_UPDATE_SERVICE_ID - 1, remoteObject);
193 EXPECT_EQ(appFwkUpdateClient.GetFwkUpdate(), nullptr);
194
195 callback.OnLoadSystemAbilitySuccess(SUBSYS_WEBVIEW_SYS_UPDATE_SERVICE_ID + 1, remoteObject);
196 EXPECT_EQ(appFwkUpdateClient.GetFwkUpdate(), nullptr);
197
198 callback.OnLoadSystemAbilitySuccess(SUBSYS_WEBVIEW_SYS_UPDATE_SERVICE_ID, remoteObject);
199 EXPECT_NE(appFwkUpdateClient.GetFwkUpdate(), nullptr);
200 }
201
202 /**
203 * @tc.name: AppFwkUpdateClientTest_009
204 * @tc.desc: callback.OnLoadSystemAbilityFail()
205 * @tc.type: Func
206 * @tc.require:
207 */
208 HWTEST_F(AppFwkUpdateClientTest, AppFwkUpdateClientTest_009, TestSize.Level0)
209 {
210 AppFwkUpdateClient &appFwkUpdateClient = AppFwkUpdateClient::GetInstance();
211 AppFwkUpdateLoadCallback callback;
212 sptr<IRemoteObject> remoteObject = GetAppFwkUpdateRemoteObject(appFwkUpdateClient);
213 appFwkUpdateClient.SetFwkUpdate(remoteObject);
214
215 callback.OnLoadSystemAbilityFail(SUBSYS_WEBVIEW_SYS_UPDATE_SERVICE_ID - 1);
216 EXPECT_NE(appFwkUpdateClient.GetFwkUpdate(), nullptr);
217
218 callback.OnLoadSystemAbilityFail(SUBSYS_WEBVIEW_SYS_UPDATE_SERVICE_ID + 1);
219 EXPECT_NE(appFwkUpdateClient.GetFwkUpdate(), nullptr);
220
221 callback.OnLoadSystemAbilityFail(SUBSYS_WEBVIEW_SYS_UPDATE_SERVICE_ID);
222 EXPECT_EQ(appFwkUpdateClient.GetFwkUpdate(), nullptr);
223 }
224 } // namespace OHOS::ArkCompiler
225