1 /*	$NetBSD: test_expr.c,v 1.1.1.1 2011/04/13 18:15:12 elric Exp $	*/
2 
3 
4 #include "hx_locl.h"
5 #include <err.h>
6 
7 struct foo {
8     int val;
9     char *str;
10 } foo[] = {
11     { 0, "FALSE" },
12     { 1, "TRUE" },
13     { 0, "!TRUE" },
14     { 0, "! TRUE" },
15     { 0, "!\tTRUE" },
16     { 0, "( FALSE AND FALSE )" },
17     { 0, "( TRUE AND FALSE )" },
18     { 1, "( TRUE AND TRUE )" },
19     { 1, "( TRUE OR TRUE )" },
20     { 1, "( TRUE OR FALSE )" },
21     { 0, "( FALSE OR FALSE )" },
22     { 1, "! ( FALSE OR FALSE )" },
23 
24     { 1, "\"foo\" TAILMATCH \"foo\"" },
25     { 1, "\"foobar\" TAILMATCH \"bar\"" },
26     { 0, "\"foobar\" TAILMATCH \"foo\"" },
27 
28     { 1, "\"foo\" == \"foo\"" },
29     { 0, "\"foo\" == \"bar\"" },
30     { 0, "\"foo\" != \"foo\"" },
31     { 1, "\"foo\" != \"bar\"" },
32     { 1, "%{variable} == \"foo\"" },
33     { 0, "%{variable} == \"bar\"" },
34     { 1, "%{context.variable} == \"foo\"" },
35     { 0, "%{context.variable} == \"bar\"" },
36     { 1, "\"foo\" IN ( \"bar\", \"foo\")" },
37     { 0, "\"foo\" IN ( \"bar\", \"baz\")" },
38     { 0, "\"bar\" IN %{context}" },
39     { 1, "\"foo\" IN %{context}" },
40     { 1, "\"variable\" IN %{context}" },
41 
42     { 1, "\"foo\" IN %{context} AND %{context.variable} == \"foo\"" }
43 };
44 
45 int
46 main(int argc, char **argv)
47 {
48     struct hx_expr *expr;
49     hx509_context context;
50     hx509_env env = NULL, env2 = NULL;
51     int val, i, ret;
52 
53 #if 0
54     extern int yydebug;
55     yydebug = 1;
56 #endif
57 
58     ret = hx509_context_init(&context);
59     if (ret)
60 	errx(1, "hx509_context_init failed with %d", ret);
61 
62     hx509_env_add(context, &env, "variable", "foo");
63     hx509_env_add(context, &env2, "variable", "foo");
64     hx509_env_add_binding(context, &env, "context", env2);
65 
66     for (i = 0; i < sizeof(foo)/sizeof(foo[0]); i++) {
67 
68 	expr = _hx509_expr_parse(foo[i].str);
69 	if (expr == NULL)
70 	    errx(1, "_hx509_expr_parse failed for %d: %s", i, foo[i].str);
71 
72 	val = _hx509_expr_eval(context, env, expr);
73 	if (foo[i].val) {
74 	    if (val == 0)
75 		errx(1, "_hx509_expr_eval not true when it should: %d: %s",
76 		     i, foo[i].str);
77 	} else {
78 	    if (val)
79 		errx(1, "_hx509_expr_eval true when it should not: %d: %s",
80 		     i, foo[i].str);
81 	}
82 
83 	_hx509_expr_free(expr);
84     }
85 
86     hx509_env_free(&env);
87 
88     return 0;
89 }
90