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