Add unit tests for external API 29/203629/12
authorPaweł Szewczyk <p.szewczyk@samsung.com>
Tue, 16 Apr 2019 09:40:17 +0000 (11:40 +0200)
committerPaweł Szewczyk <p.szewczyk@samsung.com>
Tue, 30 Apr 2019 14:35:49 +0000 (16:35 +0200)
Change-Id: Ib8cf43b78886de2b30bb7601d80b9c755fdee75c
Signed-off-by: Paweł Szewczyk <p.szewczyk@samsung.com>
Makefile.am
packaging/activationd.spec
tests/unit_tests.c [new file with mode: 0644]

index 0aa85445435c6f51136ce7088f20609c774e1843..6ce4b59903ed5d85ceae1b6f2c363a3279cfc425 100644 (file)
@@ -203,7 +203,13 @@ libactd_la_CFLAGS = $(AM_CFLAGS) $(SYSCOMMON_CFLAGS)
 libactd_includedir = $(includedir)/actd
 libactd_include_HEADERS = include/unit_control.h
 
-bin_PROGRAMS = activationd_acceptance_checker
+bin_PROGRAMS = activationd_unit_tests
+activationd_unit_tests_SOURCES = tests/unit_tests.c
+activationd_unit_tests_CFLAGS = $(AM_CFLAGS)
+activationd_unit_tests_LDFLAGS = libactd.la
+activationd_unit_tests_DEPENDENCIES = libactd.la
+
+bin_PROGRAMS += activationd_acceptance_checker
 
 activationd_acceptance_checker_SOURCES = \
        tests/activationd_acceptance_tests.c \
index c0f33af03b461b3741b3ae4688cf1ec788ae5129..75daf349a259768ba424c78d74f31717db2db822 100644 (file)
@@ -178,6 +178,7 @@ mkdir -p %{buildroot}/%{enabled_moduledir}
 %{_bindir}/activationd_acceptance_service
 %{_bindir}/activationd_acceptance_checker
 %{_bindir}/activationd_acceptance_test
+%{_bindir}/activationd_unit_tests
 %{_unitdir}/activationd-acceptance-test-s-p.service
 %{_unitdir}/activationd-acceptance-test-s-n.service
 %{_unitdir}/activationd-acceptance-test-i-p.service
diff --git a/tests/unit_tests.c b/tests/unit_tests.c
new file mode 100644 (file)
index 0000000..638fa1d
--- /dev/null
@@ -0,0 +1,90 @@
+#include "unit_control.h"
+#include <stdio.h>
+
+static const char *async_result = NULL;
+
+int test_unit_start()
+{
+       return actd_start_unit("foo.bar");
+}
+
+int test_unit_stop()
+{
+       return actd_stop_unit("foo.bar");
+}
+
+int test_unit_restart()
+{
+       return actd_restart_unit("foo.bar");
+}
+
+void handler(GVariant *var, void *user_data, GError *err)
+{
+       g_variant_get(var, "(s)", &async_result);
+       g_main_loop_quit(user_data);
+}
+
+int test_async_action(int (*func)(const char *unit, actd_unit_cb cb, void *user_data))
+{
+       int ret;
+       GMainLoop *loop;
+
+       loop = g_main_loop_new(NULL, FALSE);
+
+       ret = actd_start_unit_async("foo.bar", handler, loop);
+       if (ret < 0)
+               return ret;
+
+       g_main_loop_run(loop);
+       g_main_loop_unref(loop);
+
+       ret = strcmp(async_result, "ok") == 0;
+       g_free(async_result);
+       async_result = NULL;
+
+       return ret;
+}
+
+int test_unit_start_async()
+{
+       return test_async_action(actd_start_unit_async);
+}
+
+int test_unit_stop_async()
+{
+       return test_async_action(actd_stop_unit_async);
+}
+
+int test_unit_restart_async()
+{
+       return test_async_action(actd_restart_unit_async);
+}
+
+int main()
+{
+       int i;
+       int ret;
+
+       struct {
+               const char *id;
+               int (*func)(void);
+       } tests[] = {
+               {"UnitStart", test_unit_start},
+               {"UnitStop", test_unit_stop},
+               {"UnitRestart", test_unit_restart},
+               {"UnitStartAsync", test_unit_start_async},
+               {"UnitStopAsync", test_unit_stop_async},
+               {"UnitRestartAsync", test_unit_restart_async},
+               {NULL, NULL},
+       };
+
+       for (i = 0; tests[i].id; ++i) {
+               ret = tests[i].func();
+               if (ret < 0)
+                       printf("[FAILED] %s (ret = %d)\n", tests[i].id, ret);
+               else
+                       printf("[OK] %s\n", tests[i].id);
+       }
+
+       return 0;
+}