80 lines
2.7 KiB
C
80 lines
2.7 KiB
C
/*
|
|
* Didactyl Blossom tool argument validation tests.
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#include "../src/config.h"
|
|
#include "../src/tools/tools.h"
|
|
#include "../src/tools/tools_internal.h"
|
|
|
|
static int tests_run = 0;
|
|
static int tests_passed = 0;
|
|
|
|
#define TEST_ASSERT(cond, msg) do { \
|
|
tests_run++; \
|
|
if (cond) { tests_passed++; printf("✅ %s\n", msg); } \
|
|
else { printf("❌ %s\n", msg); } \
|
|
} while (0)
|
|
|
|
static int json_contains_error(const char* json, const char* needle) {
|
|
return json && strstr(json, "\"success\":false") && strstr(json, needle);
|
|
}
|
|
|
|
static int write_file_text(const char* path, const char* text) {
|
|
FILE* fp = fopen(path, "wb");
|
|
if (!fp) return -1;
|
|
size_t n = fwrite(text, 1, strlen(text), fp);
|
|
fclose(fp);
|
|
return (n == strlen(text)) ? 0 : -1;
|
|
}
|
|
|
|
int main(void) {
|
|
printf("Didactyl Blossom tool validation tests\n");
|
|
printf("======================================\n");
|
|
|
|
didactyl_config_t cfg;
|
|
memset(&cfg, 0, sizeof(cfg));
|
|
snprintf(cfg.tools.shell.working_directory, sizeof(cfg.tools.shell.working_directory), "%s", ".");
|
|
cfg.tools.blossom_max_upload_bytes = 16;
|
|
cfg.tools.blossom_max_download_bytes = 1024;
|
|
|
|
tools_context_t ctx;
|
|
memset(&ctx, 0, sizeof(ctx));
|
|
ctx.cfg = &cfg;
|
|
|
|
char* out = execute_blossom_upload(&ctx, "{\"server\":\"http://example.com\",\"file_path\":\"README.md\"}");
|
|
TEST_ASSERT(json_contains_error(out, "https://"), "blossom_upload rejects non-https server");
|
|
free(out);
|
|
|
|
const char* big_file = "tests/.tmp_blossom_big.txt";
|
|
if (write_file_text(big_file, "this payload is intentionally larger than 16 bytes") != 0) {
|
|
printf("❌ setup failed to create temp file\n");
|
|
return 1;
|
|
}
|
|
|
|
out = execute_blossom_upload(&ctx, "{\"server\":\"https://example.com\",\"file_path\":\"tests/.tmp_blossom_big.txt\"}");
|
|
TEST_ASSERT(json_contains_error(out, "max upload size"), "blossom_upload enforces configured upload max");
|
|
free(out);
|
|
|
|
const char* existing = "tests/.tmp_blossom_existing.txt";
|
|
if (write_file_text(existing, "already here") != 0) {
|
|
printf("❌ setup failed to create existing output file\n");
|
|
remove(big_file);
|
|
return 1;
|
|
}
|
|
|
|
out = execute_blossom_download(&ctx,
|
|
"{\"server\":\"https://example.com\",\"sha256\":\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"output_path\":\"tests/.tmp_blossom_existing.txt\"}");
|
|
TEST_ASSERT(json_contains_error(out, "output_path exists"), "blossom_download requires overwrite=true when file exists");
|
|
free(out);
|
|
|
|
remove(big_file);
|
|
remove(existing);
|
|
|
|
printf("\nSummary: %d/%d passed\n", tests_passed, tests_run);
|
|
return (tests_passed == tests_run) ? 0 : 1;
|
|
}
|