]> git.scottworley.com Git - tl-append/blobdiff - tl-append-test.c
Interactive mode: Prompt, feedback, & screen clearing
[tl-append] / tl-append-test.c
index 57ceb988f3e2c539b0b4b7a8e0d3ce9fe3b163b6..4d51c38803dce622f6603c658f8461e981845626 100644 (file)
@@ -10,6 +10,8 @@
 
 #include "common.h"
 
+const size_t TIMESTAMP_LEN = 19;
+
 typedef struct expectation {
   time_t a, b;
   const char *message;
@@ -51,8 +53,32 @@ static ex_t write_to_tl_append(const char *content) {
   return expectation(start, end, content);
 }
 
+static void verify_timestamp(const ex_t *ex, const char *line) {
+  struct tm tm;
+
+  /* localtime_r to set tm's timezone */
+  time_t now_time = time(NULL);
+  if (localtime_r(&now_time, &tm) == NULL)
+    die_err("Can't unpack current time?");
+
+  const char *strptime_result = strptime(line, "%Y %m %d %H %M %S", &tm);
+  if (strptime_result == NULL || strptime_result != &line[TIMESTAMP_LEN])
+    die("Wrong contents in log file: Couldn't parse timestamp");
+  time_t t = mktime(&tm);
+  int t_in_range = ex->a <= t && t <= ex->b;
+  if (!t_in_range)
+    die("Wrong contents in log file: Wrong time");
+}
+
 static void verify_line(const ex_t *ex, const char *line) {
-  if (strncmp(ex->message, line, strlen(ex->message) + 1) != 0)
+  size_t line_len = strlen(line);
+  if (line_len < TIMESTAMP_LEN + 1)
+    die("Wrong contents in log file: Line too short");
+  verify_timestamp(ex, line);
+  if (line[TIMESTAMP_LEN] != ' ')
+    die("Wrong contents in log file: Bad format");
+  if (strncmp(ex->message, &line[TIMESTAMP_LEN + 1], strlen(ex->message) + 1) !=
+      0)
     die("Wrong contents in log file");
 }
 
@@ -62,7 +88,7 @@ static void verify_log_contents(ex_t exps[]) {
   if (f == NULL)
     die_err("Error opening log file");
   for (size_t i = 0; !is_end(exps[i]); i++) {
-    size_t len = strlen(exps[i].message);
+    size_t len = TIMESTAMP_LEN + 1 + strlen(exps[i].message);
     char *buf = (char *)malloc(len + 2);
     if (fgets(buf, len + 1, f) == NULL)
       die("Error reading log file");