And the automerge property.
[asterisk/asterisk.git] / tests / test_time.c
index 3dfb5d8..61a2014 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>
  *
@@ -48,10 +48,10 @@ 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];
 
@@ -73,28 +73,34 @@ 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++) {
                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);
-                       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(&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);
-
-       /* Restore SIGCHLD handler */
-       ast_unreplace_sigchld();
+       if (ast_safe_system(syscmd)) {
+               ast_log(LOG_WARNING, "system(%s) returned non-zero.\n", syscmd);
+       }
 
        return res;
 }