rpm-software-management / libdnf

Package management library.
GNU Lesser General Public License v2.1
183 stars 140 forks source link

0.73.0: test suite fails in assertion of the `test_libdnf_main` unit because use `g_assert ()` in test units #1643

Open kloczek opened 7 months ago

kloczek commented 7 months ago

Continuation of https://github.com/rpm-software-management/libdnf/issues/1620 I think that I know why this unit is failing in my env. I'm using glib binaries compiled with disabled assertions. Looks like libdnf test suite is using g_assert () in test units. This assertion should not be used. From https://docs.gtk.org/glib/func.assert.html:

Debugging macro to terminate the application if the assertion fails. If the assertion fails (i.e. the expression is not true), an error message is logged and the application is terminated.

The macro can be turned off in final releases of code by defining G_DISABLE_ASSERT when compiling the application, so code must not depend on any side effects from expr. Similarly, it must not be used in unit tests, otherwise the unit tests will be ineffective if compiled with G_DISABLE_ASSERT. Use g_assert_true() and related macros in unit tests instead.

In other words instead using g_assert () other g_assert_* () assertions should be used.

List of places where g_assert () currently is used ```console [tkloczko@pers-jacek libdnf-0.73.0]$ grep -r g_assert -w tests/ tests/hawkey/test_sack.cpp: g_assert(sack != NULL); tests/hawkey/test_sack.cpp: g_assert(repo != NULL); tests/libdnf/dnf-self-test.c: g_assert(lock != NULL); tests/libdnf/dnf-self-test.c: g_assert(!ret); tests/libdnf/dnf-self-test.c: g_assert(lock_id1 != 0); tests/libdnf/dnf-self-test.c: g_assert(lock_id2 != 0); tests/libdnf/dnf-self-test.c: g_assert(lock_id2 != lock_id1); tests/libdnf/dnf-self-test.c: g_assert(lock_id1 != 0); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(!ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(dnf_repo_setup(repo, &error)); tests/libdnf/dnf-self-test.c: g_assert(data == NULL); tests/libdnf/dnf-self-test.c: g_assert(state != NULL); tests/libdnf/dnf-self-test.c: g_assert(dnf_state_get_allow_cancel(state)); tests/libdnf/dnf-self-test.c: g_assert(dnf_state_get_allow_cancel(state)); tests/libdnf/dnf-self-test.c: g_assert(!dnf_state_get_allow_cancel(state)); tests/libdnf/dnf-self-test.c: g_assert(!dnf_state_action_stop(state)); tests/libdnf/dnf-self-test.c: g_assert(dnf_state_action_start(state, DNF_STATE_ACTION_DOWNLOAD, NULL)); tests/libdnf/dnf-self-test.c: g_assert(!dnf_state_action_start(state, DNF_STATE_ACTION_DOWNLOAD, NULL)); tests/libdnf/dnf-self-test.c: g_assert(dnf_state_action_stop(state)); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(dnf_state_done(state, NULL)); tests/libdnf/dnf-self-test.c: g_assert(!dnf_state_done(state, NULL)); tests/libdnf/dnf-self-test.c: g_assert(dnf_state_get_allow_cancel(state)); tests/libdnf/dnf-self-test.c: g_assert(state == NULL); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert((_updates == 1)); tests/libdnf/dnf-self-test.c: g_assert((_last_percent == 50)); tests/libdnf/dnf-self-test.c: g_assert(!dnf_state_get_allow_cancel(child)); tests/libdnf/dnf-self-test.c: g_assert(!dnf_state_get_allow_cancel(state)); tests/libdnf/dnf-self-test.c: g_assert(dnf_state_action_start(child, DNF_STATE_ACTION_LOADING_CACHE, NULL)); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(dnf_state_action_start(child, tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(dnf_state_action_stop(state)); tests/libdnf/dnf-self-test.c: g_assert(!dnf_state_action_stop(state)); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(state == NULL); tests/libdnf/dnf-self-test.c: g_assert(_updates == 1); tests/libdnf/dnf-self-test.c: g_assert(_last_percent == 33); tests/libdnf/dnf-self-test.c: g_assert(state == NULL); tests/libdnf/dnf-self-test.c: g_assert(!ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(state == NULL); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(child != NULL); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(state == NULL); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(state == NULL); tests/libdnf/dnf-self-test.c: g_assert(state == NULL); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(state == NULL); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(repo != NULL); tests/libdnf/dnf-self-test.c: g_assert(dnf_repo_get_gpgcheck(repo)); tests/libdnf/dnf-self-test.c: g_assert(!dnf_repo_get_gpgcheck_md(repo)); tests/libdnf/dnf-self-test.c: g_assert(repo != NULL); tests/libdnf/dnf-self-test.c: g_assert(!dnf_repo_get_gpgcheck(repo)); tests/libdnf/dnf-self-test.c: g_assert(!dnf_repo_get_gpgcheck_md(repo)); tests/libdnf/dnf-self-test.c: g_assert(repo != NULL); tests/libdnf/dnf-self-test.c: g_assert(!dnf_repo_get_gpgcheck(repo)); tests/libdnf/dnf-self-test.c: g_assert(!dnf_repo_get_gpgcheck_md(repo)); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(!ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(dnf_context_get_check_disk_space(ctx)); tests/libdnf/dnf-self-test.c: g_assert(dnf_context_get_check_transaction(ctx)); tests/libdnf/dnf-self-test.c: g_assert(!dnf_context_get_keep_cache(ctx)); tests/libdnf/dnf-self-test.c: g_assert(!ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(repo != NULL); tests/libdnf/dnf-self-test.c: g_assert(!ret); tests/libdnf/dnf-self-test.c: g_assert(!ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(repo != NULL); tests/libdnf/dnf-self-test.c: g_assert(!ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(repo != NULL); tests/libdnf/dnf-self-test.c: g_assert(!ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(repo != NULL); tests/libdnf/dnf-self-test.c: g_assert(g_str_has_suffix(cache_location, expected_cache_suffix)); tests/libdnf/dnf-self-test.c: g_assert(g_file_test(filename, G_FILE_TEST_EXISTS)); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(file_result == 0); tests/libdnf/dnf-self-test.c: g_assert(file_result == 0); tests/libdnf/dnf-self-test.c: g_assert(ret); tests/libdnf/dnf-self-test.c: g_assert(!g_file_test(package_directory, G_FILE_TEST_EXISTS)); tests/libdnf/dnf-self-test.c: g_assert(!g_file_test(repo_data_folder, G_FILE_TEST_EXISTS)); tests/libdnf/dnf-self-test.c: g_assert(!g_file_test(xml_string, G_FILE_TEST_EXISTS)); tests/libdnf/dnf-self-test.c: g_assert(!g_file_test(expire_cache_file, G_FILE_TEST_EXISTS)); tests/libdnf/dnf-self-test.c: g_assert(g_file_test(non_matching_file, G_FILE_TEST_EXISTS)); tests/libdnf/dnf-self-test.c: g_assert(g_setenv("G_MESSAGES_DEBUG", "all", FALSE)); tests/libdnf/dnf-self-test.c: g_assert(g_setenv ("GIO_USE_VFS", "local", TRUE)); tests/libdnf/dnf-self-test.c: g_assert(g_setenv("DNF_VAR_testdatadir", TESTDATADIR, TRUE)); tests/libdnf/module/ContextTest.cpp: g_assert(ret); tests/libdnf/module/ContextTest.cpp: g_assert(repo != nullptr); tests/libdnf/module/ContextTest.cpp: g_assert(!dnf_context_module_install(context, module_specs, &error)); tests/libdnf/module/ContextTest.cpp: g_assert(error); tests/libdnf/module/ContextTest.cpp: g_assert(strstr(error->message, "Unable to resolve argument 'nonexistent'")); tests/libdnf/module/ContextTest.cpp: g_assert(!dnf_context_module_install(context, module_specs, &error)); tests/libdnf/module/ContextTest.cpp: g_assert(error); tests/libdnf/module/ContextTest.cpp: g_assert(strstr(error->message, "Unable to resolve argument 'httpd:nonexistent'")); tests/libdnf/module/ContextTest.cpp: g_assert(!dnf_context_module_install(context, module_specs, &error)); tests/libdnf/module/ContextTest.cpp: g_assert(error); tests/libdnf/module/ContextTest.cpp: g_assert(strstr(error->message, "No profile found matching 'nonexistent'")); tests/libdnf/module/ContextTest.cpp: g_assert(dnf_context_module_disable_all(context, &error)); tests/libdnf/module/ContextTest.cpp: g_assert(!dnf_context_install(context, "httpd-2.4.25-8.x86_64", &error)); tests/libdnf/module/ContextTest.cpp: g_assert(error); tests/libdnf/module/ContextTest.cpp: g_assert(strstr(error->message, "No package matches 'httpd-2.4.25-8.x86_64'")); tests/libdnf/module/ContextTest.cpp: g_assert(dnf_context_reset_all_modules(context, sack, &error)); tests/libdnf/module/ContextTest.cpp: g_assert(dnf_context_module_install(context, module_specs, &error)); tests/libdnf/module/ContextTest.cpp: g_assert(pkgs); tests/libdnf/module/ContextTest.cpp: g_assert(pkglist_has_nevra(pkgs, "httpd-2.4.25-8.x86_64")); tests/libdnf/module/ContextTest.cpp: g_assert(pkglist_has_nevra(pkgs, "libnghttp2-1.21.1-1.x86_64")); tests/libdnf/module/ContextTest.cpp: g_assert(dnf_context_module_install(context, module_specs, &error)); ```
jan-kolarik commented 6 months ago

Hi, thanks for the report. I agree we should fix that and replace the g_assert occurrences by other assertions.