From: Youngjae Shin Date: Fri, 14 Feb 2020 00:46:46 +0000 (+0900) Subject: add essential action test X-Git-Tag: submit/tizen/20200406.072014~13 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=402c0961225e748f3e22f467d43bccfa3cbd51bc;p=platform%2Fcore%2Fsystem%2Fmodes-plugins.git add essential action test --- diff --git a/app/AppActionLaunch.cpp b/app/AppActionLaunch.cpp index e3f0848..14822bf 100644 --- a/app/AppActionLaunch.cpp +++ b/app/AppActionLaunch.cpp @@ -16,6 +16,7 @@ #include "AppActionLaunch.h" #include +#include #include #include #include @@ -25,81 +26,35 @@ MODES_NAMESPACE_USE; const std::string AppActionLaunch::NAME = "launch"; -std::list AppActionLaunch::appidList; AppActionLaunch::AppActionLaunch() - : AppAction(NAME) + : AppAction(NAME), cb(nullptr), cbData(nullptr) { -} - -void AppActionLaunch::appContextStatusCallback(app_context_h app_context, app_context_status_e status, void *user_data) -{ - DBG("appContextStatusCallback(status:%d)", status); - if (APP_CONTEXT_STATUS_TERMINATED != status) - return; - - char *appid = NULL; - int ret = app_context_get_app_id(app_context, &appid); - if (APP_MANAGER_ERROR_NONE != ret) { - ERR("app_context_get_app_id() Fail(%d)", ret); - return; - } - - appidList.remove(appid); - - free(appid); - return; + aul_launch_init(NULL, NULL); } int AppActionLaunch::set(const std::string &val) { - DBG("id(%s)", val.c_str()); - - auto found = std::find(appidList.begin(), appidList.end(), val); - - if (found == appidList.end()) - { - bool running; - app_manager_is_running(val.c_str(), &running); - - if (running) { - ERR("It's already running before started mode-supervisor daemon"); - return MODES_ERROR_CONFLICT; - } - - app_control_h service; - app_control_create(&service); - app_control_set_app_id(service, val.c_str()); - app_control_set_operation(service, APP_CONTROL_OPERATION_DEFAULT); - app_control_set_launch_mode(service, APP_CONTROL_LAUNCH_MODE_SINGLE); - - int ret = app_control_send_launch_request(service, NULL, NULL); - if (APP_CONTROL_ERROR_NONE != ret) { - ERR("app_control_send_launch_request() Fail(%s)", get_error_message(ret)); - return MODES_ERROR_SYSTEM; - } - app_control_destroy(service); - - appidList.push_back(val); - - DBG("APP_CONTEXT_EVENT_LAUNCHED(appid : %s) added list\n", val.c_str()); - - int err = app_manager_set_app_context_status_cb(AppActionLaunch::appContextStatusCallback, val.c_str(), NULL); - if (APP_MANAGER_ERROR_NONE != err) { - ERR("app_manager_set_app_context_status_cb() Fail(%s)", get_error_message(err)); - return MODES_ERROR_SYSTEM; - } - - appID = val; + bool running; + app_manager_is_running(val.c_str(), &running); + if (running) + INFO("It's already running before started mode-supervisor daemon"); + + app_control_h service; + app_control_create(&service); + app_control_set_app_id(service, val.c_str()); + app_control_set_operation(service, APP_CONTROL_OPERATION_DEFAULT); + app_control_set_launch_mode(service, APP_CONTROL_LAUNCH_MODE_SINGLE); + + int ret = app_control_send_launch_request(service, nullptr, nullptr); + if (APP_CONTROL_ERROR_NONE != ret) { + ERR("app_control_send_launch_request() Fail(%s)", get_error_message(ret)); + return MODES_ERROR_SYSTEM; } + app_control_destroy(service); - return MODES_ERROR_NONE; -} + appID = val; -int AppActionLaunch::get(std::string *val) -{ - if(val) - *val = appID; return MODES_ERROR_NONE; } @@ -114,13 +69,7 @@ void AppActionLaunch::undo() return; } - int ret = app_manager_unset_app_context_status_cb(appContextStatusCallback, appID.c_str()); - if (APP_MANAGER_ERROR_NONE != ret) - ERR("app_manager_unset_app_context_status_cb() Fail(%s)", get_error_message(ret)); - - appidList.remove(appID); - - ret = app_manager_get_app_context(appID.c_str(), &runAppContext); + int ret = app_manager_get_app_context(appID.c_str(), &runAppContext); if (APP_MANAGER_ERROR_NONE != ret) { ERR("app_manager_get_app_context(%s) Fail(%s)", appID.c_str(), get_error_message(ret)); return; @@ -140,3 +89,49 @@ int AppActionLaunch::parse(const std::string &archive) appID = archive; return MODES_ERROR_NONE; } + +int AppActionLaunch::setChangedCallback(valueChangedCB callback, void *userData) +{ + RETV_IF(nullptr == callback, MODES_ERROR_INVALID_PARAMETER); + + int err = app_manager_set_app_context_status_cb(appContextStatusCB, appID.c_str(), this); + if (APP_MANAGER_ERROR_NONE != err) { + ERR("app_manager_set_app_context_status_cb() Fail(%s)", get_error_message(err)); + return MODES_ERROR_SYSTEM; + } + + cb = callback; + cbData = userData; + + return MODES_ERROR_NONE; +} + +void AppActionLaunch::unSetChangedCallback(valueChangedCB callback, void *userData) +{ + int ret = app_manager_unset_app_context_status_cb(appContextStatusCB, appID.c_str()); + if (APP_MANAGER_ERROR_NONE != ret) + ERR("app_manager_unset_app_context_status_cb() Fail(%s)", get_error_message(ret)); + + cb = nullptr; + cbData = nullptr; +} + +void AppActionLaunch::appContextStatusCB(app_context_h app_context, app_context_status_e status, void *userData) +{ + RET_IF(nullptr == userData); + RET_IF(APP_CONTEXT_STATUS_TERMINATED != status); + + char *appid = nullptr; + int ret = app_context_get_app_id(app_context, &appid); + if (APP_MANAGER_ERROR_NONE != ret) { + ERR("app_context_get_app_id() Fail(%d)", ret); + return; + } + + AppActionLaunch *action = (AppActionLaunch*)userData; + if (appid == action->appID && action->cb) + action->cb(action->cbData); + + free(appid); + return; +} diff --git a/app/AppActionLaunch.h b/app/AppActionLaunch.h index 752be40..ae70d2a 100644 --- a/app/AppActionLaunch.h +++ b/app/AppActionLaunch.h @@ -29,14 +29,16 @@ public: AppActionLaunch(); int set(const std::string &val) override; - int get(std::string *val) override; void undo() override; std::string serialize() override; int parse(const std::string &data) override; - static void appContextStatusCallback(app_context_h app_context, app_context_status_e status, void *user_data); + int setChangedCallback(valueChangedCB callback, void *userData) override; + void unSetChangedCallback(valueChangedCB callback, void *userData) override; private: + static void appContextStatusCB(app_context_h app_context, app_context_status_e status, void *user_data); std::string appID; - static std::list appidList; + valueChangedCB cb; + void *cbData; }; MODES_NAMESPACE_END diff --git a/packaging/modes-plugins.spec b/packaging/modes-plugins.spec index aa39960..efd45bc 100644 --- a/packaging/modes-plugins.spec +++ b/packaging/modes-plugins.spec @@ -11,6 +11,7 @@ Source1001: %{name}.manifest BuildRequires: cmake BuildRequires: modes-plugin-devel +BuildRequires: pkgconfig(modes) BuildRequires: pkgconfig(dlog) BuildRequires: pkgconfig(capi-appfw-application) BuildRequires: pkgconfig(capi-appfw-app-manager) @@ -74,6 +75,7 @@ make %{?_smp_mflags} %check xmllint --noout --schema %{modes_ro_dir}/schema/tizen_action_rule.xsd %{buildroot}%{modes_ro_dir}/rule/tizen_*_rule.xml +xmllint --noout --schema %{modes_ro_dir}/schema/tizen_mode.xsd %{buildroot}%{modes_ro_dir}/mode/tizen_*_mode.xml %post /sbin/ldconfig diff --git a/unittests/mdsp_test_app.cpp b/unittests/mdsp_test_app.cpp index 0da1b09..3801df9 100644 --- a/unittests/mdsp_test_app.cpp +++ b/unittests/mdsp_test_app.cpp @@ -13,9 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#include +#include #include + #include +#include +#include #include #include #include @@ -43,62 +46,77 @@ protected: plugin = NULL; } - static gboolean appPluginUndoConflictIdler(gpointer data) + static gboolean appUndoTimeout(gpointer data) + { + PluginAction *action = (PluginAction*)data; + plugin->undo(action); + g_main_loop_quit(loop); + return false; + } + + static gboolean checkSetUndoIdler(gpointer data) { PluginAction *action; - result = plugin->set("launch", std::string("org.tizen.net-popup"), &action); + result = plugin->set("launch", std::string(testApp), &action); EXPECT_EQ(MODES_ERROR_NONE, result); - app_context_h runAppContext = NULL; - app_manager_get_app_context("org.tizen.net-popup", &runAppContext); - app_manager_terminate_app(runAppContext); - plugin->undo(action); - g_main_loop_quit(loop); + if (MODES_ERROR_NONE == result) + g_timeout_add(1000, appUndoTimeout, action); + else + g_main_loop_quit(loop); return G_SOURCE_REMOVE; } - static gboolean appPluginSetUndoTimeout(gpointer data) + static void changedCB(void *userData) { - PluginAction *action = (PluginAction*)data; - plugin->undo(action); - g_main_loop_quit(loop); - return false; + const char *appName = (char*)userData; + std::cout << appName << "is terminated" << std::endl; } - static gboolean appPluginSetUndoIdler(gpointer data) + static gboolean checkChangedCBIdler(gpointer data) { PluginAction *action; - result = plugin->set("launch", std::string("org.tizen.net-popup"), &action); + result = plugin->set("launch", std::string(testApp), &action); EXPECT_EQ(MODES_ERROR_NONE, result); + int ret = action->setChangedCallback(changedCB, (void*)testApp); + EXPECT_EQ(MODES_ERROR_NONE, ret); + + app_context_h runAppContext = NULL; + app_manager_get_app_context(testApp, &runAppContext); + app_manager_terminate_app(runAppContext); + if (MODES_ERROR_NONE == result) - g_timeout_add(1000, appPluginSetUndoTimeout, action); + g_timeout_add(3000, appUndoTimeout, action); else g_main_loop_quit(loop); return G_SOURCE_REMOVE; } + static const char *testApp; static int result; static GMainLoop *loop; static GThread *my_thread; static Plugin *plugin; }; +const char *AppPluginTest::testApp = "org.tizen.setting"; int AppPluginTest::result = 0; Plugin *AppPluginTest::plugin = NULL; GMainLoop *AppPluginTest::loop = NULL; -TEST_F(AppPluginTest, setUndoPluginApp) +TEST_F(AppPluginTest, CheckSetUndo) { - g_idle_add(appPluginSetUndoIdler, plugin); + g_idle_add(checkSetUndoIdler, plugin); g_main_loop_run(loop); } -TEST_F(AppPluginTest, undoConflictPluginApp) +TEST_F(AppPluginTest, checkChangedCB) { - g_idle_add(appPluginUndoConflictIdler, nullptr); + sleep(3); + g_idle_add(checkChangedCBIdler, nullptr); g_main_loop_run(loop); } diff --git a/unittests/mode/tizen_appLaunch_mode.xml b/unittests/mode/tizen_appLaunch_mode.xml new file mode 100644 index 0000000..f286dac --- /dev/null +++ b/unittests/mode/tizen_appLaunch_mode.xml @@ -0,0 +1,8 @@ + + + + org.tizen.modesupervisor + off + off + + diff --git a/wifi/tizen_wifi_rule.xml b/wifi/tizen_wifi_rule.xml index a910855..5285a6b 100644 --- a/wifi/tizen_wifi_rule.xml +++ b/wifi/tizen_wifi_rule.xml @@ -1,7 +1,7 @@ - + 1 0 wifi On/Off