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 }
77
78 /**
79 * @tc.name: AppFwkUpdateClientTest_002
80 * @tc.desc: LoadSystemAbility(SUBSYS_WEBVIEW_SYS_UPDATE_SERVICE_ID, loadCallback)
81 * @tc.type: Func
82 * @tc.require:
83 */
84 HWTEST_F(AppFwkUpdateClientTest, AppFwkUpdateClientTest_002, TestSize.Level0)
85 {
86 auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
87 ASSERT_NE(systemAbilityMgr, nullptr);
88
89 sptr<AppFwkUpdateLoadCallback> loadCallback = new (std::nothrow) AppFwkUpdateLoadCallback();
90 EXPECT_NE(loadCallback, nullptr);
91
92 auto ret = systemAbilityMgr->LoadSystemAbility(SUBSYS_WEBVIEW_SYS_UPDATE_SERVICE_ID, loadCallback);
93 EXPECT_EQ(ret, ERR_OK);
94 }
95
96 /**
97 * @tc.name: AppFwkUpdateClientTest_003
98 * @tc.desc: appFwkUpdateClient.LoadFwkService()
99 * @tc.type: Func
100 * @tc.require:
101 */
102 HWTEST_F(AppFwkUpdateClientTest, AppFwkUpdateClientTest_003, TestSize.Level0)
103 {
104 AppFwkUpdateClient& appFwkUpdateClient = AppFwkUpdateClient::GetInstance();
105 appFwkUpdateClient.SetFwkUpdate(nullptr);
106 EXPECT_EQ(appFwkUpdateClient.GetFwkUpdate(), nullptr);
107
108 bool retLoad = appFwkUpdateClient.LoadFwkService();
109 EXPECT_TRUE(retLoad);
110 EXPECT_NE(appFwkUpdateClient.GetFwkUpdate(), nullptr);
111 }
112
113 /**
114 * @tc.name: AppFwkUpdateClientTest_004
115 * @tc.desc: appFwkUpdateClient.VerifyPackageInstall()
116 * @tc.type: Func
117 * @tc.require:
118 */
119 HWTEST_F(AppFwkUpdateClientTest, AppFwkUpdateClientTest_004, TestSize.Level0)
120 {
121 AppFwkUpdateClient &appFwkUpdateClient = AppFwkUpdateClient::GetInstance();
122 int32_t ret = appFwkUpdateClient.VerifyPackageInstall("com.ohos.nweb", "");
123 EXPECT_EQ(ret, -1);
124 }
125 /**
126 * @tc.name: AppFwkUpdateClientTest_005
127 * @tc.desc: appFwkUpdateClient.GetFwkUpdateProxy()
128 * @tc.type: Func
129 * @tc.require:
130 */
131 HWTEST_F(AppFwkUpdateClientTest, AppFwkUpdateClientTest_005, TestSize.Level0)
132 {
133 AppFwkUpdateClient &appFwkUpdateClient = AppFwkUpdateClient::GetInstance();
134 sptr<IRemoteObject> remoteObject = GetAppFwkUpdateRemoteObject(appFwkUpdateClient);
135 EXPECT_NE(appFwkUpdateClient.GetFwkUpdateProxy(), nullptr);
136
137 sptr<IAppFwkUpdateService> fwkUpdateProxy_check = iface_cast<IAppFwkUpdateService>(remoteObject);
138 EXPECT_NE(fwkUpdateProxy_check, nullptr);
139 }
140
141 /**
142 * @tc.name: AppFwkUpdateClientTest_006
143 * @tc.desc: appFwkUpdateClient.loadSaFinished_
144 * @tc.type: Func
145 * @tc.require:
146 */
147 HWTEST_F(AppFwkUpdateClientTest, AppFwkUpdateClientTest_006, TestSize.Level0)
148 {
149 AppFwkUpdateClient &appFwkUpdateClient = AppFwkUpdateClient::GetInstance();
150 auto aotCompilerProxy = appFwkUpdateClient.GetFwkUpdateProxy();
151 EXPECT_TRUE(appFwkUpdateClient.loadSaFinished_);
152 EXPECT_NE(appFwkUpdateClient.GetFwkUpdate(), nullptr);
153 }
154
155 /**
156 * @tc.name: AppFwkUpdateClientTest_007
157 * @tc.desc: appFwkUpdateClient.AppFwkUpdateOnRemoteDied()
158 * @tc.type: Func
159 * @tc.require:
160 */
161 HWTEST_F(AppFwkUpdateClientTest, AppFwkUpdateClientTest_007, TestSize.Level0)
162 {
163 AppFwkUpdateClient &appFwkUpdateClient = AppFwkUpdateClient::GetInstance();
164 sptr<IRemoteObject> remoteObject = GetAppFwkUpdateRemoteObject(appFwkUpdateClient);
165 EXPECT_NE(appFwkUpdateClient.GetFwkUpdate(), nullptr);
166
167 wptr<IRemoteObject> remoteObject_weak = remoteObject;
168 appFwkUpdateClient.AppFwkUpdateOnRemoteDied(remoteObject_weak);
169 EXPECT_EQ(appFwkUpdateClient.GetFwkUpdate(), nullptr);
170 }
171
172 /**
173 * @tc.name: AppFwkUpdateClientTest_008
174 * @tc.desc: callback.OnLoadSystemAbilitySuccess()
175 * @tc.type: Func
176 * @tc.require:
177 */
178 HWTEST_F(AppFwkUpdateClientTest, AppFwkUpdateClientTest_008, TestSize.Level0)
179 {
180 AppFwkUpdateClient &appFwkUpdateClient = AppFwkUpdateClient::GetInstance();
181 AppFwkUpdateLoadCallback callback;
182 sptr<IRemoteObject> remoteObject = GetAppFwkUpdateRemoteObject(appFwkUpdateClient);
183 appFwkUpdateClient.SetFwkUpdate(nullptr);
184
185 callback.OnLoadSystemAbilitySuccess(SUBSYS_WEBVIEW_SYS_UPDATE_SERVICE_ID, nullptr);
186 EXPECT_EQ(appFwkUpdateClient.GetFwkUpdate(), nullptr);
187
188 callback.OnLoadSystemAbilitySuccess(SUBSYS_WEBVIEW_SYS_UPDATE_SERVICE_ID - 1, remoteObject);
189 EXPECT_EQ(appFwkUpdateClient.GetFwkUpdate(), nullptr);
190
191 callback.OnLoadSystemAbilitySuccess(SUBSYS_WEBVIEW_SYS_UPDATE_SERVICE_ID + 1, remoteObject);
192 EXPECT_EQ(appFwkUpdateClient.GetFwkUpdate(), nullptr);
193
194 callback.OnLoadSystemAbilitySuccess(SUBSYS_WEBVIEW_SYS_UPDATE_SERVICE_ID, remoteObject);
195 EXPECT_NE(appFwkUpdateClient.GetFwkUpdate(), nullptr);
196 }
197
198 /**
199 * @tc.name: AppFwkUpdateClientTest_009
200 * @tc.desc: callback.OnLoadSystemAbilityFail()
201 * @tc.type: Func
202 * @tc.require:
203 */
204 HWTEST_F(AppFwkUpdateClientTest, AppFwkUpdateClientTest_009, TestSize.Level0)
205 {
206 AppFwkUpdateClient &appFwkUpdateClient = AppFwkUpdateClient::GetInstance();
207 AppFwkUpdateLoadCallback callback;
208 sptr<IRemoteObject> remoteObject = GetAppFwkUpdateRemoteObject(appFwkUpdateClient);
209 appFwkUpdateClient.SetFwkUpdate(remoteObject);
210
211 callback.OnLoadSystemAbilityFail(SUBSYS_WEBVIEW_SYS_UPDATE_SERVICE_ID - 1);
212 EXPECT_NE(appFwkUpdateClient.GetFwkUpdate(), nullptr);
213
214 callback.OnLoadSystemAbilityFail(SUBSYS_WEBVIEW_SYS_UPDATE_SERVICE_ID + 1);
215 EXPECT_NE(appFwkUpdateClient.GetFwkUpdate(), nullptr);
216
217 callback.OnLoadSystemAbilityFail(SUBSYS_WEBVIEW_SYS_UPDATE_SERVICE_ID);
218 EXPECT_EQ(appFwkUpdateClient.GetFwkUpdate(), nullptr);
219 }
220 } // namespace OHOS::NWeb
221