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