]> git.scottworley.com Git - tl-append/blobdiff - tl-append-test.c
Release 1.0.1
[tl-append] / tl-append-test.c
index 04c679e1b2d2e3b482a86c760b54a109650574ca..b3fa7c40341acba3f0d93be0db3927a32f4b998f 100644 (file)
@@ -1,3 +1,20 @@
+/*
+ * tl-append: time-logger appending shell
+ * Copyright (C) 2023  Scott Worley <scottworley@scottworley.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+
 #define _POSIX_C_SOURCE 2
 #define _XOPEN_SOURCE
 #define _GNU_SOURCE
 #define _POSIX_C_SOURCE 2
 #define _XOPEN_SOURCE
 #define _GNU_SOURCE
@@ -28,9 +45,12 @@ const ex_t CONSUMED = {((time_t)-2), ((time_t)-2), NULL};
 static int is_end(ex_t exp) {
   return exp.a == END.a && exp.b == END.b && exp.message == END.message;
 }
 static int is_end(ex_t exp) {
   return exp.a == END.a && exp.b == END.b && exp.message == END.message;
 }
+static void consume(ex_t *exp) {
+  exp->a = CONSUMED.a;
+  exp->b = CONSUMED.b;
+}
 static int is_consumed(ex_t exp) {
 static int is_consumed(ex_t exp) {
-  return exp.a == CONSUMED.a && exp.b == CONSUMED.b &&
-         exp.message == CONSUMED.message;
+  return exp.a == CONSUMED.a && exp.b == CONSUMED.b;
 }
 static ex_t expectation(time_t a, time_t b, const char *message) {
   ex_t exp;
 }
 static ex_t expectation(time_t a, time_t b, const char *message) {
   ex_t exp;
@@ -126,7 +146,7 @@ static void verify_log_contents(const ex_t exps[]) {
 static void consume_expectation(ex_t exps[], const char *line) {
   for (size_t i = 0; !is_end(exps[i]); i++) {
     if (line_problem(&exps[i], line) == NULL) {
 static void consume_expectation(ex_t exps[], const char *line) {
   for (size_t i = 0; !is_end(exps[i]); i++) {
     if (line_problem(&exps[i], line) == NULL) {
-      exps[i] = CONSUMED;
+      consume(&exps[i]);
       return;
     }
   }
       return;
     }
   }
@@ -171,7 +191,7 @@ static void test_encode_time() {
   if (tt == (time_t)-1)
     die_err("Can't pack time?");
 
   if (tt == (time_t)-1)
     die_err("Can't pack time?");
 
-  const char *encoded = encode_time(tt);
+  char *encoded = encode_time(tt);
   /* Loose check to allow for daylight savings time changes between the current
    * time and the target time.  :( */
   assert(encoded[0] == '2');
   /* Loose check to allow for daylight savings time changes between the current
    * time and the target time.  :( */
   assert(encoded[0] == '2');
@@ -194,6 +214,7 @@ static void test_encode_time() {
   assert(encoded[17] == '1');
   assert(encoded[18] == '6');
   assert(encoded[19] == '\0');
   assert(encoded[17] == '1');
   assert(encoded[18] == '6');
   assert(encoded[19] == '\0');
+  free(encoded);
 }
 
 static FILE *take_lock(FILE *f, char *lock_type) {
 }
 
 static FILE *take_lock(FILE *f, char *lock_type) {
@@ -255,7 +276,7 @@ static void write_and_read_two_lines() {
 static void write_to_locked_log(char *lock_types[]) {
   remove_logfile();
   ex_t e1 = write_to_tl_append("begin\n");
 static void write_to_locked_log(char *lock_types[]) {
   remove_logfile();
   ex_t e1 = write_to_tl_append("begin\n");
-  FILE *f = fopen(FILENAME, "a");
+  FILE *f = fopen(FILENAME, "ae");
   if (f == NULL)
     die_err("Couldn't open file for locking");
   for (int i = 0; lock_types[i]; i++)
   if (f == NULL)
     die_err("Couldn't open file for locking");
   for (int i = 0; lock_types[i]; i++)
@@ -304,6 +325,9 @@ static void write_concurrently() {
   }
   results[PARALLELISM] = END;
   verify_log_contents_unordered(results);
   }
   results[PARALLELISM] = END;
   verify_log_contents_unordered(results);
+  for (int i = 0; i < PARALLELISM; i++) {
+    free((void *)results[i].message);
+  }
 }
 
 int main() {
 }
 
 int main() {
@@ -313,7 +337,7 @@ int main() {
   write_to_locked_log((char *[]){NULL});
   write_to_locked_log((char *[]){"fcntl", NULL});
   write_to_locked_log((char *[]){"flock", NULL});
   write_to_locked_log((char *[]){NULL});
   write_to_locked_log((char *[]){"fcntl", NULL});
   write_to_locked_log((char *[]){"flock", NULL});
-  write_to_locked_log((char *[]){"flock", "fcntl", NULL});
+  write_to_locked_log((char *[]){"flock", "fcntl", NULL}); /* Deadlock risk! */
   write_to_locked_log((char *[]){"fcntl", "flock", NULL});
   write_concurrently();
 }
   write_to_locked_log((char *[]){"fcntl", "flock", NULL});
   write_concurrently();
 }