commit 321341f6c09b8d51f6ed137833300af5417a3b61 from: Omar Polo date: Tue Jul 06 13:09:24 2021 UTC add -T timeout to gg; don't let the regress test hang commit - 6edcfca97fb01418cfdb8a2595060a63b7471d48 commit + 321341f6c09b8d51f6ed137833300af5417a3b61 blob - 1b4b649070c2f364030aad0c49b2015f0023dcaf blob + 960228998852e8bdd9bf588c2ef07bd034704b57 --- ChangeLog +++ ChangeLog @@ -1,4 +1,6 @@ 2021-07-06 Omar Polo + + * regress/gg.c (main): add -T timeout * configure (guessing_cflags): try to preserve CFLAGS/LDFLAGS blob - ad47822a9b871beab8e34e4ad26466b12203fa71 blob + acda5da3a1af327595cec18b5761df584bd8fc4d --- regress/gg.1 +++ regress/gg.1 @@ -23,6 +23,7 @@ .Op Fl 23bchNVv .Op Fl C Pa cert.pem Fl K Pa key.pem .Op Fl H Ar hostname +.Op Fl T Ar timeout .Ar IRI .Ek .Sh DESCRIPTION @@ -54,6 +55,12 @@ Load the client certificate key, must be in PEM format .It Fl N Don't check whether the peer certificate name matches the requested hostname. +.It Fl T Ar timeout +Kill +.Nm +after +.Ar timeout +seconds. .It Fl V Only validate the IRI, don't do the Gemini transaction. .It Fl v blob - 7eb698f5700f3ad09a243917ce979f3da2e3dc82 blob + 5537c68eec8de396ddc247ac2c6af97fd8e47a92 --- regress/gg.c +++ regress/gg.c @@ -21,6 +21,13 @@ int flag2, flag3, bflag, cflag, hflag, Nflag, Vflag, vflag; const char *cert, *key; +static void +timeout(int signo) +{ + dprintf(2, "%s: timer expired\n", getprogname()); + exit(1); +} + int main(int argc, char **argv) { @@ -28,15 +35,14 @@ main(int argc, char **argv) struct tls_config *conf; struct tls *ctx; char iribuf[GEMINI_URL_LEN], buf[GEMINI_URL_LEN]; - const char *parse_err = "unknown error", *port = "1965"; + const char *parse_err = "unknown error", *port = "1965", *errstr; const char *hostname; char *t; - int ch; - int handshake; + int ch, handshake, timer; ssize_t len; hostname = NULL; - while ((ch = getopt(argc, argv, "23C:cbH:hK:NVv")) != -1) { + while ((ch = getopt(argc, argv, "23C:cbH:hK:NT:Vv")) != -1) { switch (ch) { case '2': flag2 = 1; @@ -65,6 +71,13 @@ main(int argc, char **argv) case 'N': Nflag = 1; break; + case 'T': + timer = strtonum(optarg, 1, 1000, &errstr); + if (errstr != NULL) + errx(1, "timeout is %s: %s", errstr, optarg); + signal(SIGALRM, timeout); + alarm(timer); + break; case 'V': Vflag = 1; break; blob - 267331e63627545e78fda1e4107433c6b8d876c7 blob + 6b8fdbbeda97ecfcec95bc0e20986efbb6606c92 --- regress/runtime +++ regress/runtime @@ -31,19 +31,19 @@ checkconf() { # usage: get # return the body of the request on stdout get() { - ./gg -b $ggflags "gemini://localhost:10965/$1" + ./gg -T30 -b $ggflags "gemini://localhost:10965/$1" } # usage: head # return the meta response line on stdout head() { - ./gg -h $ggflags "gemini://localhost:10965/$1" + ./gg -T30 -h $ggflags "gemini://localhost:10965/$1" } # usage: raw # return both header and body raw() { - ./gg $ggflags "gemini://localhost:10965/$1" + ./gg -T30 $ggflags "gemini://localhost:10965/$1" } run() {