]> Zhao Yanbai Git Server - minix.git/commitdiff
test82: share support functions in common.[ch] for test83 33/3033/1
authorErik van der Kouwe <erik@minix3.org>
Wed, 22 Jul 2015 19:33:28 +0000 (21:33 +0200)
committerErik van der Kouwe <erik@minix3.org>
Wed, 22 Jul 2015 20:24:22 +0000 (22:24 +0200)
Change-Id: I3dfeacc3c2c143d3b696efa39a6f257d38281742

minix/tests/common.c
minix/tests/common.h
minix/tests/test82.c

index 8da40689622a27bb8f3bae8909c34b9121f6c4db..c759c8be4d7c6c4724640edab66ab16a13519ce2 100644 (file)
@@ -7,6 +7,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <stdarg.h>
 #include <stdio.h>
 #include <sys/statvfs.h>
 #include <sys/syslimits.h>
@@ -126,6 +127,24 @@ void cleanup()
   if (chdir("..") == 0 && common_test_nr != -1) rm_rf_dir(common_test_nr);
 }
 
+void fail_printf(const char *file, const char *func, int line,
+       const char *fmt, ...) {
+       va_list ap;
+       char buf[1024];
+       size_t len;
+
+       len = snprintf(buf, sizeof(buf), "[%s:%s:%d] ", file, func, line);
+
+       va_start(ap, fmt);
+       len += vsnprintf(buf + len, sizeof(buf) - len, fmt, ap);
+       va_end(ap);
+
+       snprintf(buf + len, sizeof(buf) - len, " errno=%d error=%s",
+               errno, strerror(errno));
+
+       em(line, buf);
+}
+
 void quit()
 {
   cleanup();
index f4593d0bb217600960f3de18ed8a11d922acfacf..755ede3a942f42967859fc9723fff0ac8cba7bfa 100644 (file)
@@ -10,6 +10,7 @@
 
 #define e(errn) e_f(__FILE__, __LINE__, (errn))
 #define em(errn,msg) do { fprintf(stderr, "%s\n", msg); e(errn); } while(0)
+#define efmt(...) fail_printf(__FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)
 
 #define BIGVARNAME "BIGTEST"
 
@@ -17,6 +18,8 @@ void printprogress(char *msg, int i, int max);
 void cleanup(void);
 int does_fs_truncate(void);
 void e_f(char *file, int lineno, int n);
+void fail_printf(const char *file, const char *func, int line,
+       const char *fmt, ...) __attribute__ ((format(printf, 4, 5)));
 int name_max(char *path);
 void quit(void);
 void rm_rf_dir(int test_nr);
index 169f61291a09a6c720e46974bfa6348e18b4835f..2f157bfaeefccd1b51b32f6e424c7df969b0bf13 100644 (file)
@@ -29,9 +29,8 @@
 
 #include "common.h"
 
-#define FAIL(...) fail(__FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)
-#define CLOSE(fd) do { assert(fd >= 0); if (close((fd)) != 0) FAIL("close failed"); } while (0);
-#define REALLOC(p, size) do { p = realloc(p, size); if (!p) FAIL("realloc of %zu bytes failed", size); } while (0);
+#define CLOSE(fd) do { assert(fd >= 0); if (close((fd)) != 0) efmt("close failed"); } while (0);
+#define REALLOC(p, size) do { p = realloc(p, size); if (!p) efmt("realloc of %zu bytes failed", size); } while (0);
 
 #define HOST "test82.minix3.org"
 #define PORT 80
@@ -56,31 +55,6 @@ static const struct url urls[URL_COUNT] = {
        { HOST, PORT, PATH2, callback_verify_path2 },
 };
 
-static void fail(const char *file, const char *func, int line,
-       const char *fmt, ...) __attribute__ ((format(printf, 4, 5)));
-
-static void fail(const char *file, const char *func, int line,
-       const char *fmt, ...) {
-       va_list ap;
-       char buf[1024];
-       size_t len;
-
-       assert(file);
-       assert(func);
-       assert(fmt);
-
-       len = snprintf(buf, sizeof(buf), "[%s:%s:%d] ", file, func, line);
-
-       va_start(ap, fmt);
-       len += vsnprintf(buf + len, sizeof(buf) - len, fmt, ap);
-       va_end(ap);
-
-       snprintf(buf + len, sizeof(buf) - len, " errno=%d error=%s",
-               errno, strerror(errno));
-
-       em(line, buf);
-}
-
 static int http_connect(const char *host, int port) {
        struct addrinfo *addr = NULL;
        int fd = -1;
@@ -96,18 +70,18 @@ static int http_connect(const char *host, int port) {
 
        errno = 0;
        if (getaddrinfo(host, serv, &hints, &addr) != 0 || !addr) {
-               FAIL("host %s not found", host);
+               efmt("host %s not found", host);
                goto failure;
        }
 
        fd = socket(AF_INET, SOCK_STREAM, 0);
        if (fd < 0) {
-               FAIL("cannot create socket");
+               efmt("cannot create socket");
                goto failure;
        }
 
        if (connect(fd, addr->ai_addr, addr->ai_addrlen) != 0) {
-               FAIL("cannot connect to %s:%d", host, port);
+               efmt("cannot connect to %s:%d", host, port);
                goto failure;
        }
 
@@ -140,7 +114,7 @@ static void write_chunked(
                r = write(fd, data, s);
                if (r <= 0 || (size_t) r > s) {
                        errno = 0;
-                       FAIL("write of %zu bytes failed with result %zd", s, r);
+                       efmt("write of %zu bytes failed with result %zd", s, r);
                        break;
                }
 
@@ -270,7 +244,7 @@ static int http_get_status_line(
                if (index >= len) goto notfound;
                if (!is_numeric(data[index])) {
                        errno = 0;
-                       FAIL("HTTP error: bad status line: \"%.*s\"",
+                       efmt("HTTP error: bad status line: \"%.*s\"",
                                (int) (index - *index_p), data + *index_p);
                        *error_p = 1;
                        goto notfound;
@@ -350,7 +324,7 @@ static int http_parse_int_header(
 
        if (index < index_end) {
                errno = 0;
-               FAIL("HTTP error: bad numeric header value: \"%.*s\"",
+               efmt("HTTP error: bad numeric header value: \"%.*s\"",
                        (int) (index_end - index), data + index);
                *error_p = 1;
                return 0;
@@ -402,7 +376,7 @@ static int http_response_complete(
        /* do we know how long the response will be? */
        if (content_length < 0) {
                errno = 0;
-               FAIL("HTTP error: missing Content-Length header "
+               efmt("HTTP error: missing Content-Length header "
                        "(maybe Transfer-Encoding is specified instead "
                        "but this is currently unsupported)");
                goto error;
@@ -411,7 +385,7 @@ static int http_response_complete(
        /* check whether the amount of data is correct */
        if (len > index + content_length) {
                errno = 0;
-               FAIL("HTTP error: more data received than expected");
+               efmt("HTTP error: more data received than expected");
                goto error;
        }
 
@@ -452,7 +426,7 @@ static void http_recv_response(
                errno = 0;
                r = read(fd, data + datalen, chunksize);
                if (r < 0 || (size_t) r > chunksize) {
-                       FAIL("read of %zu bytes failed with result %zd",
+                       efmt("read of %zu bytes failed with result %zd",
                                chunksize, r);
                        goto cleanup;
                }
@@ -468,7 +442,7 @@ static void http_recv_response(
                /* check for premature disconnection */
                if (r == 0) {
                        errno = 0;
-                       FAIL("server disconnected even though the response "
+                       efmt("server disconnected even though the response "
                                "seems to be incomplete");
                        goto cleanup;
                }
@@ -481,7 +455,7 @@ static void http_recv_response(
                callback_verify(data + index_body, datalen - index_body);
        } else {
                errno = 0;
-               FAIL("unexpected HTTP status code %d", code);
+               efmt("unexpected HTTP status code %d", code);
        }
 
 cleanup:
@@ -511,7 +485,7 @@ static void http_test(
 
        errno = 0;
        if (withshutdown && shutdown(fd, SHUT_WR) != 0) {
-               FAIL("shutdown failed");
+               efmt("shutdown failed");
        }
 
        if (delay) sleep(1);
@@ -539,7 +513,7 @@ static void http_test_fork(
        errno = 0;
        pid = fork();
        if (pid < 0) {
-               FAIL("fork failed");
+               efmt("fork failed");
                return;
        }
 
@@ -567,7 +541,7 @@ static void wait_all(void) {
                errno = 0;
                pid = waitpid(-1, &status, 0);
                if (pid <= 0) {
-                       FAIL("waitpid failed");
+                       efmt("waitpid failed");
                        return;
                }
                if (WIFEXITED(status)) {
@@ -577,24 +551,24 @@ static void wait_all(void) {
                        if (exitcode >= 0) {
                                errct += exitcode;
                        } else {
-                               FAIL("child has negative exit code %d",
+                               efmt("child has negative exit code %d",
                                        exitcode);
                        }
                } else if (WIFSIGNALED(status)) {
                        dbgprintf("child %d killed by signal %d\n",
                                (int) pid, WTERMSIG(status));
-                       FAIL("child killed by signal %d", WTERMSIG(status));
+                       efmt("child killed by signal %d", WTERMSIG(status));
                } else {
                        dbgprintf("child %d gone with status 0x%x\n",
                                (int) pid, status);
-                       FAIL("child gone, but neither exit nor signal");
+                       efmt("child gone, but neither exit nor signal");
                }
                child_count--;
        }
 
        errno = 0;
        if (waitpid(-1, &status, 0) != -1 || errno != ECHILD) {
-               FAIL("waitpid should have returned ECHILD");
+               efmt("waitpid should have returned ECHILD");
        }
 }
 
@@ -644,12 +618,12 @@ static void verify_data(
 
        if (httpsize != refsize) {
                errno = 0;
-               FAIL("download from http://%s:%d%s returned wrong number "
+               efmt("download from http://%s:%d%s returned wrong number "
                        "of bytes: %zd (expected %zd)",
                        HOST, PORT, path, httpsize, refsize);
        } else if (memcmp(httpdata, refdata, refsize) != 0) {
                errno = 0;
-               FAIL("download from http://%s:%d%s returned wrong data",
+               efmt("download from http://%s:%d%s returned wrong data",
                        HOST, PORT, path);
        }
 }