3#include <winpr/version.h>
4#include <winpr/build-config.h>
8#include <freerdp/api.h>
9#include <freerdp/version.h>
10#include <freerdp/build-config.h>
11#include <freerdp/utils/helpers.h>
13#if defined(BUILD_TESTING_INTERNAL)
24static const test_case_t tests[] = { {
"foobar",
"gaga", 23 },
25 {
"foobar1",
"gaga1", -1 },
26 {
"foobar2",
"gaga2", 23 },
27 {
"foobar3",
"gaga3", -1 } };
29WINPR_ATTR_MALLOC(free, 1)
31static
char* create(const
char* vendor, const
char* product, SSIZE_T version,
char separator)
36 (void)winpr_asprintf(&wvendor, &wlen,
"%s%c%s", vendor, separator, product);
38 (
void)winpr_asprintf(&wvendor, &wlen,
"%s%c%s%" PRIdz, vendor, separator, product, version);
41 (void)fprintf(stderr,
"%s(vendor=%s, product=%s, version=%" PRIdz
", separator=%c) NULL\n",
42 __func__, vendor, product, version, separator);
47static bool checkCombined(
const char* what,
const char* vendor,
const char* product,
48 SSIZE_T version,
char separator)
50 if (!what || !vendor || !product)
53 "%s(what=%s, vendor=%s, product=%s, version=%" PRIdz
", separator=%c)\n",
54 what, vendor, product, version, separator);
58 char* cmp = create(vendor, product, version, separator);
62 const bool rc = strcmp(what, cmp) == 0;
66 "%s(what=%s, vendor=%s, product=%s, version=%" PRIdz
67 ", separator=%c) -> got %s\n",
68 what, vendor, product, version, separator, cmp);
74#if !defined(FREERDP_USE_VENDOR_PRODUCT_CONFIG_DIR)
75#if !defined(WITH_FULL_CONFIG_PATH)
76WINPR_ATTR_MALLOC(free, 1)
78static
char* freerdp_settings_get_legacy_config_path(const
char* filename, const
char* cproduct)
80 char product[MAX_PATH] = { 0 };
82 const size_t plen = strnlen(cproduct,
sizeof(product));
86 for (
size_t i = 0; i < plen; i++)
87 product[i] = (
char)tolower(cproduct[i]);
89 char* path = GetKnownSubPath(KNOWN_PATH_XDG_CONFIG_HOME, product);
97 char* filepath = GetCombinedPath(path, filename);
103WINPR_ATTR_MALLOC(free, 1)
105char* getFreeRDPDefaultConfig(BOOL system, const
char* product, const
char* vendor, SSIZE_T version,
106 const
char* filename)
108 eKnownPathTypes
id = system ? KNOWN_PATH_SYSTEM_CONFIG_HOME : KNOWN_PATH_XDG_CONFIG_HOME;
110 if (!vendor || !product)
113#if !defined(WITH_FULL_CONFIG_PATH)
114 if (!system && (_stricmp(vendor, product) == 0))
115 return freerdp_settings_get_legacy_config_path(filename, product);
118 char* config = GetKnownPath(
id);
124 base = GetCombinedPathV(config,
"%s", product);
126 base = GetCombinedPathV(config,
"%s%" PRIdz, product, version);
135 char* path = GetCombinedPathV(base,
"%s", filename);
141WINPR_ATTR_MALLOC(free, 1)
143static
char* getFreeRDPConfig(
bool custom, BOOL system, const
char* vendor, const
char* product,
144 SSIZE_T version, const
char* filename)
146#if !defined(FREERDP_USE_VENDOR_PRODUCT_CONFIG_DIR)
148 return getFreeRDPDefaultConfig(system, vendor, product, version, filename);
150 eKnownPathTypes
id = system ? KNOWN_PATH_SYSTEM_CONFIG_HOME : KNOWN_PATH_XDG_CONFIG_HOME;
151 char* config = GetKnownSubPathV(
id,
"%s", vendor);
157 base = GetCombinedPathV(config,
"%s", product);
159 base = GetCombinedPathV(config,
"%s%" PRIdz, product, version);
167 char* path = GetCombinedPath(base, filename);
173static bool checkFreeRDPConfig(
bool custom,
const char* what, BOOL system,
const char* vendor,
174 const char* product, SSIZE_T version,
const char* filename)
178 char* cmp = getFreeRDPConfig(custom, system, vendor, product, version, filename);
181 (void)fprintf(stderr,
182 "%s(custom=%d, what=%s, system=%d, vendor=%s, product=%s, version=%" PRIdz
183 ", file=%s) failed\n",
184 __func__, custom, what, system, vendor, product, version, filename);
188 const bool rc = strcmp(what, cmp) == 0;
191 (void)fprintf(stderr,
192 "%s(custom=%d, what=%s, system=%d, vendor=%s, product=%s, version=%" PRIdz
193 ", file=%s) failed compare: got %s\n",
194 __func__, custom, what, system, vendor, product, version, filename, cmp);
200static bool checkFreeRDPResults(
bool custom,
const char* vendor,
const char* product,
203 const char* cvendor = freerdp_getApplicationDetailsVendor();
204 const char* cproduct = freerdp_getApplicationDetailsProduct();
205 const SSIZE_T cversion = freerdp_getApplicationDetailsVersion();
209#if !defined(WITH_RESOURCE_VERSIONING)
214 if (strcmp(cvendor, vendor) != 0)
216 (void)fprintf(stderr,
"freerdp_getApplicationDetailsVendor returned '%s', expected '%s'\n",
220 if (strcmp(cvendor, vendor) != 0)
222 (void)fprintf(stderr,
"freerdp_getApplicationDetailsProduct returned '%s', expected '%s'\n",
226 if (cversion != version)
228 (void)fprintf(stderr,
229 "freerdp_getApplicationDetailsVersion returned %" PRIdz
", expected %" PRIdz
236 char* sys = freerdp_GetConfigFilePath(TRUE, NULL);
237 const bool rc = checkFreeRDPConfig(custom, sys, TRUE, vendor, product, version, NULL);
243 const char name[] =
"systest";
244 char* sys = freerdp_GetConfigFilePath(TRUE, name);
245 const bool rc = checkFreeRDPConfig(custom, sys, TRUE, vendor, product, version, name);
251 char* sys = freerdp_GetConfigFilePath(FALSE, NULL);
252 const bool rc = checkFreeRDPConfig(custom, sys, FALSE, vendor, product, version, NULL);
258 const char name[] =
"usertest";
259 char* sys = freerdp_GetConfigFilePath(FALSE, name);
260 const bool rc = checkFreeRDPConfig(custom, sys, FALSE, vendor, product, version, name);
266#if defined(BUILD_TESTING_INTERNAL)
268 char* pcmp = create(vendor, product, version,
'\\');
273#define FMT "foo\\bar\\%s\\gaga"
274 (void)winpr_asprintf(&cmp, &clen, FMT, pcmp);
278 (void)fprintf(stderr,
"winpr_asprintf cmp NULL\n");
282 char* comb = freerdp_getApplicatonDetailsRegKey(FMT);
288 rc = strcmp(cmp, comb) == 0;
295 (void)fprintf(stderr,
"strcmp(%s, %s) compare reg failed\n", cmp, comb);
300 char* comb = freerdp_getApplicatonDetailsCombined(
'/');
301 const bool rc = checkCombined(comb, vendor, product, version,
'/');
307 char* comb = freerdp_getApplicatonDetailsCombined(
'\\');
308 const bool rc = checkCombined(comb, vendor, product, version,
'\\');
313 const BOOL ccustom = freerdp_areApplicationDetailsCustomized();
314 if (ccustom != custom)
316 (void)fprintf(stderr,
"freerdp_areApplicationDetailsCustomized returned %d, expected%d\n",
325WINPR_ATTR_MALLOC(free, 1)
327static
char* getWinPRConfig(BOOL system, const
char* vendor, const
char* product, SSIZE_T version,
328 const
char* filename)
330 eKnownPathTypes
id = system ? KNOWN_PATH_SYSTEM_CONFIG_HOME : KNOWN_PATH_XDG_CONFIG_HOME;
331 char* config = GetKnownSubPathV(
id,
"%s", vendor);
337 base = GetCombinedPathV(config,
"%s", product);
339 base = GetCombinedPathV(config,
"%s%" PRIdz, product, version);
347 char* path = GetCombinedPath(base, filename);
353static bool checkWinPRConfig(
const char* what, BOOL system,
const char* vendor,
const char* product,
354 SSIZE_T version,
const char* filename)
358 char* cmp = getWinPRConfig(system, vendor, product, version, filename);
362 const bool rc = strcmp(what, cmp) == 0;
368static bool checkWinPRResults(
bool custom,
const char* vendor,
const char* product, SSIZE_T version)
370 const char* cvendor = winpr_getApplicationDetailsVendor();
371 const char* cproduct = winpr_getApplicationDetailsProduct();
372 const SSIZE_T cversion = winpr_getApplicationDetailsVersion();
376#if !defined(WITH_RESOURCE_VERSIONING)
381 if (strcmp(cvendor, vendor) != 0)
383 (void)fprintf(stderr,
"winpr_getApplicationDetailsVendor returned '%s', expected '%s'\n",
387 if (strcmp(cvendor, vendor) != 0)
389 (void)fprintf(stderr,
"winpr_getApplicationDetailsProduct returned '%s', expected '%s'\n",
393 if (cversion != version)
396 stderr,
"winpr_getApplicationDetailsVersion returned %" PRIdz
", expected %" PRIdz
"\n",
402 char* sys = winpr_GetConfigFilePath(TRUE, NULL);
403 const bool rc = checkWinPRConfig(sys, TRUE, vendor, product, version, NULL);
409 char* sys = winpr_GetConfigFilePath(TRUE,
"systest");
410 const bool rc = checkWinPRConfig(sys, TRUE, vendor, product, version,
"systest");
416 char* sys = winpr_GetConfigFilePath(FALSE, NULL);
417 const bool rc = checkWinPRConfig(sys, FALSE, vendor, product, version, NULL);
423 char* sys = winpr_GetConfigFilePath(FALSE,
"usertest");
424 const bool rc = checkWinPRConfig(sys, FALSE, vendor, product, version,
"usertest");
433int TestUtils(WINPR_ATTR_UNUSED
int argc, WINPR_ATTR_UNUSED
char* argv[])
437 if (!checkWinPRResults(
false, WINPR_VENDOR_STRING, WINPR_PRODUCT_STRING, WINPR_VERSION_MAJOR))
442 if (!checkFreeRDPResults(
false, FREERDP_VENDOR_STRING, FREERDP_PRODUCT_STRING,
443 FREERDP_VERSION_MAJOR))
449 for (
size_t x = 0; x < ARRAYSIZE(tests); x++)
451 const test_case_t* cur = &tests[x];
453 if (!freerdp_setApplicationDetails(cur->vendor, cur->product, cur->version))
455 (void)fprintf(stderr,
"freerdp_setApplicationDetails(%s, %s, %" PRIdz
") failed\n",
456 cur->vendor, cur->product, cur->version);
463 const char separator = PathGetSeparatorA(PATH_STYLE_NATIVE);
464#if defined(BUILD_TESTING_INTERNAL)
465 char* wvendor = freerdp_getApplicatonDetailsCombined(separator);
467 char* wvendor = create(cur->vendor, cur->product, cur->version, separator);
474 const BOOL wrc = checkWinPRResults(
true, wvendor,
"WinPR", -1);
481 if (!checkFreeRDPResults(
true, cur->vendor, cur->product, cur->version))
490 printf(
"%s: result %d\n", __func__, rc);