]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
test.c: Fix counting of tests and add 2 new tests
authorGeorge Joseph <gjoseph@sangoma.com>
Tue, 28 Mar 2023 14:07:09 +0000 (08:07 -0600)
committerAsterisk Development Team <asteriskteam@digium.com>
Mon, 8 May 2023 17:55:17 +0000 (17:55 +0000)
The unit test XML output was counting all registered tests as "run"
even when only a subset were actually requested to be run and
the "failures" attribute was missing.

* The "tests" attribute of the "testsuite" element in the
  output XML now reflects only the tests actually requested
  to be executed instead of all the tests registered.

* The "failures" attribute was added to the "testsuite"
  element.

Also added 2 new unit tests that just pass and fail to be
used for CI testing.

Change-Id: Ia137814b5aeb0e1a44c75034bd3615c26021da69
(cherry picked from commit a346fa54a593744b1bfa9a4744301906c6adc309)

doc/CHANGES-staging/test.txt [new file with mode: 0644]
main/test.c
tests/test_pbx.c

diff --git a/doc/CHANGES-staging/test.txt b/doc/CHANGES-staging/test.txt
new file mode 100644 (file)
index 0000000..05a2694
--- /dev/null
@@ -0,0 +1,11 @@
+Subject: test.c
+
+The "tests" attribute of the "testsuite" element in the
+output XML now reflects only the tests actually requested
+to be executed instead of all the tests registered.
+
+The "failures" attribute was added to the "testsuite"
+element.
+
+Also added two new unit tests that just pass and fail
+to be used for testing CI itself.
index 9eefbd0b254edc9b98b55e5cc02fd195b56a6a04..7ec505b5b1b8ecddc1af36a359db986b5fc93212 100644 (file)
@@ -715,8 +715,8 @@ static int test_execute_multiple(const char *name, const char *category, struct
                /* update total counts as well during this iteration
                 * even if the current test did not execute this time */
                last_results.total_time += test->time;
-               last_results.total_tests++;
                if (test->state != AST_TEST_NOT_RUN) {
+                       last_results.total_tests++;
                        if (test->state == AST_TEST_PASS) {
                                last_results.total_passed++;
                        } else {
@@ -793,10 +793,10 @@ static int test_generate_results(const char *name, const char *category, const c
                 */
                fprintf(f_xml, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
                fprintf(f_xml, "<testsuites>\n");
-               fprintf(f_xml, "\t<testsuite errors=\"0\" time=\"%u.%u\" tests=\"%u\" "
+               fprintf(f_xml, "\t<testsuite errors=\"0\" time=\"%u.%u\" tests=\"%u\" failures=\"%u\" "
                                "name=\"AsteriskUnitTests\">\n",
                                last_results.total_time / 1000, last_results.total_time % 1000,
-                               last_results.total_tests);
+                               last_results.total_tests, last_results.total_failed);
                fprintf(f_xml, "\t\t<properties>\n");
                fprintf(f_xml, "\t\t\t<property name=\"version\" value=\"%s\"/>\n", ast_get_version());
                fprintf(f_xml, "\t\t</properties>\n");
index d4858e4a2196633ca21af7c42d0dbdad2fee9a05..3986d7d05881c07a0a6aae075dbe36e11349f229 100644 (file)
@@ -383,8 +383,48 @@ AST_TEST_DEFINE(call_backtrace)
        return AST_TEST_PASS;
 }
 
+AST_TEST_DEFINE(just_fail)
+{
+       switch (cmd) {
+       case TEST_INIT:
+               info->name = "JUST_FAIL";
+               info->category = "/TEST_PASS_FAIL/";
+               info->summary = "Just fails";
+               info->description = "Just fails. "
+                       "This test is mainly used for testing CI and tool failure scenarios.";
+               info->explicit_only = 1;
+               return AST_TEST_NOT_RUN;
+       case TEST_EXECUTE:
+               break;
+       }
+       ast_test_status_update(test, "This test just forces a fail\n");
+
+       return AST_TEST_FAIL;
+}
+
+AST_TEST_DEFINE(just_pass)
+{
+       switch (cmd) {
+       case TEST_INIT:
+               info->name = "JUST_PASS";
+               info->category = "/TEST_PASS_FAIL/";
+               info->summary = "Just passes";
+               info->description = "Just passes. "
+                       "This test is mainly used for testing CI and tool failure scenarios.";
+               info->explicit_only = 1;
+               return AST_TEST_NOT_RUN;
+       case TEST_EXECUTE:
+               break;
+       }
+       ast_test_status_update(test, "This test just forces a pass\n");
+
+       return AST_TEST_PASS;
+}
+
 static int unload_module(void)
 {
+       AST_TEST_UNREGISTER(just_pass);
+       AST_TEST_UNREGISTER(just_fail);
        AST_TEST_UNREGISTER(call_backtrace);
        AST_TEST_UNREGISTER(call_assert);
        AST_TEST_UNREGISTER(segv);
@@ -398,6 +438,8 @@ static int load_module(void)
        AST_TEST_REGISTER(segv);
        AST_TEST_REGISTER(call_assert);
        AST_TEST_REGISTER(call_backtrace);
+       AST_TEST_REGISTER(just_fail);
+       AST_TEST_REGISTER(just_pass);
        return AST_MODULE_LOAD_SUCCESS;
 }