--- /dev/null
+/*
+ * Copyright (C) 2018 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <iostream>
+#include <stdlib.h>
+
+#include <gio/gio.h>
+#include <gtest/gtest.h>
+
+#define PASS_DBUS_NAME "org.tizen.system.pass"
+#define PASS_DBUS_PATH "/Org/Tizen/System/Pass/"
+#define PASS_DBUS_INTF "org.tizen.system.pass."
+
+class PassTest : public testing::Test {
+public:
+ static void SetUpTestCase() {
+ int ret = 0;
+ ASSERT_EQ(ret, 0);
+ }
+ static void TearDownTestCase() {
+ int ret = 0;
+ ASSERT_EQ(ret, 0);
+ }
+ void TearDown() override {
+ }
+};
+
+static gint32 pass_test_method_call(const gchar *path, const gchar *intf,
+ const gchar *method, GVariant *body)
+{
+ const gchar *type;
+ GVariant *ret;
+ GError *err = NULL;
+ GDBusMessage *msg, *reply;
+ GDBusConnection *conn;
+ gint32 r;
+
+ conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &err);
+ if (err)
+ return -1;
+
+ msg = g_dbus_message_new_method_call(PASS_DBUS_NAME, path,
+ intf, method);
+ if (!msg)
+ return -1;
+
+ if (body)
+ g_dbus_message_set_body(msg, body);
+
+ reply = g_dbus_connection_send_message_with_reply_sync(conn, msg,
+ G_DBUS_SEND_MESSAGE_FLAGS_NONE,
+ G_MAXINT, NULL, NULL, &err);
+ if (err) {
+ g_object_unref(msg);
+ g_clear_error(&err);
+ return -1;
+ }
+
+ ret = g_variant_get_child_value(g_dbus_message_get_body(reply), 0);
+ type = g_variant_get_type_string(ret);
+ if (type[0] == 'i')
+ r = g_variant_get_int32(ret);
+ else
+ r = -1;
+
+ g_variant_unref(ret);
+
+ g_dbus_connection_flush(conn, NULL, NULL, NULL);
+ g_object_unref(msg);
+ g_object_unref(reply);
+ g_clear_error(&err);
+
+ return r;
+}
+
+TEST_F(PassTest, AppLaunch)
+{
+ gint32 ret;
+
+ ret = pass_test_method_call(PASS_DBUS_PATH"Pmqos",
+ PASS_DBUS_INTF"pmqos",
+ "AppLaunch",
+ g_variant_new("(i)", 3000));
+ ASSERT_EQ(ret, 0) << "AppLaunch Failed";
+
+
+}
+
+TEST_F(PassTest, MultipleAppLaunch)
+{
+ gint32 ret;
+ int i;
+
+ for (i = 0; i < 3; i++) {
+ ret = pass_test_method_call(PASS_DBUS_PATH"Pmqos",
+ PASS_DBUS_INTF"pmqos",
+ "AppLaunch",
+ g_variant_new("(i)", 3000));
+ ASSERT_EQ(ret, 0) << "MultipleAppLaunch Failed";
+ }
+}
+
+TEST_F(PassTest, AppLaunch_and_UltraPowerSaving)
+{
+ gint32 ret;
+
+ ret = pass_test_method_call(PASS_DBUS_PATH"Pmqos",
+ PASS_DBUS_INTF"pmqos",
+ "AppLaunch",
+ g_variant_new("(i)", 3000));
+ ASSERT_EQ(ret, 0) << "AppLaunch Failed";
+
+ ret = pass_test_method_call(PASS_DBUS_PATH"Pmqos",
+ PASS_DBUS_INTF"pmqos",
+ "UltraPowerSaving",
+ g_variant_new("(i)", 3000));
+ ASSERT_EQ(ret, 0) << "UltraPowerSaving Failed";
+}
+
+TEST_F(PassTest, HandleErrorCase)
+{
+ gint32 ret;
+
+ ret = pass_test_method_call(PASS_DBUS_PATH"Pmqos",
+ PASS_DBUS_INTF"pmqos",
+ "stop",
+ NULL);
+ ASSERT_EQ(ret, 0) << "PmQosStop Faield";
+
+ ret = pass_test_method_call(PASS_DBUS_PATH"Pmqos",
+ PASS_DBUS_INTF"pmqos",
+ "AppLaunch",
+ g_variant_new("(i)", 3000));
+
+ ASSERT_EQ(ret, -1) << "AppLaunch Faield";
+
+ ret = pass_test_method_call(PASS_DBUS_PATH"Pmqos",
+ PASS_DBUS_INTF"pmqos",
+ "start",
+ NULL);
+ ASSERT_EQ(ret, 0) << "PmQosStart Faield";
+
+}
+
+TEST_F(PassTest, PmQosRestart)
+{
+ gint32 ret;
+
+ ret = pass_test_method_call(PASS_DBUS_PATH"Pmqos",
+ PASS_DBUS_INTF"pmqos",
+ "stop",
+ NULL);
+ ASSERT_EQ(ret, 0) << "PmQosStop Faield";
+
+ ret = pass_test_method_call(PASS_DBUS_PATH"Pmqos",
+ PASS_DBUS_INTF"pmqos",
+ "start",
+ NULL);
+ ASSERT_EQ(ret, 0) << "PmQosStart Faield";
+
+ ret = pass_test_method_call(PASS_DBUS_PATH"Pmqos",
+ PASS_DBUS_INTF"pmqos",
+ "AppLaunch",
+ g_variant_new("(i)", 3000));
+
+ ASSERT_EQ(ret, 0) << "PmQosStop Faield";
+}
+
+TEST_F(PassTest, ThermalMonitorRestart)
+{
+ gint32 ret;
+
+ ret = pass_test_method_call(PASS_DBUS_PATH"Monitor/Thermal",
+ PASS_DBUS_INTF"monitor.thermal",
+ "stop",
+ NULL);
+ ASSERT_EQ(ret, 0) << "ThermalMonitorStop Faield";
+
+ ret = pass_test_method_call(PASS_DBUS_PATH"Monitor/Thermal",
+ PASS_DBUS_INTF"monitor.thermal",
+ "start",
+ NULL);
+
+ ASSERT_EQ(ret, 0) << "ThermalMonitorStart Faield";
+}
+
+TEST_F(PassTest, PassCoreRestart)
+{
+ gint32 ret;
+
+ ret = pass_test_method_call(PASS_DBUS_PATH"Core",
+ PASS_DBUS_INTF"core",
+ "stop",
+ NULL);
+ ASSERT_EQ(ret, 0) << "PassCoreStop Faield";
+
+ ret = pass_test_method_call(PASS_DBUS_PATH"Core",
+ PASS_DBUS_INTF"core",
+ "start",
+ NULL);
+
+ ASSERT_EQ(ret, 0) << "PassCoreStart Faield";
+}
+
+TEST_F(PassTest, PassServiceReStart)
+{
+ gint32 ret;
+
+ ret = system("systemctl stop pass.service");
+ ASSERT_EQ(ret, 0) << "PassServieStop Faield";
+
+ ret = system("systemctl start pass.service");
+ ASSERT_EQ(ret, 0) << "PassServiceStart Faield";
+}
+
+int main(int argc, char *argv[])
+{
+ int ret;
+
+ try {
+ testing::InitGoogleTest(&argc, argv);
+ ret = RUN_ALL_TESTS();
+ } catch (...) {
+ ret = EXIT_FAILURE;
+ }
+
+ return ret;
+}