Browse Source

CRL Monitor Test Fix

1. For Mach and FreeBsd builds, add the function link_file() which makes
   a hard link for a file.
2. Add a macro STAGE_FILE that either calls copy_file or link_file
   depending on doing a Mach or FreeBSD build or not.

This is to work around how the CRL Monitor is detecting file changes
made by the CRL monitor test in the testsuite. Linux and Windows are
detecting the file copies and deletes, and how macOS detects them.
kevent sees the link as a single change to the parent directory and
reads it. When you copy the file, kevent sees the new file getting
opened and triggering the file update.
John Safranek 3 months ago
parent
commit
b66a108e97
3 changed files with 16 additions and 2 deletions
  1. 7 0
      tests/utils.h
  2. 2 2
      testsuite/testsuite.c
  3. 7 0
      wolfssl/test.h

+ 7 - 0
tests/utils.h

@@ -111,6 +111,13 @@ cleanup:
         XFCLOSE(outFile);
     return ret;
 }
+
+#if defined(__MACH__) || defined(__FreeBSD__)
+int link_file(const char* in, const char* out)
+{
+    return link(in, out);
+}
+#endif
 #endif /* !NO_FILESYSTEM */
 
 #if !defined(NO_FILESYSTEM) && !defined(NO_CERTS) && !defined(NO_RSA) && \

+ 2 - 2
testsuite/testsuite.c

@@ -327,7 +327,7 @@ static int test_crl_monitor(void)
         if (i % 2 == 0) {
             /* succeed on even rounds */
             sprintf(buf, "%s/%s", tmpDir, "crl.pem");
-            if (copy_file("certs/crl/crl.pem", buf) != 0) {
+            if (STAGE_FILE("certs/crl/crl.pem", buf) != 0) {
                 fprintf(stderr, "[%d] Failed to copy file to %s\n", i, buf);
                 goto cleanup;
             }
@@ -350,7 +350,7 @@ static int test_crl_monitor(void)
         else {
             /* fail on odd rounds */
             sprintf(buf, "%s/%s", tmpDir, "crl.revoked");
-            if (copy_file("certs/crl/crl.revoked", buf) != 0) {
+            if (STAGE_FILE("certs/crl/crl.revoked", buf) != 0) {
                 fprintf(stderr, "[%d] Failed to copy file to %s\n", i, buf);
                 goto cleanup;
             }

+ 7 - 0
wolfssl/test.h

@@ -656,6 +656,13 @@ int rem_dir(const char* dirName);
 int rem_file(const char* fileName);
 int copy_file(const char* in, const char* out);
 
+#if defined(__MACH__) || defined(__FreeBSD__)
+    int link_file(const char* in, const char* out);
+    #define STAGE_FILE(x,y) link_file((x),(y))
+#else
+    #define STAGE_FILE(x,y) copy_file((x),(y))
+#endif
+
 void signal_ready(tcp_ready* ready);
 
 /* wolfSSL */