[tests] Improve coverage rate 66/245266/1
authorKonrad Kuchciak <k.kuchciak@samsung.com>
Tue, 6 Oct 2020 07:31:28 +0000 (09:31 +0200)
committerKonrad Kuchciak <k.kuchciak@samsung.com>
Tue, 6 Oct 2020 07:32:26 +0000 (09:32 +0200)
Change-Id: I861dbfaa69411f12ffdbdd64cb049160a449f5e7
Signed-off-by: Konrad Kuchciak <k.kuchciak@samsung.com>
src/test/CMakeLists.txt
src/test/test_diagnostics.h
src/test/test_diagnostics_destroy.c
src/test/test_diagnostics_get_data.c
src/test/test_diagnostics_set_notification_cb.c
src/test/test_diagnostics_signal_handler.c
src/test/test_diagnostics_unset_notification_cb.c [new file with mode: 0644]

index 35fd83548eb188af2fb6f1f09fe9e2da4499146b..41dcca72a9b29809959a3a4db3fa6e4834df6fc7 100644 (file)
@@ -1,5 +1,5 @@
 # ADD_DEFINITIONS(-g -Werror -Wall -Wextra)
-ADD_CUSTOM_TARGET(ctest ALL make test WORKING_DIRECTORY ./ USES_TERMINAL)
+ADD_CUSTOM_TARGET(ctest ALL make CTEST_OUTPUT_ON_FAILURE=1 test WORKING_DIRECTORY ./ USES_TERMINAL)
 
 INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src/library)
 
@@ -16,6 +16,7 @@ function(add_mocked_test name wraps)
 endfunction(add_mocked_test)
 
 add_mocked_test(diagnostics_set_notification_cb "-Wl,--wrap=system_info_get_platform_bool,--wrap=dbus_subscribe")
+add_mocked_test(diagnostics_unset_notification_cb "-Wl,--wrap=system_info_get_platform_bool")
 add_mocked_test(diagnostics_request_client_data "-Wl,--wrap=system_info_get_platform_bool,--wrap=dumpsys_dump")
 add_mocked_test(diagnostics_get_client_id "-Wl,--wrap=system_info_get_platform_bool")
 add_mocked_test(diagnostics_get_report_path "")
index f7d81c2494994fa16f919de4e6601cbfba1a60a5..e97da732d44b4ce5f4855b154b81bf45e43811c4 100644 (file)
@@ -102,10 +102,8 @@ ssize_t __wrap_read(int fd, void *buf, size_t nbytes)
        return (int)mock();
 }
 
-struct _diagnostics_ctx_s *build_ctx_crash()
+GVariant *build_signal_parameters_crash()
 {
-       struct _diagnostics_ctx_s *ctx = calloc(1, sizeof(struct _diagnostics_ctx_s));
-       ctx->signal = calloc(1, sizeof(struct dbus_signal_s));
        GVariantBuilder builder;
 
        g_variant_builder_init(&builder, G_VARIANT_TYPE("(sssssiia{sv})"));
@@ -122,10 +120,19 @@ struct _diagnostics_ctx_s *build_ctx_crash()
        g_variant_builder_add(&builder, "{sv}", SIG_CRASH_EX_ARMPC, g_variant_new_int32(3055767608));
        g_variant_builder_add(&builder, "{sv}", SIG_CRASH_EX_ARMLR, g_variant_new_int32(0));
        g_variant_builder_close(&builder);
-       ctx->signal->parameters = g_variant_builder_end(&builder);
+
+       return g_variant_builder_end(&builder);
+}
+
+struct _diagnostics_ctx_s *build_ctx_crash()
+{
+       struct _diagnostics_ctx_s *ctx = calloc(1, sizeof(struct _diagnostics_ctx_s));
+       ctx->signal = calloc(1, sizeof(struct dbus_signal_s));
+
+       ctx->signal_type = SIG_TYPE_CRASH;
        ctx->signal->signal_name = g_strdup(DBUS_MEMBER_CRASH);
        ctx->signal->sender_name = g_strdup(DBUS_SENDER_CRASH);
-       ctx->signal_type = SIG_TYPE_CRASH;
+       ctx->signal->parameters = build_signal_parameters_crash();
 
        ctx->client_id = ctx->signal->sender_name;
 
index 6cc0b7087aeba4bbbf1bb89795e96588acd58082..d0eff54c2b5eb6db136ba8f380ee6217091c82ca 100644 (file)
@@ -34,8 +34,8 @@ static void test_diagnostics_destroy_n1(void **state)
 {
        (void) state;
        diagnostics_ctx_h ctx = NULL;
-       diagnostics_destroy(ctx);
 
+       assert_int_equal(diagnostics_destroy(ctx), DIAGNOSTICS_ERROR_INVALID_PARAMETER);
        assert_null(ctx);
 }
 
@@ -43,8 +43,8 @@ static void test_diagnostics_data_destroy_n1(void **state)
 {
        (void) state;
        diagnostics_data_h data = NULL;
-       diagnostics_data_destroy(data);
 
+       assert_int_equal(diagnostics_data_destroy(data), DIAGNOSTICS_ERROR_INVALID_PARAMETER);
        assert_null(data);
 }
 
@@ -53,7 +53,7 @@ static void test_diagnostics_destroy_p1(void **state)
        (void) state;
        diagnostics_ctx_h ctx = build_ctx_crash();
 
-       diagnostics_destroy(ctx);
+       assert_int_equal(diagnostics_destroy(ctx), DIAGNOSTICS_ERROR_NONE);
 }
 
 static void test_diagnostics_data_destroy_p2(void **state)
@@ -61,7 +61,7 @@ static void test_diagnostics_data_destroy_p2(void **state)
        (void) state;
        diagnostics_data_h data = calloc(1, sizeof(struct _diagnostics_data_s));
 
-       diagnostics_data_destroy(data);
+       assert_int_equal(diagnostics_data_destroy(data), DIAGNOSTICS_ERROR_NONE);
 }
 
 int main(void)
index adf775bde444e74c51f5507937d7a32279613def..240ec25cbdc748e6b1ff8d695a47a676a0cc3661 100644 (file)
@@ -42,24 +42,39 @@ static void test_diagnostics_get_data_n1(void **state)
 static void test_diagnostics_get_data_n2(void **state)
 {
        (void) state;
-       diagnostics_ctx_h br_ptr = build_ctx_crash();
+       diagnostics_ctx_h ctx = build_ctx_crash();
        diagnostics_data_h data;
        const char *params[] = {"cs_full"};
 
-       assert_int_equal(diagnostics_get_data(br_ptr, params, -1, (void**)&data), DIAGNOSTICS_ERROR_INVALID_PARAMETER);
+       assert_int_equal(diagnostics_get_data(ctx, params, -1, (void**)&data), DIAGNOSTICS_ERROR_INVALID_PARAMETER);
 
-       destroy_ctx(br_ptr);
+       destroy_ctx(ctx);
 }
 
 static void test_diagnostics_get_data_n3(void **state)
 {
        (void) state;
-       diagnostics_ctx_h br_ptr = build_ctx_crash();
+       diagnostics_ctx_h ctx = build_ctx_crash();
        const char *params[] = {"cs_full"};
 
-       assert_int_equal(diagnostics_get_data(br_ptr, params, 1, NULL), DIAGNOSTICS_ERROR_INVALID_PARAMETER);
+       assert_int_equal(diagnostics_get_data(ctx, params, 1, NULL), DIAGNOSTICS_ERROR_INVALID_PARAMETER);
+
+       destroy_ctx(ctx);
+}
 
-       destroy_ctx(br_ptr);
+static void test_diagnostics_get_data_n4(void **state)
+{
+       (void) state;
+       struct _diagnostics_ctx_s *ctx = build_ctx_crash();
+       struct _diagnostics_data_s *data = NULL;
+       const char *params[] = {"cs_foo"};
+
+       int result = diagnostics_get_data(ctx, params, 1, (void**)&data);
+
+       assert_int_equal(result, DIAGNOSTICS_ERROR_NOT_SUPPORTED);
+       assert_null(data);
+
+       destroy_ctx(ctx);
 }
 
 static void test_diagnostics_get_data_p1(void **state)
@@ -86,6 +101,7 @@ int main(void)
                cmocka_unit_test(test_diagnostics_get_data_n1),
                cmocka_unit_test(test_diagnostics_get_data_n2),
                cmocka_unit_test(test_diagnostics_get_data_n3),
+               cmocka_unit_test(test_diagnostics_get_data_n4),
                cmocka_unit_test(test_diagnostics_get_data_p1),
        };
        return cmocka_run_group_tests(tests, NULL, NULL);
index b9da4a4837161131d6b09c7be2e94777d28c3a7d..ea90a1d86ddbef9c38c876fa8cb60b0b9d29cae9 100644 (file)
@@ -43,6 +43,15 @@ static void test_diagnostics_set_notification_cb_n1(void **state)
        assert_int_equal(diagnostics_set_notification_cb(NULL, NULL), DIAGNOSTICS_ERROR_INVALID_PARAMETER);
 }
 
+static void test_diagnostics_set_notification_cb_n2(void **state)
+{
+       (void) state;
+
+       will_return(__wrap_dbus_subscribe, -1);
+
+       assert_int_equal(diagnostics_set_notification_cb(callback, NULL), DIAGNOSTICS_ERROR_IO_ERROR);
+}
+
 static void test_diagnostics_set_notification_cb_p1(void **state)
 {
        (void) state;
@@ -70,6 +79,7 @@ int main(void)
 {
        const struct CMUnitTest tests[] = {
                cmocka_unit_test(test_diagnostics_set_notification_cb_n1),
+               cmocka_unit_test(test_diagnostics_set_notification_cb_n2),
                cmocka_unit_test(test_diagnostics_set_notification_cb_p1),
                cmocka_unit_test(test_diagnostics_set_notification_cb_p2),
        };
index 18d6bd1512b72be5febb887b24638a5b96edca80..02fe8ecdc31339c2a49ef2ab49d5bf10637e67b0 100644 (file)
@@ -33,42 +33,68 @@ struct _diagnostics_cb_info_s {
        void *user_data;
 };
 
+struct _diagnostics_ctx_s *ctx = NULL;
+
 void signal_callback(void *_ctx, void *user_data)
 {
-       struct _diagnostics_ctx_s *ctx = _ctx;
+       ctx = _ctx;
 
-       assert_string_equal(ctx->signal->sender_name, "sender");
-       assert_string_equal(ctx->signal->object_path, "object path");
-       assert_string_equal(ctx->signal->interface_name, "interface name");
-       assert_string_equal(ctx->signal->signal_name, "signal name");
        assert_ptr_equal(user_data, NULL);
-       assert_null(ctx->signal->parameters);
+}
+
+static void test_diagnostics_signal_handler_n1(void **state)
+{
+       (void) state;
+       GVariant *parameters = build_signal_parameters_crash();
+
+       cb_info.cb = NULL;
+       cb_info.user_data = NULL;
+
+       signal_handler(NULL, DBUS_SENDER_CRASH, DBUS_OBJECT_PATH, DBUS_INTERFACE_NAME, DBUS_MEMBER_CRASH, parameters, NULL);
+       assert_null(ctx);
+
+       g_variant_unref(parameters);
+}
+
+static void test_diagnostics_signal_handler_n2(void **state)
+{
+       (void) state;
+       GVariant *parameters = build_signal_parameters_crash();
+
+       cb_info.cb = signal_callback;
+       cb_info.user_data = NULL;
+
+       signal_handler(NULL, DBUS_SENDER_CRASH, DBUS_OBJECT_PATH, DBUS_INTERFACE_NAME, "foo", parameters, NULL);
+       assert_null(ctx);
+
+       g_variant_unref(parameters);
 }
 
 static void test_diagnostics_signal_handler_p1(void **state)
 {
        (void) state;
-       const gchar *sender_name = g_strdup("sender");
-       const gchar *object_path = g_strdup("object path");
-       const gchar *interface_name = g_strdup("interface name");
-       const gchar *signal_name = g_strdup("signal name");
-       char *t = "abc";
-       gboolean en = FALSE;
-       GVariant *parameters = g_variant_new_parsed("{'title': <%s>, 'enabled': <%b>}", t, en);
+       GVariant *parameters = build_signal_parameters_crash();
+
        cb_info.cb = signal_callback;
+       cb_info.user_data = NULL;
+
+       signal_handler(NULL, DBUS_SENDER_CRASH, DBUS_OBJECT_PATH, DBUS_INTERFACE_NAME, DBUS_MEMBER_CRASH, parameters, NULL);
 
-       signal_handler(NULL, sender_name, object_path, interface_name, signal_name, parameters, NULL);
+       assert_non_null(ctx);
+       assert_string_equal(ctx->signal->sender_name, DBUS_SENDER_CRASH);
+       assert_string_equal(ctx->signal->object_path, DBUS_OBJECT_PATH);
+       assert_string_equal(ctx->signal->interface_name, DBUS_INTERFACE_NAME);
+       assert_string_equal(ctx->signal->signal_name, DBUS_MEMBER_CRASH);
+       assert_non_null(ctx->signal->parameters);
 
-       g_free((gchar*)sender_name);
-       g_free((gchar*)object_path);
-       g_free((gchar*)interface_name);
-       g_free((gchar*)signal_name);
        g_variant_unref(parameters);
 }
 
 int main(void)
 {
        const struct CMUnitTest tests[] = {
+               cmocka_unit_test(test_diagnostics_signal_handler_n1),
+               cmocka_unit_test(test_diagnostics_signal_handler_n2),
                cmocka_unit_test(test_diagnostics_signal_handler_p1),
        };
        return cmocka_run_group_tests(tests, NULL, NULL);
diff --git a/src/test/test_diagnostics_unset_notification_cb.c b/src/test/test_diagnostics_unset_notification_cb.c
new file mode 100644 (file)
index 0000000..4104eac
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2020 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 <stddef.h>
+#include <stdarg.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include "diagnostics.h"
+#include <gio/gio.h>
+#include <glib.h>
+
+#include "test_diagnostics.h"
+
+static void test_diagnostics_unset_notification_cb_p1(void **state)
+{
+       (void) state;
+
+       assert_int_equal(diagnostics_unset_notification_cb(), DIAGNOSTICS_ERROR_NONE);
+}
+
+int main(void)
+{
+       const struct CMUnitTest tests[] = {
+               cmocka_unit_test(test_diagnostics_unset_notification_cb_p1),
+       };
+       return cmocka_run_group_tests(tests, NULL, NULL);
+}