4 * Copyright (c) 2020 Samsung Electronics Co., Ltd. All rights reserved.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
22 #include <gmock/gmock.h>
23 #include <tzplatform_config.h>
24 #include <pkgmgr-info.h>
25 #include "inc/app2ext_interface.h"
29 static GVariant* __last_parameters;
30 static gchar* __last_method_name;
32 extern "C" GDBusConnection* g_bus_get_sync(GBusType type,
33 GCancellable* cancellable, GError** error) {
34 gpointer dummy = g_object_new(G_TYPE_OBJECT, nullptr);
35 return (GDBusConnection*)dummy;
38 extern "C" GDBusProxy* g_dbus_proxy_new_sync(GDBusConnection* connection,
39 GDBusProxyFlags flags, GDBusInterfaceInfo* info, const gchar* name,
40 const gchar* object_path, const gchar* interface_name,
41 GCancellable* cancellable, GError** error) {
42 gpointer dummy = g_object_new(G_TYPE_OBJECT, nullptr);
43 return (GDBusProxy*)dummy;
46 extern "C" GVariant* g_dbus_proxy_call_sync(GDBusProxy* proxy,
47 const gchar* method_name, GVariant* parameters, GDBusCallFlags flags,
48 gint timeout_msec, GCancellable* cancellable, GError** error) {
49 GVariant* gv = g_variant_new("(i)", 0);
51 if (parameters != nullptr) {
52 if (__last_parameters)
53 g_variant_unref(__last_parameters);
54 __last_parameters = g_variant_ref(parameters);
57 if (__last_method_name)
58 g_free(__last_method_name);
60 __last_method_name = g_strdup(method_name);
64 extern "C" const char* tzplatform_getenv(enum tzplatform_variable id) {
66 //return "/home/abuild/rpmbuild/BUILD/app2sd-0.7.17/unit-tests";
67 // getcwd(__cwd, sizeof(__cwd));
69 //return const_cast<char*>(__cwd);
72 extern "C" int pkgmgrinfo_pkginfo_get_usr_pkginfo(const char* pkgid, pkgmgrinfo_pkginfo_h handle) {
76 extern "C" int pkgmgrinfo_pkginfo_get_installed_storage(pkgmgrinfo_pkginfo_h h, pkgmgrinfo_installed_storage* storage) {
80 extern "C" int pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo_h h) {
84 const ::testing::Environment* env = nullptr;
86 class App2extInterfaceTest : public ::testing::Test {
88 void SetUp() override {}
90 void TearDown() override {
91 if (__last_parameters) {
92 g_variant_unref(__last_parameters);
93 __last_parameters = nullptr;
95 if (__last_method_name) {
96 g_free(__last_method_name);
97 __last_method_name = nullptr;
102 TEST_F(App2extInterfaceTest, Init) {
103 app2ext_handle* handle = app2ext_init(APP2EXT_INTERNAL_MEM);
104 EXPECT_THAT(handle, testing::Eq(nullptr));
105 handle = app2ext_init(APP2EXT_SD_CARD);
106 ASSERT_TRUE(handle != nullptr);
107 EXPECT_THAT(handle->type, testing::Eq(APP2EXT_SD_CARD));
108 app2ext_deinit(handle);
111 TEST_F(App2extInterfaceTest, EnableDisableExternalPkgs) {
113 int ret = app2ext_enable_external_pkg(nullptr);
114 EXPECT_THAT(ret, testing::Eq(-1));
115 ret = app2ext_disable_external_pkg(nullptr);
116 EXPECT_THAT(ret, testing::Eq(-1));
119 ret = app2ext_enable_external_pkg("not.exists.package");
120 EXPECT_THAT(ret, testing::Eq(0));
121 EXPECT_THAT(__last_method_name, testing::StrEq("OndemandSetupInit"));
124 g_variant_get(__last_parameters, "(si)", &pkgid, &uid);
125 EXPECT_THAT(pkgid, testing::StrEq("not.exists.package"));
128 ret = app2ext_disable_external_pkg("not.exists.package");
129 EXPECT_THAT(ret, testing::Eq(0));
130 EXPECT_THAT(__last_method_name, testing::StrEq("OndemandSetupExit"));
131 g_variant_get(__last_parameters, "(si)", &pkgid, &uid);
132 EXPECT_THAT(pkgid, testing::StrEq("not.exists.package"));
135 ret = app2ext_enable_all_external_pkgs();
136 EXPECT_THAT(ret, testing::Eq(0));
137 EXPECT_THAT(__last_method_name, testing::StrEq("EnableFullPkg"));
139 ret = app2ext_disable_all_external_pkgs();
140 EXPECT_THAT(ret, testing::Eq(0));
141 EXPECT_THAT(__last_method_name, testing::StrEq("DisableFullPkg"));
144 TEST_F(App2extInterfaceTest, Cleanup) {
146 int ret = app2ext_force_clean_pkg(nullptr);
147 EXPECT_THAT(ret, testing::Eq(-1));
150 ret = app2ext_force_clean_pkg("not.exists.package");
151 EXPECT_THAT(ret, testing::Eq(0));
152 EXPECT_THAT(__last_method_name, testing::StrEq("ForceClean"));
155 g_variant_get(__last_parameters, "(si)", &pkgid, &uid);
156 EXPECT_THAT(pkgid, testing::StrEq("not.exists.package"));
160 TEST_F(App2extInterfaceTest, Migrate) {
161 int ret = app2ext_migrate_legacy_all();
162 EXPECT_THAT(ret, testing::Eq(0));
163 EXPECT_THAT(__last_method_name, testing::StrEq("MigrateLegacyAll"));
166 TEST_F(App2extInterfaceTest, Get) {
168 char* ret = app2ext_usr_getname_image(nullptr, 0);
169 EXPECT_THAT(ret, testing::Eq(nullptr));
170 ret = app2ext_usr_get_image_path(nullptr, 0);
171 EXPECT_THAT(ret, testing::Eq(nullptr));
173 ret = app2ext_usr_getname_image("not.exists.package", 0);
174 EXPECT_TRUE(ret != nullptr);
177 TEST_F(App2extInterfaceTest, Install) {
179 app2ext_handle* handle = app2ext_init(APP2EXT_SD_CARD);
180 int ret = handle->interface.client_pre_install(nullptr, nullptr, 0);
181 EXPECT_THAT(ret, testing::Eq(APP2EXT_ERROR_INVALID_ARGUMENTS));
182 ret = handle->interface.client_post_install(nullptr, APP2EXT_STATUS_FAILED);
183 EXPECT_THAT(ret, testing::Eq(APP2EXT_ERROR_INVALID_ARGUMENTS));
186 GList* dir_list = nullptr;
187 app2ext_dir_details* d1 = new app2ext_dir_details();
188 app2ext_dir_details* d2 = new app2ext_dir_details();
189 app2ext_dir_details* d3 = new app2ext_dir_details();
190 d1->name = g_strdup("d1");
191 d1->type = APP2EXT_DIR_RO;
192 d2->name = g_strdup("d2");
193 d2->type = APP2EXT_DIR_RO;
194 d3->name = g_strdup("d3");
195 d3->type = APP2EXT_DIR_RO;
197 dir_list = g_list_append(dir_list, d1);
198 dir_list = g_list_append(dir_list, d2);
199 dir_list = g_list_append(dir_list, d3);
200 ret = handle->interface.client_pre_install("not.exists.package", dir_list,
202 EXPECT_THAT(ret, testing::Eq(0));
203 EXPECT_THAT(__last_method_name, testing::StrEq("PreAppInstall"));
204 g_list_free(dir_list);
212 ret = handle->interface.client_post_install("not.exists.package",
213 APP2EXT_STATUS_SUCCESS);
214 EXPECT_THAT(ret, testing::Eq(0));
215 EXPECT_THAT(__last_method_name, testing::StrEq("PostAppInstall"));
218 g_variant_get(__last_parameters, "(sii)", &pkgid, &status, nullptr);
219 EXPECT_THAT(pkgid, testing::StrEq("not.exists.package"));
220 EXPECT_THAT(status, testing::Eq(APP2EXT_STATUS_SUCCESS));
222 app2ext_deinit(handle);
225 TEST_F(App2extInterfaceTest, Upgrade) {
227 app2ext_handle* handle = app2ext_init(APP2EXT_SD_CARD);
228 int ret = handle->interface.client_pre_upgrade(nullptr, nullptr, 0);
229 EXPECT_THAT(ret, testing::Eq(APP2EXT_ERROR_INVALID_ARGUMENTS));
230 ret = handle->interface.client_post_upgrade(nullptr, APP2EXT_STATUS_FAILED);
231 EXPECT_THAT(ret, testing::Eq(APP2EXT_ERROR_INVALID_ARGUMENTS));
234 GList* dir_list = nullptr;
235 app2ext_dir_details* d1 = new app2ext_dir_details();
236 app2ext_dir_details* d2 = new app2ext_dir_details();
237 app2ext_dir_details* d3 = new app2ext_dir_details();
238 d1->name = g_strdup("d1");
239 d1->type = APP2EXT_DIR_RO;
240 d2->name = g_strdup("d2");
241 d2->type = APP2EXT_DIR_RO;
242 d3->name = g_strdup("d3");
243 d3->type = APP2EXT_DIR_RO;
245 dir_list = g_list_append(dir_list, d1);
246 dir_list = g_list_append(dir_list, d2);
247 dir_list = g_list_append(dir_list, d3);
248 ret = handle->interface.client_pre_upgrade("not.exists.package", dir_list,
250 EXPECT_THAT(ret, testing::Eq(0));
251 EXPECT_THAT(__last_method_name, testing::StrEq("PreAppUpgrade"));
252 g_list_free(dir_list);
260 ret = handle->interface.client_post_upgrade("not.exists.package",
261 APP2EXT_STATUS_SUCCESS);
262 EXPECT_THAT(ret, testing::Eq(0));
263 EXPECT_THAT(__last_method_name, testing::StrEq("PostAppUpgrade"));
266 g_variant_get(__last_parameters, "(sii)", &pkgid, &status, nullptr);
267 EXPECT_THAT(pkgid, testing::StrEq("not.exists.package"));
268 EXPECT_THAT(status, testing::Eq(APP2EXT_STATUS_SUCCESS));
270 app2ext_deinit(handle);
273 TEST_F(App2extInterfaceTest, Uninstall) {
275 app2ext_handle* handle = app2ext_init(APP2EXT_SD_CARD);
276 int ret = handle->interface.client_pre_uninstall(nullptr);
277 EXPECT_THAT(ret, testing::Eq(APP2EXT_ERROR_INVALID_ARGUMENTS));
278 ret = handle->interface.client_post_uninstall(nullptr);
279 EXPECT_THAT(ret, testing::Eq(APP2EXT_ERROR_INVALID_ARGUMENTS));
282 ret = handle->interface.client_pre_uninstall("not.exists.package");
283 EXPECT_THAT(ret, testing::Eq(0));
284 EXPECT_THAT(__last_method_name, testing::StrEq("PreAppUninstall"));
286 g_variant_get(__last_parameters, "(si)", &pkgid, nullptr);
287 EXPECT_THAT(pkgid, testing::StrEq("not.exists.package"));
290 ret = handle->interface.client_post_uninstall("not.exists.package");
291 EXPECT_THAT(ret, testing::Eq(0));
292 EXPECT_THAT(__last_method_name, testing::StrEq("PostAppUninstall"));
293 g_variant_get(__last_parameters, "(si)", &pkgid, nullptr);
294 EXPECT_THAT(pkgid, testing::StrEq("not.exists.package"));
297 app2ext_deinit(handle);
300 TEST_F(App2extInterfaceTest, Move) {
302 app2ext_handle* handle = app2ext_init(APP2EXT_SD_CARD);
303 int ret = handle->interface.client_pre_move(nullptr, nullptr, APP2EXT_MOVE_TO_EXT);
304 EXPECT_THAT(ret, testing::Eq(APP2EXT_ERROR_INVALID_ARGUMENTS));
305 ret = handle->interface.client_post_move(nullptr, APP2EXT_MOVE_TO_EXT);
306 EXPECT_THAT(ret, testing::Eq(APP2EXT_ERROR_INVALID_ARGUMENTS));
309 GList* dir_list = nullptr;
310 app2ext_dir_details* d1 = new app2ext_dir_details();
311 d1->name = g_strdup("d1");
312 d1->type = APP2EXT_DIR_RO;
314 dir_list = g_list_append(dir_list, d1);
315 ret = handle->interface.client_pre_move("not.exists.package", dir_list, APP2EXT_MOVE_TO_EXT);
316 EXPECT_THAT(ret, testing::Eq(0));
317 EXPECT_THAT(__last_method_name, testing::StrEq("PreMoveInstalledApp"));
318 g_list_free(dir_list);
322 ret = handle->interface.client_post_move("not.exists.package", APP2EXT_MOVE_TO_EXT);
323 EXPECT_THAT(ret, testing::Eq(0));
324 EXPECT_THAT(__last_method_name, testing::StrEq("PostMoveInstalledApp"));
325 app2ext_deinit(handle);
332 extern "C" void* dlopen(const char* path, int flag) {
333 return dlmopen(LM_ID_BASE, "libapp2sd.so", flag);
336 class App2sdEnvironment : public ::testing::Environment {
338 void SetUp() override {
339 dl_handle_ = dlopen("/usr/bin/libapp2sd.so", RTLD_LAZY|RTLD_GLOBAL);
340 if (dl_handle_ == nullptr)
344 void TearDown() override {
351 } // namespace app2sd
353 int main(int argc, char* argv[]) {
355 ::testing::InitGoogleTest(&argc, argv);
356 ::env = testing::AddGlobalTestEnvironment(new app2sd::App2sdEnvironment);
357 return RUN_ALL_TESTS();
359 std::cerr << "Exception occurred" << std::endl;