You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.7 KiB
73 lines
1.7 KiB
/** |
|
* @file test_utils.h |
|
* @brief Utility functions for cross-platform tests |
|
*/ |
|
|
|
#ifndef TEST_UTILS_H |
|
#define TEST_UTILS_H |
|
|
|
#include "../lib/platform_compat.h" |
|
#include <stdio.h> |
|
#include <stdlib.h> |
|
#include <string.h> |
|
|
|
#ifdef _WIN32 |
|
#include <windows.h> |
|
#include <direct.h> |
|
|
|
// Windows temp directory buffer |
|
static char test_temp_dir[MAX_PATH]; |
|
|
|
// Cross-platform mkdtemp for Windows |
|
static inline int test_mkdtemp(char *template_str) { |
|
char tmp_path[MAX_PATH]; |
|
GetTempPathA(MAX_PATH, tmp_path); |
|
|
|
// Generate unique directory name |
|
srand((unsigned int)GetTickCount()); |
|
int attempts = 0; |
|
while (attempts < 100) { |
|
snprintf(test_temp_dir, sizeof(test_temp_dir), "%s\\utun_test_%08x", |
|
tmp_path, (unsigned int)rand()); |
|
if (_mkdir(test_temp_dir) == 0) { |
|
// Copy path back to caller's buffer if provided |
|
if (template_str) { |
|
size_t len = strlen(test_temp_dir); |
|
memcpy(template_str, test_temp_dir, len + 1); // Include null terminator |
|
} |
|
return 0; // Success |
|
} |
|
attempts++; |
|
} |
|
return -1; // Failed after 100 attempts |
|
} |
|
|
|
// Cross-platform unlink for Windows |
|
static inline int test_unlink(const char *path) { |
|
return _unlink(path); |
|
} |
|
|
|
// Cross-platform rmdir for Windows |
|
static inline int test_rmdir(const char *path) { |
|
return _rmdir(path); |
|
} |
|
|
|
#else |
|
// Linux/macOS - use standard functions |
|
#include <unistd.h> |
|
|
|
static inline int test_mkdtemp(char *template_str) { |
|
return (mkdtemp(template_str) == NULL) ? -1 : 0; |
|
} |
|
|
|
static inline int test_unlink(const char *path) { |
|
return unlink(path); |
|
} |
|
|
|
static inline int test_rmdir(const char *path) { |
|
return rmdir(path); |
|
} |
|
|
|
#endif |
|
|
|
#endif // TEST_UTILS_H
|
|
|