test_common.c revision fc2512cfb727d49529d8ed99164db871f4829b73
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amore * This file and its contents are supplied under the terms of the
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amore * Common Development and Distribution License ("CDDL"), version 1.0.
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amore * You may only use this file in accordance with the terms of version
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amore * 1.0 of the CDDL.
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amore * A full copy of the text of the CDDL should have accompanied this
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amore * source. A copy of the CDDL is also available via the Internet at
de572d98af8238405c5d1292a788b1a85b0c68ebGarrett D'Amore * Copyright 2015 Garrett D'Amore <garrett@damore.org>
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amore * Common handling for test programs.
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amorestatic int debug = 0;
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amorestatic int force = 0;
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amore (void) asprintf(&t->name, "%s (%s)", s, ARCH);
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amore (void) printf("TEST STARTING %s:\n", t->name);
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amore /* We inject references to make avoid name unused warnings */
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amoretest_failed(test_t t, const char *format, ...)
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amore (void) printf("TEST FAILING %s: ", t->name);
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amore if (t->ntids > 0) {
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amore if (t->ntids > 0) {
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amore (void) printf("TEST PASSING: %s\n", t->name);
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amore if (t->fails == 0) {
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amore (void) printf("TEST FAILED: %d failures\n", t->fails);
de572d98af8238405c5d1292a788b1a85b0c68ebGarrett D'Amore (void) printf("TEST SUMMARY: %d / %d (ok)\n", passes, tests);
de572d98af8238405c5d1292a788b1a85b0c68ebGarrett D'Amore (void) printf("TEST SUMMARY: %d / %d (%d failing)\n",
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amoretest_debugf(test_t t, const char *format, ...)
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amoretest_run(int nthr, void (*func)(test_t, void *), void *arg,
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amore const char *tname, ...)
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amore (void) asprintf(&t->name, "%s (%s)", s, ARCH);
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amore (void) printf("TEST STARTING %s:\n", t->name);
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amore for (int i = 0; i < nthr; i++) {
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amore (void) pthread_create(&t->tids[i], NULL, test_thr_one, t);
538aa54d819fa7751ca82bcc30d4ed8c57ec2ef2Garrett D'Amore for (int i = 0; i < nthr; i++) {
de572d98af8238405c5d1292a788b1a85b0c68ebGarrett D'Amoretest_load_config(test_t t, const char *fname, ...)
de572d98af8238405c5d1292a788b1a85b0c68ebGarrett D'Amore for (i = 0; i < MAXCB; i++) {
de572d98af8238405c5d1292a788b1a85b0c68ebGarrett D'Amore keyws[i] = (const char *)va_arg(va, const char *);
de572d98af8238405c5d1292a788b1a85b0c68ebGarrett D'Amore callbs[i] = (test_cfg_func_t)va_arg(va, test_cfg_func_t);
de572d98af8238405c5d1292a788b1a85b0c68ebGarrett D'Amore test_debugf(t, "too many arguments to function >= %d", MAXCB);
de572d98af8238405c5d1292a788b1a85b0c68ebGarrett D'Amore (void) snprintf(path, sizeof (path), "%s/cfg/%s", stf, fname);
de572d98af8238405c5d1292a788b1a85b0c68ebGarrett D'Amore (void) snprintf(path, sizeof (path), "cfg/%s", fname);
de572d98af8238405c5d1292a788b1a85b0c68ebGarrett D'Amore test_failed(t, "open(%s): %s", fname, strerror(errno));
de572d98af8238405c5d1292a788b1a85b0c68ebGarrett D'Amore if (fgets(buf, sizeof (buf), cfg) == NULL) {
de572d98af8238405c5d1292a788b1a85b0c68ebGarrett D'Amore if ((*buf != 0) && (buf[strlen(buf)-1] == '\\')) {
de572d98af8238405c5d1292a788b1a85b0c68ebGarrett D'Amore * Continuation. This isn't quite right,
de572d98af8238405c5d1292a788b1a85b0c68ebGarrett D'Amore * as it doesn't allow for a "\" at the
de572d98af8238405c5d1292a788b1a85b0c68ebGarrett D'Amore * end of line (no escaping).
de572d98af8238405c5d1292a788b1a85b0c68ebGarrett D'Amore /* got a line */
de572d98af8238405c5d1292a788b1a85b0c68ebGarrett D'Amore /* skip comments and empty lines */
de572d98af8238405c5d1292a788b1a85b0c68ebGarrett D'Amore for (nfields = 0; nfields < MAXFIELD; nfields++) {
de572d98af8238405c5d1292a788b1a85b0c68ebGarrett D'Amore (void) asprintf(&err, "unknown keyword %s", tok);