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