[master] 91fb76abc vtest: divorce matching from match result handling
Nils Goroll
nils.goroll at uplex.de
Tue Jan 12 22:11:12 UTC 2021
commit 91fb76abcda1cf6c3795c8cd64e62fef8c670c53
Author: Nils Goroll <nils.goroll at uplex.de>
Date: Tue Jan 12 21:24:37 2021 +0100
vtest: divorce matching from match result handling
diff --git a/bin/varnishtest/vtc_logexp.c b/bin/varnishtest/vtc_logexp.c
index a567c8a91..f0d14b086 100644
--- a/bin/varnishtest/vtc_logexp.c
+++ b/bin/varnishtest/vtc_logexp.c
@@ -264,15 +264,20 @@ logexp_next(struct logexp *le)
vtc_log(le->vl, 3, "expecting| %s", VSB_data(le->test->str));
}
-static int
-logexp_match(struct logexp *le, const char *data, int vxid, int tag,
- int type, int len)
+enum le_match_e {
+ LEM_OK,
+ LEM_SKIP,
+ LEM_FAIL
+};
+
+static enum le_match_e
+logexp_match(const struct logexp *le, struct logexp_test *test,
+ const char *data, int vxid, int tag, int type, int len)
{
- struct logexp_test *test;
const char *legend;
int ok = 1, skip = 0;
- test = le->test;
+ AN(le);
AN(test);
if (test->vxid == LE_LAST) {
@@ -314,21 +319,11 @@ logexp_match(struct logexp *le, const char *data, int vxid, int tag,
legend, vxid, VSL_tags[tag], type, len,
data);
- if (ok) {
- le->vxid_last = vxid;
- le->tag_last = tag;
- le->skip_cnt = 0;
- logexp_next(le);
- if (le->test == NULL)
- /* End of test script */
- return (1);
- } else if (skip)
- le->skip_cnt++;
- else {
- /* Signal fail */
- return (2);
- }
- return (0);
+ if (ok)
+ return (LEM_OK);
+ if (skip)
+ return (LEM_SKIP);
+ return (LEM_FAIL);
}
static int v_matchproto_(VSLQ_dispatch_f)
@@ -337,7 +332,8 @@ logexp_dispatch(struct VSL_data *vsl, struct VSL_transaction * const pt[],
{
struct logexp *le;
struct VSL_transaction *t;
- int i, r;
+ int i;
+ enum le_match_e r;
int vxid, tag, type, len;
const char *data;
@@ -361,9 +357,22 @@ logexp_dispatch(struct VSL_data *vsl, struct VSL_transaction * const pt[],
type = VSL_CLIENT(t->c->rec.ptr) ? 'c' :
VSL_BACKEND(t->c->rec.ptr) ? 'b' : '-';
- r = logexp_match(le, data, vxid, tag, type, len);
- if (r)
+ r = logexp_match(le, le->test,
+ data, vxid, tag, type, len);
+ if (r == LEM_FAIL)
return (r);
+ if (r == LEM_SKIP) {
+ le->skip_cnt++;
+ continue;
+ }
+ assert(r == LEM_OK);
+ le->vxid_last = vxid;
+ le->tag_last = tag;
+ le->skip_cnt = 0;
+ logexp_next(le);
+ if (le->test == NULL)
+ /* End of test script */
+ return (1);
}
}
More information about the varnish-commit
mailing list