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" uid_t getuid(void) {
36 extern "C" GDBusConnection* g_bus_get_sync(GBusType type,
37 GCancellable* cancellable, GError** error) {
38 gpointer dummy = g_object_new(G_TYPE_OBJECT, nullptr);
39 return (GDBusConnection*)dummy;
42 extern "C" GDBusProxy* g_dbus_proxy_new_sync(GDBusConnection* connection,
43 GDBusProxyFlags flags, GDBusInterfaceInfo* info, const gchar* name,
44 const gchar* object_path, const gchar* interface_name,
45 GCancellable* cancellable, GError** error) {
46 gpointer dummy = g_object_new(G_TYPE_OBJECT, nullptr);
47 return (GDBusProxy*)dummy;
50 extern "C" GVariant* g_dbus_proxy_call_sync(GDBusProxy* proxy,
51 const gchar* method_name, GVariant* parameters, GDBusCallFlags flags,
52 gint timeout_msec, GCancellable* cancellable, GError** error) {
53 GVariant* gv = g_variant_new("(i)", 0);
55 if (parameters != nullptr) {
56 if (__last_parameters)
57 g_variant_unref(__last_parameters);
58 __last_parameters = g_variant_ref(parameters);
61 if (__last_method_name)
62 g_free(__last_method_name);
64 __last_method_name = g_strdup(method_name);
68 extern "C" const char* tzplatform_getenv(enum tzplatform_variable id) {
70 //return "/home/abuild/rpmbuild/BUILD/app2sd-0.7.17/unit-tests";
71 // getcwd(__cwd, sizeof(__cwd));
73 //return const_cast<char*>(__cwd);
76 extern "C" int pkgmgrinfo_pkginfo_get_usr_pkginfo(const char* pkgid, pkgmgrinfo_pkginfo_h handle) {
80 extern "C" int pkgmgrinfo_pkginfo_get_installed_storage(pkgmgrinfo_pkginfo_h h, pkgmgrinfo_installed_storage* storage) {
84 extern "C" int pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo_h h) {
88 const ::testing::Environment* env = nullptr;
90 class App2extInterfaceTest : public ::testing::Test {
92 void SetUp() override {}
94 void TearDown() override {
95 if (__last_parameters) {
96 g_variant_unref(__last_parameters);
97 __last_parameters = nullptr;
99 if (__last_method_name) {
100 g_free(__last_method_name);
101 __last_method_name = nullptr;
106 TEST_F(App2extInterfaceTest, Init) {
107 app2ext_handle* handle = app2ext_init(APP2EXT_INTERNAL_MEM);
108 EXPECT_THAT(handle, testing::Eq(nullptr));
109 handle = app2ext_init(APP2EXT_SD_CARD);
110 ASSERT_TRUE(handle != nullptr);
111 EXPECT_THAT(handle->type, testing::Eq(APP2EXT_SD_CARD));
112 app2ext_deinit(handle);
115 TEST_F(App2extInterfaceTest, EnableDisableExternalPkgs) {
117 int ret = app2ext_enable_external_pkg(nullptr);
118 EXPECT_THAT(ret, testing::Eq(-1));
119 ret = app2ext_disable_external_pkg(nullptr);
120 EXPECT_THAT(ret, testing::Eq(-1));
123 ret = app2ext_enable_external_pkg("not.exists.package");
124 EXPECT_THAT(ret, testing::Eq(0));
125 EXPECT_THAT(__last_method_name, testing::StrEq("OndemandSetupInit"));
128 g_variant_get(__last_parameters, "(si)", &pkgid, &uid);
129 EXPECT_THAT(pkgid, testing::StrEq("not.exists.package"));
132 ret = app2ext_disable_external_pkg("not.exists.package");
133 EXPECT_THAT(ret, testing::Eq(0));
134 EXPECT_THAT(__last_method_name, testing::StrEq("OndemandSetupExit"));
135 g_variant_get(__last_parameters, "(si)", &pkgid, &uid);
136 EXPECT_THAT(pkgid, testing::StrEq("not.exists.package"));
139 ret = app2ext_enable_all_external_pkgs();
140 EXPECT_THAT(ret, testing::Eq(0));
141 EXPECT_THAT(__last_method_name, testing::StrEq("EnableFullPkg"));
143 ret = app2ext_disable_all_external_pkgs();
144 EXPECT_THAT(ret, testing::Eq(0));
145 EXPECT_THAT(__last_method_name, testing::StrEq("DisableFullPkg"));
148 TEST_F(App2extInterfaceTest, Cleanup) {
150 int ret = app2ext_force_clean_pkg(nullptr);
151 EXPECT_THAT(ret, testing::Eq(-1));
154 ret = app2ext_force_clean_pkg("not.exists.package");
155 EXPECT_THAT(ret, testing::Eq(0));
156 EXPECT_THAT(__last_method_name, testing::StrEq("ForceClean"));
159 g_variant_get(__last_parameters, "(si)", &pkgid, &uid);
160 EXPECT_THAT(pkgid, testing::StrEq("not.exists.package"));
164 TEST_F(App2extInterfaceTest, Migrate) {
165 int ret = app2ext_migrate_legacy_all();
166 EXPECT_THAT(ret, testing::Eq(0));
167 EXPECT_THAT(__last_method_name, testing::StrEq("MigrateLegacyAll"));
170 TEST_F(App2extInterfaceTest, Get) {
172 char* ret = app2ext_usr_getname_image(nullptr, 0);
173 EXPECT_THAT(ret, testing::Eq(nullptr));
174 ret = app2ext_usr_get_image_path(nullptr, 0);
175 EXPECT_THAT(ret, testing::Eq(nullptr));
177 ret = app2ext_usr_getname_image("not.exists.package", 0);
178 EXPECT_TRUE(ret != nullptr);
181 TEST_F(App2extInterfaceTest, Install) {
183 app2ext_handle* handle = app2ext_init(APP2EXT_SD_CARD);
184 int ret = handle->interface.client_pre_install(nullptr, nullptr, 0);
185 EXPECT_THAT(ret, testing::Eq(APP2EXT_ERROR_INVALID_ARGUMENTS));
186 ret = handle->interface.client_post_install(nullptr, APP2EXT_STATUS_FAILED);
187 EXPECT_THAT(ret, testing::Eq(APP2EXT_ERROR_INVALID_ARGUMENTS));
190 GList* dir_list = nullptr;
191 app2ext_dir_details* d1 = new app2ext_dir_details();
192 app2ext_dir_details* d2 = new app2ext_dir_details();
193 app2ext_dir_details* d3 = new app2ext_dir_details();
194 d1->name = g_strdup("d1");
195 d1->type = APP2EXT_DIR_RO;
196 d2->name = g_strdup("d2");
197 d2->type = APP2EXT_DIR_RO;
198 d3->name = g_strdup("d3");
199 d3->type = APP2EXT_DIR_RO;
201 dir_list = g_list_append(dir_list, d1);
202 dir_list = g_list_append(dir_list, d2);
203 dir_list = g_list_append(dir_list, d3);
204 ret = handle->interface.client_pre_install("not.exists.package", dir_list,
206 EXPECT_THAT(ret, testing::Eq(0));
207 EXPECT_THAT(__last_method_name, testing::StrEq("PreAppInstall"));
208 g_list_free(dir_list);
216 ret = handle->interface.client_post_install("not.exists.package",
217 APP2EXT_STATUS_SUCCESS);
218 EXPECT_THAT(ret, testing::Eq(0));
219 EXPECT_THAT(__last_method_name, testing::StrEq("PostAppInstall"));
222 g_variant_get(__last_parameters, "(sii)", &pkgid, &status, nullptr);
223 EXPECT_THAT(pkgid, testing::StrEq("not.exists.package"));
224 EXPECT_THAT(status, testing::Eq(APP2EXT_STATUS_SUCCESS));
226 app2ext_deinit(handle);
229 TEST_F(App2extInterfaceTest, Upgrade) {
231 app2ext_handle* handle = app2ext_init(APP2EXT_SD_CARD);
232 int ret = handle->interface.client_pre_upgrade(nullptr, nullptr, 0);
233 EXPECT_THAT(ret, testing::Eq(APP2EXT_ERROR_INVALID_ARGUMENTS));
234 ret = handle->interface.client_post_upgrade(nullptr, APP2EXT_STATUS_FAILED);
235 EXPECT_THAT(ret, testing::Eq(APP2EXT_ERROR_INVALID_ARGUMENTS));
238 GList* dir_list = nullptr;
239 app2ext_dir_details* d1 = new app2ext_dir_details();
240 app2ext_dir_details* d2 = new app2ext_dir_details();
241 app2ext_dir_details* d3 = new app2ext_dir_details();
242 d1->name = g_strdup("d1");
243 d1->type = APP2EXT_DIR_RO;
244 d2->name = g_strdup("d2");
245 d2->type = APP2EXT_DIR_RO;
246 d3->name = g_strdup("d3");
247 d3->type = APP2EXT_DIR_RO;
249 dir_list = g_list_append(dir_list, d1);
250 dir_list = g_list_append(dir_list, d2);
251 dir_list = g_list_append(dir_list, d3);
252 ret = handle->interface.client_pre_upgrade("not.exists.package", dir_list,
254 EXPECT_THAT(ret, testing::Eq(0));
255 EXPECT_THAT(__last_method_name, testing::StrEq("PreAppUpgrade"));
256 g_list_free(dir_list);
264 ret = handle->interface.client_post_upgrade("not.exists.package",
265 APP2EXT_STATUS_SUCCESS);
266 EXPECT_THAT(ret, testing::Eq(0));
267 EXPECT_THAT(__last_method_name, testing::StrEq("PostAppUpgrade"));
270 g_variant_get(__last_parameters, "(sii)", &pkgid, &status, nullptr);
271 EXPECT_THAT(pkgid, testing::StrEq("not.exists.package"));
272 EXPECT_THAT(status, testing::Eq(APP2EXT_STATUS_SUCCESS));
274 app2ext_deinit(handle);
277 TEST_F(App2extInterfaceTest, Uninstall) {
279 app2ext_handle* handle = app2ext_init(APP2EXT_SD_CARD);
280 int ret = handle->interface.client_pre_uninstall(nullptr);
281 EXPECT_THAT(ret, testing::Eq(APP2EXT_ERROR_INVALID_ARGUMENTS));
282 ret = handle->interface.client_post_uninstall(nullptr);
283 EXPECT_THAT(ret, testing::Eq(APP2EXT_ERROR_INVALID_ARGUMENTS));
286 ret = handle->interface.client_pre_uninstall("not.exists.package");
287 EXPECT_THAT(ret, testing::Eq(0));
288 EXPECT_THAT(__last_method_name, testing::StrEq("PreAppUninstall"));
290 g_variant_get(__last_parameters, "(si)", &pkgid, nullptr);
291 EXPECT_THAT(pkgid, testing::StrEq("not.exists.package"));
294 ret = handle->interface.client_post_uninstall("not.exists.package");
295 EXPECT_THAT(ret, testing::Eq(0));
296 EXPECT_THAT(__last_method_name, testing::StrEq("PostAppUninstall"));
297 g_variant_get(__last_parameters, "(si)", &pkgid, nullptr);
298 EXPECT_THAT(pkgid, testing::StrEq("not.exists.package"));
301 app2ext_deinit(handle);
304 TEST_F(App2extInterfaceTest, Move) {
306 app2ext_handle* handle = app2ext_init(APP2EXT_SD_CARD);
307 int ret = handle->interface.client_pre_move(nullptr, nullptr, APP2EXT_MOVE_TO_EXT);
308 EXPECT_THAT(ret, testing::Eq(APP2EXT_ERROR_INVALID_ARGUMENTS));
309 ret = handle->interface.client_post_move(nullptr, APP2EXT_MOVE_TO_EXT);
310 EXPECT_THAT(ret, testing::Eq(APP2EXT_ERROR_INVALID_ARGUMENTS));
313 GList* dir_list = nullptr;
314 app2ext_dir_details* d1 = new app2ext_dir_details();
315 d1->name = g_strdup("d1");
316 d1->type = APP2EXT_DIR_RO;
318 dir_list = g_list_append(dir_list, d1);
319 ret = handle->interface.client_pre_move("not.exists.package", dir_list, APP2EXT_MOVE_TO_EXT);
320 EXPECT_THAT(ret, testing::Eq(0));
321 EXPECT_THAT(__last_method_name, testing::StrEq("PreMoveInstalledApp"));
322 g_list_free(dir_list);
326 ret = handle->interface.client_post_move("not.exists.package", APP2EXT_MOVE_TO_EXT);
327 EXPECT_THAT(ret, testing::Eq(0));
328 EXPECT_THAT(__last_method_name, testing::StrEq("PostMoveInstalledApp"));
329 app2ext_deinit(handle);
336 extern "C" void* dlopen(const char* path, int flag) {
337 return dlmopen(LM_ID_BASE, "libapp2sd.so", flag);
340 class App2sdEnvironment : public ::testing::Environment {
342 void SetUp() override {
343 dl_handle_ = dlopen("/usr/bin/libapp2sd.so", RTLD_LAZY|RTLD_GLOBAL);
344 if (dl_handle_ == nullptr)
348 void TearDown() override {
355 } // namespace app2sd
357 int main(int argc, char* argv[]) {
359 ::testing::InitGoogleTest(&argc, argv);
360 ::env = testing::AddGlobalTestEnvironment(new app2sd::App2sdEnvironment);
361 return RUN_ALL_TESTS();
363 std::cerr << "Exception occurred" << std::endl;