xref: /netbsd-src/external/bsd/pam-u2f/dist/tests/expand.c (revision 540ca2718c85d7b6631d382e3e93f4dc91e51282)
1*540ca271Schristos /*
2*540ca271Schristos  *  Copyright (C) 2023 Yubico AB - See COPYING
3*540ca271Schristos  */
4*540ca271Schristos 
5*540ca271Schristos #undef NDEBUG
6*540ca271Schristos #include <assert.h>
7*540ca271Schristos #include <stdlib.h>
8*540ca271Schristos #include <string.h>
9*540ca271Schristos #include "util.h"
10*540ca271Schristos 
11*540ca271Schristos #define ASSERT_STR_EQ(a, b) assert(!strcmp(a, b))
12*540ca271Schristos #define ASSERT_EXPANDED_EQ(str, user, result)                                  \
13*540ca271Schristos   do {                                                                         \
14*540ca271Schristos     char *tmp = expand_variables(str, user);                                   \
15*540ca271Schristos     assert(tmp != NULL);                                                       \
16*540ca271Schristos     ASSERT_STR_EQ(tmp, result);                                                \
17*540ca271Schristos     free(tmp);                                                                 \
18*540ca271Schristos   } while (0)
19*540ca271Schristos 
20*540ca271Schristos #define ASSERT_NULL(x) assert((x) == NULL)
21*540ca271Schristos 
22*540ca271Schristos int main(void) {
23*540ca271Schristos   ASSERT_EXPANDED_EQ("foobar", "user", "foobar");
24*540ca271Schristos   ASSERT_EXPANDED_EQ("", "user", "");
25*540ca271Schristos   ASSERT_EXPANDED_EQ("%%", "user", "%");
26*540ca271Schristos   ASSERT_EXPANDED_EQ("%u", "user", "user");
27*540ca271Schristos   ASSERT_EXPANDED_EQ("x%u", "user", "xuser");
28*540ca271Schristos   ASSERT_EXPANDED_EQ("%ux", "user", "userx");
29*540ca271Schristos   ASSERT_EXPANDED_EQ("x%ux", "user", "xuserx");
30*540ca271Schristos   ASSERT_EXPANDED_EQ("%%%u", "user", "%user");
31*540ca271Schristos   ASSERT_EXPANDED_EQ("%u%%", "user", "user%");
32*540ca271Schristos   ASSERT_EXPANDED_EQ("%%u", "user", "%u");
33*540ca271Schristos   ASSERT_EXPANDED_EQ("%u", "%user", "%user");
34*540ca271Schristos   ASSERT_EXPANDED_EQ("%u%u", "user", "useruser");
35*540ca271Schristos   ASSERT_EXPANDED_EQ("%%%u%%", "user", "%user%");
36*540ca271Schristos 
37*540ca271Schristos   ASSERT_NULL(expand_variables("%", "user"));  // Unexpected end of string.
38*540ca271Schristos   ASSERT_NULL(expand_variables("%x", "user")); // Unknown variable.
39*540ca271Schristos   ASSERT_NULL(expand_variables("%u", ""));     // Disallow empty username.
40*540ca271Schristos 
41*540ca271Schristos   return 0;
42*540ca271Schristos }
43