Skip to content

Commit ddc3cb6

Browse files
committed
Update unit test temporary directory handling for cross-platform compatibility
1 parent 6d6b63a commit ddc3cb6

File tree

2 files changed

+70
-62
lines changed

2 files changed

+70
-62
lines changed

Makefile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,9 @@ $(TARGET): $(C_OBJECTS) $(LLAMA_LIBS) | $(DIST_DIR)
330330
.PHONY: test
331331
test: $(BUILD_DEPS) $(TARGET) $(BUILD_DIR)/unittest
332332
@echo "Running unit tests..."
333-
@mkdir -p /tmp
333+
ifeq ($(PLATFORM),windows)
334+
@mkdir -p $(BUILD_DIR)/test_tmp
335+
endif
334336
@$(BUILD_DIR)/unittest
335337
@echo ""
336338
@echo "Testing extension loading..."

test/unittest.c

Lines changed: 67 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,16 @@
1414
#include <direct.h>
1515
#define mkdir_p(path) _mkdir(path)
1616
#define rmdir_p(path) _rmdir(path)
17+
#ifndef TEST_TMP_DIR
18+
#define TEST_TMP_DIR "build/test_tmp" // Windows: native APIs don't understand /tmp
19+
#endif
1720
#else
1821
#include <unistd.h>
1922
#define mkdir_p(path) mkdir(path, 0755)
2023
#define rmdir_p(path) rmdir(path)
24+
#ifndef TEST_TMP_DIR
25+
#define TEST_TMP_DIR "/tmp"
26+
#endif
2127
#endif
2228

2329
#include "dbmem-utils.h"
@@ -1041,7 +1047,7 @@ static int path_contains(scan_ctx_t *ctx, const char *substring) {
10411047

10421048
TEST(dbmem_dir_scan_empty_dir) {
10431049
// Create empty test directory
1044-
const char *test_dir = "/tmp/dbmem_test_empty";
1050+
const char *test_dir = TEST_TMP_DIR "/dbmem_test_empty";
10451051
rmdir_p(test_dir); // Remove if exists
10461052
mkdir_p(test_dir);
10471053

@@ -1057,8 +1063,8 @@ TEST(dbmem_dir_scan_empty_dir) {
10571063

10581064
TEST(dbmem_dir_scan_single_file) {
10591065
// Create test directory with one file
1060-
const char *test_dir = "/tmp/dbmem_test_single";
1061-
const char *test_file = "/tmp/dbmem_test_single/file.txt";
1066+
const char *test_dir = TEST_TMP_DIR "/dbmem_test_single";
1067+
const char *test_file = TEST_TMP_DIR "/dbmem_test_single/file.txt";
10621068

10631069
rmdir_p(test_dir);
10641070
remove_test_file(test_file);
@@ -1079,18 +1085,18 @@ TEST(dbmem_dir_scan_single_file) {
10791085

10801086
TEST(dbmem_dir_scan_multiple_files) {
10811087
// Create test directory with multiple files
1082-
const char *test_dir = "/tmp/dbmem_test_multi";
1088+
const char *test_dir = TEST_TMP_DIR "/dbmem_test_multi";
10831089

10841090
// Clean up first
1085-
remove("/tmp/dbmem_test_multi/a.txt");
1086-
remove("/tmp/dbmem_test_multi/b.txt");
1087-
remove("/tmp/dbmem_test_multi/c.md");
1091+
remove(TEST_TMP_DIR "/dbmem_test_multi/a.txt");
1092+
remove(TEST_TMP_DIR "/dbmem_test_multi/b.txt");
1093+
remove(TEST_TMP_DIR "/dbmem_test_multi/c.md");
10881094
rmdir_p(test_dir);
10891095

10901096
mkdir_p(test_dir);
1091-
create_test_file("/tmp/dbmem_test_multi/a.txt", "a");
1092-
create_test_file("/tmp/dbmem_test_multi/b.txt", "b");
1093-
create_test_file("/tmp/dbmem_test_multi/c.md", "c");
1097+
create_test_file(TEST_TMP_DIR "/dbmem_test_multi/a.txt", "a");
1098+
create_test_file(TEST_TMP_DIR "/dbmem_test_multi/b.txt", "b");
1099+
create_test_file(TEST_TMP_DIR "/dbmem_test_multi/c.md", "c");
10941100

10951101
scan_ctx_t ctx = {0};
10961102
int rc = dbmem_dir_scan(test_dir, scan_callback, &ctx);
@@ -1102,24 +1108,24 @@ TEST(dbmem_dir_scan_multiple_files) {
11021108
ASSERT(path_contains(&ctx, "c.md"));
11031109

11041110
free_scan_ctx(&ctx);
1105-
remove("/tmp/dbmem_test_multi/a.txt");
1106-
remove("/tmp/dbmem_test_multi/b.txt");
1107-
remove("/tmp/dbmem_test_multi/c.md");
1111+
remove(TEST_TMP_DIR "/dbmem_test_multi/a.txt");
1112+
remove(TEST_TMP_DIR "/dbmem_test_multi/b.txt");
1113+
remove(TEST_TMP_DIR "/dbmem_test_multi/c.md");
11081114
rmdir_p(test_dir);
11091115
}
11101116

11111117
TEST(dbmem_dir_scan_recursive) {
11121118
// Create nested directory structure
1113-
const char *base = "/tmp/dbmem_test_recursive";
1114-
const char *sub1 = "/tmp/dbmem_test_recursive/sub1";
1115-
const char *sub2 = "/tmp/dbmem_test_recursive/sub2";
1116-
const char *subsub = "/tmp/dbmem_test_recursive/sub1/subsub";
1119+
const char *base = TEST_TMP_DIR "/dbmem_test_recursive";
1120+
const char *sub1 = TEST_TMP_DIR "/dbmem_test_recursive/sub1";
1121+
const char *sub2 = TEST_TMP_DIR "/dbmem_test_recursive/sub2";
1122+
const char *subsub = TEST_TMP_DIR "/dbmem_test_recursive/sub1/subsub";
11171123

11181124
// Clean up first
1119-
remove("/tmp/dbmem_test_recursive/root.txt");
1120-
remove("/tmp/dbmem_test_recursive/sub1/file1.txt");
1121-
remove("/tmp/dbmem_test_recursive/sub1/subsub/deep.txt");
1122-
remove("/tmp/dbmem_test_recursive/sub2/file2.txt");
1125+
remove(TEST_TMP_DIR "/dbmem_test_recursive/root.txt");
1126+
remove(TEST_TMP_DIR "/dbmem_test_recursive/sub1/file1.txt");
1127+
remove(TEST_TMP_DIR "/dbmem_test_recursive/sub1/subsub/deep.txt");
1128+
remove(TEST_TMP_DIR "/dbmem_test_recursive/sub2/file2.txt");
11231129
rmdir_p(subsub);
11241130
rmdir_p(sub1);
11251131
rmdir_p(sub2);
@@ -1131,10 +1137,10 @@ TEST(dbmem_dir_scan_recursive) {
11311137
mkdir_p(sub2);
11321138
mkdir_p(subsub);
11331139

1134-
create_test_file("/tmp/dbmem_test_recursive/root.txt", "root");
1135-
create_test_file("/tmp/dbmem_test_recursive/sub1/file1.txt", "file1");
1136-
create_test_file("/tmp/dbmem_test_recursive/sub2/file2.txt", "file2");
1137-
create_test_file("/tmp/dbmem_test_recursive/sub1/subsub/deep.txt", "deep");
1140+
create_test_file(TEST_TMP_DIR "/dbmem_test_recursive/root.txt", "root");
1141+
create_test_file(TEST_TMP_DIR "/dbmem_test_recursive/sub1/file1.txt", "file1");
1142+
create_test_file(TEST_TMP_DIR "/dbmem_test_recursive/sub2/file2.txt", "file2");
1143+
create_test_file(TEST_TMP_DIR "/dbmem_test_recursive/sub1/subsub/deep.txt", "deep");
11381144

11391145
scan_ctx_t ctx = {0};
11401146
int rc = dbmem_dir_scan(base, scan_callback, &ctx);
@@ -1153,10 +1159,10 @@ TEST(dbmem_dir_scan_recursive) {
11531159
free_scan_ctx(&ctx);
11541160

11551161
// Cleanup
1156-
remove("/tmp/dbmem_test_recursive/root.txt");
1157-
remove("/tmp/dbmem_test_recursive/sub1/file1.txt");
1158-
remove("/tmp/dbmem_test_recursive/sub1/subsub/deep.txt");
1159-
remove("/tmp/dbmem_test_recursive/sub2/file2.txt");
1162+
remove(TEST_TMP_DIR "/dbmem_test_recursive/root.txt");
1163+
remove(TEST_TMP_DIR "/dbmem_test_recursive/sub1/file1.txt");
1164+
remove(TEST_TMP_DIR "/dbmem_test_recursive/sub1/subsub/deep.txt");
1165+
remove(TEST_TMP_DIR "/dbmem_test_recursive/sub2/file2.txt");
11601166
rmdir_p(subsub);
11611167
rmdir_p(sub1);
11621168
rmdir_p(sub2);
@@ -1165,15 +1171,15 @@ TEST(dbmem_dir_scan_recursive) {
11651171

11661172
TEST(dbmem_dir_scan_skips_hidden) {
11671173
// Create directory with hidden files (dot files)
1168-
const char *test_dir = "/tmp/dbmem_test_hidden";
1174+
const char *test_dir = TEST_TMP_DIR "/dbmem_test_hidden";
11691175

1170-
remove("/tmp/dbmem_test_hidden/visible.txt");
1171-
remove("/tmp/dbmem_test_hidden/.hidden");
1176+
remove(TEST_TMP_DIR "/dbmem_test_hidden/visible.txt");
1177+
remove(TEST_TMP_DIR "/dbmem_test_hidden/.hidden");
11721178
rmdir_p(test_dir);
11731179

11741180
mkdir_p(test_dir);
1175-
create_test_file("/tmp/dbmem_test_hidden/visible.txt", "visible");
1176-
create_test_file("/tmp/dbmem_test_hidden/.hidden", "hidden");
1181+
create_test_file(TEST_TMP_DIR "/dbmem_test_hidden/visible.txt", "visible");
1182+
create_test_file(TEST_TMP_DIR "/dbmem_test_hidden/.hidden", "hidden");
11771183

11781184
scan_ctx_t ctx = {0};
11791185
int rc = dbmem_dir_scan(test_dir, scan_callback, &ctx);
@@ -1184,25 +1190,25 @@ TEST(dbmem_dir_scan_skips_hidden) {
11841190
ASSERT(!path_contains(&ctx, ".hidden"));
11851191

11861192
free_scan_ctx(&ctx);
1187-
remove("/tmp/dbmem_test_hidden/visible.txt");
1188-
remove("/tmp/dbmem_test_hidden/.hidden");
1193+
remove(TEST_TMP_DIR "/dbmem_test_hidden/visible.txt");
1194+
remove(TEST_TMP_DIR "/dbmem_test_hidden/.hidden");
11891195
rmdir_p(test_dir);
11901196
}
11911197

11921198
TEST(dbmem_dir_scan_skips_hidden_dirs) {
11931199
// Create directory with hidden subdirectory
1194-
const char *test_dir = "/tmp/dbmem_test_hidden_dir";
1195-
const char *hidden_dir = "/tmp/dbmem_test_hidden_dir/.hidden_dir";
1200+
const char *test_dir = TEST_TMP_DIR "/dbmem_test_hidden_dir";
1201+
const char *hidden_dir = TEST_TMP_DIR "/dbmem_test_hidden_dir/.hidden_dir";
11961202

1197-
remove("/tmp/dbmem_test_hidden_dir/visible.txt");
1198-
remove("/tmp/dbmem_test_hidden_dir/.hidden_dir/secret.txt");
1203+
remove(TEST_TMP_DIR "/dbmem_test_hidden_dir/visible.txt");
1204+
remove(TEST_TMP_DIR "/dbmem_test_hidden_dir/.hidden_dir/secret.txt");
11991205
rmdir_p(hidden_dir);
12001206
rmdir_p(test_dir);
12011207

12021208
mkdir_p(test_dir);
12031209
mkdir_p(hidden_dir);
1204-
create_test_file("/tmp/dbmem_test_hidden_dir/visible.txt", "visible");
1205-
create_test_file("/tmp/dbmem_test_hidden_dir/.hidden_dir/secret.txt", "secret");
1210+
create_test_file(TEST_TMP_DIR "/dbmem_test_hidden_dir/visible.txt", "visible");
1211+
create_test_file(TEST_TMP_DIR "/dbmem_test_hidden_dir/.hidden_dir/secret.txt", "secret");
12061212

12071213
scan_ctx_t ctx = {0};
12081214
int rc = dbmem_dir_scan(test_dir, scan_callback, &ctx);
@@ -1213,8 +1219,8 @@ TEST(dbmem_dir_scan_skips_hidden_dirs) {
12131219
ASSERT(!path_contains(&ctx, "secret.txt"));
12141220

12151221
free_scan_ctx(&ctx);
1216-
remove("/tmp/dbmem_test_hidden_dir/visible.txt");
1217-
remove("/tmp/dbmem_test_hidden_dir/.hidden_dir/secret.txt");
1222+
remove(TEST_TMP_DIR "/dbmem_test_hidden_dir/visible.txt");
1223+
remove(TEST_TMP_DIR "/dbmem_test_hidden_dir/.hidden_dir/secret.txt");
12181224
rmdir_p(hidden_dir);
12191225
rmdir_p(test_dir);
12201226
}
@@ -1227,13 +1233,13 @@ TEST(dbmem_dir_scan_null_path) {
12271233
}
12281234

12291235
TEST(dbmem_dir_scan_null_callback) {
1230-
int rc = dbmem_dir_scan("/tmp", NULL, NULL);
1236+
int rc = dbmem_dir_scan(".", NULL, NULL); // Use current dir (exists on all platforms)
12311237
ASSERT_EQ(rc, -1);
12321238
}
12331239

12341240
TEST(dbmem_dir_scan_nonexistent) {
12351241
scan_ctx_t ctx = {0};
1236-
int rc = dbmem_dir_scan("/tmp/nonexistent_dir_12345", scan_callback, &ctx);
1242+
int rc = dbmem_dir_scan(TEST_TMP_DIR "/nonexistent_dir_12345", scan_callback, &ctx);
12371243
ASSERT_EQ(rc, -1);
12381244
free_scan_ctx(&ctx);
12391245
}
@@ -1248,49 +1254,49 @@ static int abort_scan_callback(const char *path, void *data) {
12481254

12491255
TEST(dbmem_dir_scan_callback_abort) {
12501256
// Create directory with multiple files
1251-
const char *test_dir = "/tmp/dbmem_test_abort";
1257+
const char *test_dir = TEST_TMP_DIR "/dbmem_test_abort";
12521258

1253-
remove("/tmp/dbmem_test_abort/a.txt");
1254-
remove("/tmp/dbmem_test_abort/b.txt");
1255-
remove("/tmp/dbmem_test_abort/c.txt");
1259+
remove(TEST_TMP_DIR "/dbmem_test_abort/a.txt");
1260+
remove(TEST_TMP_DIR "/dbmem_test_abort/b.txt");
1261+
remove(TEST_TMP_DIR "/dbmem_test_abort/c.txt");
12561262
rmdir_p(test_dir);
12571263

12581264
mkdir_p(test_dir);
1259-
create_test_file("/tmp/dbmem_test_abort/a.txt", "a");
1260-
create_test_file("/tmp/dbmem_test_abort/b.txt", "b");
1261-
create_test_file("/tmp/dbmem_test_abort/c.txt", "c");
1265+
create_test_file(TEST_TMP_DIR "/dbmem_test_abort/a.txt", "a");
1266+
create_test_file(TEST_TMP_DIR "/dbmem_test_abort/b.txt", "b");
1267+
create_test_file(TEST_TMP_DIR "/dbmem_test_abort/c.txt", "c");
12621268

12631269
int count = 0;
12641270
int rc = dbmem_dir_scan(test_dir, abort_scan_callback, &count);
12651271

12661272
ASSERT_EQ(rc, -1); // Should return error when callback aborts
12671273
ASSERT_EQ(count, 2); // Should have stopped after 2 files
12681274

1269-
remove("/tmp/dbmem_test_abort/a.txt");
1270-
remove("/tmp/dbmem_test_abort/b.txt");
1271-
remove("/tmp/dbmem_test_abort/c.txt");
1275+
remove(TEST_TMP_DIR "/dbmem_test_abort/a.txt");
1276+
remove(TEST_TMP_DIR "/dbmem_test_abort/b.txt");
1277+
remove(TEST_TMP_DIR "/dbmem_test_abort/c.txt");
12721278
rmdir_p(test_dir);
12731279
}
12741280

12751281
TEST(dbmem_dir_scan_trailing_slash) {
12761282
// Test with trailing slash in path
1277-
const char *test_dir = "/tmp/dbmem_test_slash";
1283+
const char *test_dir = TEST_TMP_DIR "/dbmem_test_slash";
12781284

1279-
remove("/tmp/dbmem_test_slash/file.txt");
1285+
remove(TEST_TMP_DIR "/dbmem_test_slash/file.txt");
12801286
rmdir_p(test_dir);
12811287

12821288
mkdir_p(test_dir);
1283-
create_test_file("/tmp/dbmem_test_slash/file.txt", "test");
1289+
create_test_file(TEST_TMP_DIR "/dbmem_test_slash/file.txt", "test");
12841290

12851291
scan_ctx_t ctx = {0};
1286-
int rc = dbmem_dir_scan("/tmp/dbmem_test_slash/", scan_callback, &ctx);
1292+
int rc = dbmem_dir_scan(TEST_TMP_DIR "/dbmem_test_slash/", scan_callback, &ctx);
12871293

12881294
ASSERT_EQ(rc, 0);
12891295
ASSERT_EQ(ctx.count, 1);
12901296
ASSERT(path_contains(&ctx, "file.txt"));
12911297

12921298
free_scan_ctx(&ctx);
1293-
remove("/tmp/dbmem_test_slash/file.txt");
1299+
remove(TEST_TMP_DIR "/dbmem_test_slash/file.txt");
12941300
rmdir_p(test_dir);
12951301
}
12961302

0 commit comments

Comments
 (0)