And the automerge property.
[asterisk/asterisk.git] / tests / test_time.c
index b4933e8..61a2014 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Asterisk -- An open source telephony toolkit.
  *
 /*
  * Asterisk -- An open source telephony toolkit.
  *
- * Copyright (C) 2009, Digium, Inc.
+ * Copyright (C) 2010, Digium, Inc.
  *
  * Tilghman Lesher <tlesher AT digium DOT com>
  *
  *
  * Tilghman Lesher <tlesher AT digium DOT com>
  *
@@ -48,10 +48,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 
 AST_TEST_DEFINE(test_timezone_watch)
 {
 
 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();
        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];
 
        char tmpdir[] = "/tmp/timezone.XXXXXX";
        char tzfile[50], syscmd[256];
 
@@ -64,14 +64,6 @@ AST_TEST_DEFINE(test_timezone_watch)
                        "Verifies that the caching engine properly destroys a timezone entry when its file is deleted.";
                return AST_TEST_NOT_RUN;
        case TEST_EXECUTE:
                        "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;
        }
 
                break;
        }
 
@@ -81,31 +73,34 @@ AST_TEST_DEFINE(test_timezone_watch)
        }
        snprintf(tzfile, sizeof(tzfile), "%s/test", tmpdir);
 
        }
        snprintf(tzfile, sizeof(tzfile), "%s/test", tmpdir);
 
-       /* Allow system(3) to function correctly */
-       ast_replace_sigchld();
-
        for (type = 0; type < 2; 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);
        for (type = 0; type < 2; 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))) {
-                               ast_log(LOG_WARNING, "system() returned non-zero: %d\n", system_res);
+                       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(&tv, &atm[i], tzfile);
                        if (i != 0) {
                                if (atm[i].tm_hour == atm[i - 1].tm_hour) {
                                        res = AST_TEST_FAIL;
                        ast_localtime(&tv, &atm[i], tzfile);
                        if (i != 0) {
                                if (atm[i].tm_hour == atm[i - 1].tm_hour) {
                                        res = AST_TEST_FAIL;
-                                       ast_test_status_update(test, "Failed %s test\n", type == 0 ? "deletion" : "symlink");
+                                       ast_test_status_update(test, "Failed %s test: %d(%s) = %d(%s)\n", type == 0 ? "deletion" : "symlink", atm[i].tm_hour, zones[i], atm[i-1].tm_hour, zones[i-1]);
                                }
                        }
                                }
                        }
+
+                       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);
                }
        }
 
        snprintf(syscmd, sizeof(syscmd), "rm -rf %s", tmpdir);
-
-       /* Restore SIGCHLD handler */
-       ast_unreplace_sigchld();
+       if (ast_safe_system(syscmd)) {
+               ast_log(LOG_WARNING, "system(%s) returned non-zero.\n", syscmd);
+       }
 
        return res;
 }
 
        return res;
 }