[master] 12664cd Collect stdout/err from the test-running process in a VSB and emit it at the end of the run where it is far more likely to be noticed.
Poul-Henning Kamp
phk at FreeBSD.org
Thu Jan 19 13:56:05 CET 2017
commit 12664cd84d4740f25cc6647b9c69171956c3a8bf
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Thu Jan 19 12:49:02 2017 +0000
Collect stdout/err from the test-running process in a VSB and emit
it at the end of the run where it is far more likely to be noticed.
diff --git a/bin/varnishtest/vtc_main.c b/bin/varnishtest/vtc_main.c
index 158de74..ebc8b4d 100644
--- a/bin/varnishtest/vtc_main.c
+++ b/bin/varnishtest/vtc_main.c
@@ -77,6 +77,8 @@ struct vtc_job {
char *tmpdir;
unsigned bufsiz;
double t0;
+ struct vsb *diag;
+ int killed;
};
int iflg = 0;
@@ -161,21 +163,23 @@ tst_cb(const struct vev *ve, int what)
pid_t px;
double t;
FILE *f;
+ char *p;
+ struct vsb *v;
CAST_OBJ_NOTNULL(jp, ve->priv, JOB_MAGIC);
// printf("CB %p %s %d\n", ve, jp->tst->filename, what);
- if (what == 0)
+ if (what == 0) {
+ jp->killed = 1;
AZ(kill(jp->child, SIGKILL)); /* XXX: Timeout */
- else
+ } else {
assert(what & (EV_RD | EV_HUP));
+ }
*buf = '\0';
- i = read(ve->fd, buf, sizeof buf - 1);
- if (i > 0) {
- buf[i] = '\0';
- printf("######## %s ########\n%s", jp->tst->filename, buf);
- }
+ i = read(ve->fd, buf, sizeof buf);
+ if (i > 0)
+ VSB_bcat(jp->diag, buf, i);
if (i == 0) {
njob--;
px = wait4(jp->child, &stx, 0, NULL);
@@ -187,10 +191,21 @@ tst_cb(const struct vev *ve, int what)
if (ecode == 0)
ecode = WEXITSTATUS(stx);
- if (ecode > 1 && vtc_verbosity)
- printf("%s\n", jp->buf);
- else if (vtc_verbosity > 1)
- printf("%s\n", jp->buf);
+ AZ(VSB_finish(jp->diag));
+ v = VSB_new_auto();
+ AN(v);
+ VSB_cat(v, jp->buf);
+ p = strchr(jp->buf, '\0');
+ if (p > jp->buf && p[-1] != '\n')
+ VSB_putc(v, '\n');
+ VSB_quote_pfx(v, "* diag 0.0 ",
+ VSB_data(jp->diag), -1, VSB_QUOTE_NONL);
+ AZ(VSB_finish(v));
+ VSB_destroy(&jp->diag);
+ AZ(munmap(jp->buf, jp->bufsiz));
+
+ if ((ecode > 1 && vtc_verbosity) || vtc_verbosity > 1)
+ printf("%s", VSB_data(v));
if (!ecode)
vtc_good++;
@@ -206,13 +221,14 @@ tst_cb(const struct vev *ve, int what)
bprintf(buf, "%s/LOG", jp->tmpdir);
f = fopen(buf, "w");
AN(f);
- (void)fprintf(f, "%s\n", jp->buf);
+ (void)fprintf(f, "%s\n", VSB_data(v));
AZ(fclose(f));
}
free(jp->tmpdir);
+ VSB_destroy(&v);
if (ecode > 1) {
- printf("# top TEST %s FAILED (%.3f)",
+ printf("# top TEST %s FAILED (%.3f)",
jp->tst->filename, t);
if (WIFSIGNALED(stx))
printf(" signal=%d\n", WTERMSIG(stx));
@@ -223,11 +239,10 @@ tst_cb(const struct vev *ve, int what)
exit(2);
}
} else if (vtc_verbosity) {
- printf("# top TEST %s %s (%.3f)\n",
+ printf("# top TEST %s %s (%.3f)\n",
jp->tst->filename,
ecode ? "skipped" : "passed", t);
}
- AZ(munmap(jp->buf, jp->bufsiz));
if (jp->evt != NULL)
vev_del(vb, jp->evt);
@@ -252,6 +267,9 @@ start_test(void)
ALLOC_OBJ(jp, JOB_MAGIC);
AN(jp);
+ jp->diag = VSB_new_auto();
+ AN(jp->diag);
+
jp->bufsiz = vtc_bufsiz;
jp->buf = mmap(NULL, jp->bufsiz, PROT_READ|PROT_WRITE,
More information about the varnish-commit
mailing list