Merge "lpc10: Avoid compiler warning when DONT_OPTIMIZE/COMPILE_DOUBLE."
[asterisk/asterisk.git] / tests / test_time.c
index 4116131..b58a473 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Asterisk -- An open source telephony toolkit.
  *
- * Copyright (C) 2009, Digium, Inc.
+ * Copyright (C) 2010, Digium, Inc.
  *
  * Tilghman Lesher <tlesher AT digium DOT com>
  *
 
 /*** MODULEINFO
        <depend>TEST_FRAMEWORK</depend>
+       <support_level>core</support_level>
  ***/
 
 #include "asterisk.h"
 
-ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
-
 #include "asterisk/utils.h"
 #include "asterisk/app.h"
 #include "asterisk/module.h"
@@ -48,30 +47,22 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 
 AST_TEST_DEFINE(test_timezone_watch)
 {
-       const char *zones[2] = { "America/Chicago", "America/New_York" };
+       const char *zones[] = { "America/Chicago", "America/New_York" };
        int type, i, res = AST_TEST_PASS;
        struct timeval tv = ast_tvnow();
-       struct ast_tm atm[2];
+       struct ast_tm atm[ARRAY_LEN(zones)];
        char tmpdir[] = "/tmp/timezone.XXXXXX";
        char tzfile[50], syscmd[256];
 
        switch (cmd) {
        case TEST_INIT:
                info->name = "timezone_watch";
-               info->category = "main/stdtime/";
+               info->category = "/main/stdtime/";
                info->summary = "Verify deleting timezone file purges cache";
                info->description =
                        "Verifies that the caching engine properly destroys a timezone entry when its file is deleted.";
                return AST_TEST_NOT_RUN;
        case TEST_EXECUTE:
-#ifndef __linux__
-               /*!
-                * \todo Fix this test for non-Linux
-                *
-                * https://reviewboard.asterisk.org/r/554/
-                */
-               return AST_TEST_NOT_RUN;
-#endif
                break;
        }
 
@@ -81,18 +72,22 @@ AST_TEST_DEFINE(test_timezone_watch)
        }
        snprintf(tzfile, sizeof(tzfile), "%s/test", tmpdir);
 
-       /* Allow system(3) to function correctly */
-       ast_replace_sigchld();
-
-       for (type = 0; type < 2; type++) {
+       for (type = 0; type <
+#ifdef SOLARIS
+                       1 /* Solaris doesn't use symlinks for timezones */
+#else
+                       2
+#endif
+                               ; type++) {
                ast_test_status_update(test, "Executing %s test...\n", type == 0 ? "deletion" : "symlink");
                for (i = 0; i < ARRAY_LEN(zones); i++) {
                        int system_res;
                        snprintf(syscmd, sizeof(syscmd), "%s " TZDIR "/%s %s", type == 0 ? "cp" : "ln -sf", zones[i], tzfile);
-                       if ((system_res = system(syscmd))) {
+                       if ((system_res = ast_safe_system(syscmd))) {
                                ast_log(LOG_WARNING, "system(%s) returned non-zero: %d\n", syscmd, system_res);
                        }
-                       ast_localtime_wakeup_monitor();
+                       ast_localtime_wakeup_monitor(test);
+                       ast_test_status_update(test, "Querying timezone %s\n", tzfile);
                        ast_localtime(&tv, &atm[i], tzfile);
                        if (i != 0) {
                                if (atm[i].tm_hour == atm[i - 1].tm_hour) {
@@ -101,19 +96,18 @@ AST_TEST_DEFINE(test_timezone_watch)
                                }
                        }
 
-                       /* stat(2) only has resolution to 1 second - must wait, or the mtime is the same */
-                       usleep(1100000);
+                       if (i + 1 != ARRAY_LEN(zones)) {
+                               /* stat(2) only has resolution to 1 second - must wait, or the mtime is the same */
+                               usleep(1100000);
+                       }
                }
        }
 
        snprintf(syscmd, sizeof(syscmd), "rm -rf %s", tmpdir);
-       if (system(syscmd)) {
+       if (ast_safe_system(syscmd)) {
                ast_log(LOG_WARNING, "system(%s) returned non-zero.\n", syscmd);
        }
 
-       /* Restore SIGCHLD handler */
-       ast_unreplace_sigchld();
-
        return res;
 }