46 PCWSTR domain = L
"openvpn.net";
47 size_t domain_len = wcslen(domain);
51 assert_true(
ListContainsDomain(L
"openvpn.org,openvpn.net,openvpn.com", domain, domain_len));
55 assert_false(
ListContainsDomain(L
"openvpn.com,internal.openvpn.net", domain, domain_len));
56 assert_false(
ListContainsDomain(L
"internal.openvpn.net,openvpn.com", domain, domain_len));
66 LSTATUS expected_err, PCWSTR expected)
68 const DWORD glyph_size =
sizeof(wchar_t);
71 DWORD expected_size = 0;
74 PCWSTR end = expected;
77 end += wcslen(end) + 1;
79 expected_size = (DWORD)(end - expected + 1) * glyph_size;
82 DWORD size = (DWORD)(wcslen(input) + 1) * glyph_size;
83 assert_true(size <= capacity);
85 wchar_t *domains = malloc(capacity);
86 assert_non_null(domains);
87 memset(domains, 0x41, capacity);
88 memcpy(domains, input, size);
91 assert_int_equal(err, expected_err);
92 assert_int_equal(size, expected_size);
95 assert_memory_equal(domains, expected, expected_size);
104 const DWORD glyph_size =
sizeof(wchar_t);
105 const DWORD cap =
BUF_SIZE * glyph_size;
108 check_convert(L
"openvpn.com", L
"openvpn.com", cap, ERROR_FILE_NOT_FOUND, NULL);
111 check_convert(L
"openvpn.net", L
"openvpn.com", cap, NO_ERROR, L
".openvpn.com\0");
114 check_convert(L
"openvpn.net", L
"openvpn.com,openvpn.net", cap, NO_ERROR, L
".openvpn.com\0");
117 check_convert(L
"openvpn.com", L
"openvpn.com,openvpn.net", cap, NO_ERROR, L
".openvpn.net\0");
120 check_convert(NULL, L
"openvpn.com,openvpn.net", cap, NO_ERROR, L
".openvpn.com\0.openvpn.net\0");
123 check_convert(L
"openvpn.com", L
"openvpn.com,openvpn.net,openvpn.org", cap, NO_ERROR,
124 L
".openvpn.net\0.openvpn.org\0");
127 check_convert(L
"openvpn.net", L
"openvpn.com,openvpn.net,openvpn.org", cap, NO_ERROR,
128 L
".openvpn.com\0.openvpn.org\0");
131 check_convert(L
"openvpn.org", L
"openvpn.com,openvpn.net,openvpn.org", cap, NO_ERROR,
132 L
".openvpn.com\0.openvpn.net\0");
137 check_convert(NULL, L
"a.com,,b.com", cap, NO_ERROR, L
".a.com\0.b.com\0");
138 check_convert(L
"a.com", L
",a.com,", cap, ERROR_FILE_NOT_FOUND, NULL);
139 check_convert(NULL, L
",,,", cap, ERROR_FILE_NOT_FOUND, NULL);
143 check_convert(L
"a.com,b.com", L
"b.com,a.com", cap, ERROR_FILE_NOT_FOUND, NULL);
146 check_convert(NULL, L
"a.com,b.com", 15 * glyph_size, NO_ERROR, L
".a.com\0.b.com\0");
150 check_convert(NULL, L
"openvpn.com,openvpn.net,openvpn.org,am-ende-noch-eine-lange.de",
151 67 * glyph_size, ERROR_MORE_DATA, L
".openvpn.com\0.openvpn.net\0.openvpn.org\0");
154 check_convert(NULL, L
"a.com", 6 * glyph_size, ERROR_MORE_DATA, NULL);
165 assert_int_equal(wcscmp(list, L
"a.com"), 0);
168 wcscpy(list, L
"x.com");
170 assert_int_equal(wcscmp(list, L
"x.com,a.com,b.com"), 0);
173 wcscpy(list, L
"x.com");
175 assert_int_equal(wcscmp(list, L
"x.com"), 0);
178 wcscpy(list, L
"x.com");
180 assert_int_equal(wcscmp(list, L
"x.com,x.com"), 0);
184 wcscpy(tiny, L
"abc");
186 assert_int_equal(wcscmp(tiny, L
"abc"), 0);
196 wcscpy(list, L
"test.vpn.corp.local,other.com,vpn.corp.local");
198 assert_int_equal(wcscmp(list, L
"test.vpn.corp.local,other.com"), 0);
201 wcscpy(list, L
"corp.local,corp.local");
203 assert_int_equal(wcscmp(list, L
"corp.local"), 0);
209 wcscpy(list, L
"a,b,a");
211 assert_int_equal(wcscmp(list, L
"a,b"), 0);
214 wcscpy(list, L
"a,b,c,d");
216 assert_int_equal(wcscmp(list, L
"a,c"), 0);
219 wcscpy(list, L
"a,b,c");
221 assert_int_equal(wcscmp(list, L
"a,b,c"), 0);
224 wcscpy(list, L
"a,b,c");
226 assert_int_equal(wcscmp(list, L
"b,c"), 0);
229 wcscpy(list, L
"a,b,c");
231 assert_int_equal(wcscmp(list, L
"a,b"), 0);
234 wcscpy(list, L
"a,b");
236 assert_int_equal(wcscmp(list, L
""), 0);
239 wcscpy(list, L
"x,x,x");
241 assert_int_equal(wcscmp(list, L
"x"), 0);
246 assert_int_equal(wcscmp(list, L
""), 0);
251 assert_int_equal(wcscmp(list, L
""), 0);
254 wcscpy(list, L
"a,b");
256 assert_int_equal(wcscmp(list, L
"a,b"), 0);
260 wcscpy(list, L
"a,,b");
262 assert_int_equal(wcscmp(list, L
"a,"), 0);
268#define assert_merge_result(sys_env, usr_env, expected) \
271 PWSTR env_ = MergeOpenvpnEnvironment(sys_env, usr_env); \
272 assert_non_null(env_); \
273 size_t size_ = EnvBlockSize(expected); \
274 assert_int_equal(EnvBlockSize(env_), size_); \
275 assert_memory_equal(env_, expected, size_); \
283 PCWSTR sys_env = L
"A=sys\0PATH=sys\0TEMP=sys\0USERNAME=sys\0";
289 L
"A=usr\0APPDATA=usr\0PATH=usr\0TEMP=usr\0TMP=usr\0USERNAME=usr\0USERPROFILE=usr\0USR_ONLY=usr\0",
290 L
"A=sys\0PATH=sys\0APPDATA=usr\0TEMP=usr\0TMP=usr\0USERNAME=usr\0USERPROFILE=usr\0");
308 const struct CMUnitTest tests[] = {
316 int ret = cmocka_run_group_tests_name(
"openvpnserv tests", tests, NULL, NULL);
static BOOL AppendSearchList(PWSTR list, size_t list_cap, PCWSTR add)
Append a comma-separated list of domains to another comma-separated list, in place.
static size_t RemoveSearchListTokens(PWSTR list, PCWSTR remove)
Remove tokens from a comma-separated search list with multiset semantics: for each comma-separated to...
static BOOL ListContainsDomain(PCWSTR list, PCWSTR domain, size_t len)
Check if a domain is contained in a comma separated list of domains.
static LSTATUS ConvertItfDnsDomains(PCWSTR search_domains, PWSTR domains, PDWORD size, const DWORD capacity)
Convert interface specific domain suffix(es) from comma-separated string to MULTI_SZ string.
static void openvpn_unit_test_setup(void)
Sets up the environment for unit tests like making both stderr and stdout non-buffered to avoid messa...
static void check_convert(PCWSTR search_domains, PCWSTR input, DWORD capacity, LSTATUS expected_err, PCWSTR expected)
BOOL ReportStatusToSCMgr(SERVICE_STATUS_HANDLE svc_handle, SERVICE_STATUS *svc_status)
static void test_list_contains_domain(void **state)
static void test_convert_itf_dns_domains(void **state)
static void test_merge_openvpn_environment(void **state)
#define assert_merge_result(sys_env, usr_env, expected)
static void test_remove_search_list_tokens(void **state)
static void test_append_search_list(void **state)