mirror of
https://github.com/logos-storage/easylibstorage.git
synced 2026-02-10 03:33:07 +00:00
203 lines
6.2 KiB
C
203 lines
6.2 KiB
C
#include "easystorage.h"
|
|
|
|
#include <assert.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#define RET_OK 0
|
|
#define RET_ERR 1
|
|
|
|
static int tests_run = 0;
|
|
static int tests_passed = 0;
|
|
|
|
#define RUN_TEST(fn) \
|
|
do { \
|
|
tests_run++; \
|
|
printf(" %-30s", #fn); \
|
|
fn(); \
|
|
tests_passed++; \
|
|
printf(" OK\n"); \
|
|
} while (0)
|
|
|
|
static node_config default_config(void) {
|
|
node_config cfg = {0};
|
|
cfg.api_port = 8080;
|
|
cfg.disc_port = 8090;
|
|
cfg.data_dir = "./test-data";
|
|
cfg.log_level = "WARN";
|
|
cfg.bootstrap_node = NULL;
|
|
return cfg;
|
|
}
|
|
|
|
FILE *write_to_temp(const char *contents) {
|
|
FILE *fp = tmpfile();
|
|
assert(fp != NULL);
|
|
assert(fwrite(contents, 1, strlen(contents), fp) == strlen(contents));
|
|
assert(fseek(fp, 0, SEEK_SET) == 0);
|
|
return fp;
|
|
}
|
|
|
|
// --- Tests ---
|
|
|
|
static void test_new(void) {
|
|
node_config cfg = default_config();
|
|
cfg.bootstrap_node = "spr:abc123";
|
|
STORAGE_NODE node = e_storage_new(cfg);
|
|
assert(node != NULL);
|
|
}
|
|
|
|
static void test_new_defaults(void) {
|
|
node_config cfg = {0};
|
|
cfg.api_port = 9000;
|
|
cfg.disc_port = 9010;
|
|
STORAGE_NODE node = e_storage_new(cfg);
|
|
assert(node != NULL);
|
|
}
|
|
|
|
static void test_start(void) {
|
|
node_config cfg = default_config();
|
|
STORAGE_NODE node = e_storage_new(cfg);
|
|
assert(node != NULL);
|
|
int ret = e_storage_start(node);
|
|
assert(ret == RET_OK);
|
|
}
|
|
|
|
static void test_start_null(void) {
|
|
int ret = e_storage_start(NULL);
|
|
assert(ret == RET_ERR);
|
|
}
|
|
|
|
static void test_stop(void) {
|
|
node_config cfg = default_config();
|
|
STORAGE_NODE node = e_storage_new(cfg);
|
|
assert(node != NULL);
|
|
e_storage_start(node);
|
|
int ret = e_storage_stop(node);
|
|
assert(ret == RET_OK);
|
|
}
|
|
|
|
static void test_destroy(void) {
|
|
node_config cfg = default_config();
|
|
STORAGE_NODE node = e_storage_new(cfg);
|
|
assert(node != NULL);
|
|
int ret = e_storage_destroy(node);
|
|
assert(ret == RET_OK);
|
|
}
|
|
|
|
static void test_destroy_null(void) {
|
|
int ret = e_storage_destroy(NULL);
|
|
assert(ret == RET_ERR);
|
|
}
|
|
|
|
static void test_upload(void) {
|
|
node_config cfg = default_config();
|
|
STORAGE_NODE node = e_storage_new(cfg);
|
|
assert(node != NULL);
|
|
e_storage_start(node);
|
|
|
|
char *cid = e_storage_upload(node, "/tmp/test.txt", NULL);
|
|
assert(cid != NULL);
|
|
assert(strlen(cid) > 0);
|
|
free(cid);
|
|
}
|
|
|
|
static void test_upload_null(void) {
|
|
char *cid = e_storage_upload(NULL, "/tmp/test.txt", NULL);
|
|
assert(cid == NULL);
|
|
}
|
|
|
|
static void test_download(void) {
|
|
node_config cfg = default_config();
|
|
STORAGE_NODE node = e_storage_new(cfg);
|
|
assert(node != NULL);
|
|
e_storage_start(node);
|
|
|
|
int ret = e_storage_download(node, "zDvZRwzmSomeCid", "/tmp/out.dat", NULL);
|
|
assert(ret == RET_OK);
|
|
}
|
|
|
|
static void test_download_null(void) {
|
|
int ret = e_storage_download(NULL, "zDvZRwzmSomeCid", "/tmp/out.dat", NULL);
|
|
assert(ret == RET_ERR);
|
|
}
|
|
|
|
static void test_get_should_get_node_spr(void) {
|
|
node_config cfg = default_config();
|
|
STORAGE_NODE node = e_storage_new(cfg);
|
|
assert(node != NULL);
|
|
assert(e_storage_start(node) == RET_OK);
|
|
|
|
const char *sprprefix = "spr:CiUIAhIhA";
|
|
const char *spr = e_storage_spr(node);
|
|
assert(spr != NULL);
|
|
assert(strlen(spr) > 0);
|
|
assert(strncmp(sprprefix, spr, strlen(sprprefix)) == 0);
|
|
}
|
|
|
|
static void test_full_lifecycle(void) {
|
|
node_config cfg = default_config();
|
|
cfg.bootstrap_node = "spr:node1";
|
|
|
|
STORAGE_NODE node = e_storage_new(cfg);
|
|
assert(node != NULL);
|
|
|
|
assert(e_storage_start(node) == RET_OK);
|
|
|
|
char *cid = e_storage_upload(node, "/tmp/lifecycle.txt", NULL);
|
|
assert(cid != NULL);
|
|
assert(strlen(cid) > 0);
|
|
|
|
assert(e_storage_download(node, cid, "/tmp/lifecycle_out.dat", NULL) == RET_OK);
|
|
free(cid);
|
|
|
|
assert(e_storage_stop(node) == RET_OK);
|
|
assert(e_storage_destroy(node) == RET_OK);
|
|
}
|
|
|
|
static void test_should_read_configuration_file(void) {
|
|
const char *conf = "[easystorage] \n"
|
|
"bootstrap-node=spr:CiUIAhIhA-VlcoiRm02KyIzrcTP \n"
|
|
"data-dir=/home/user/data-dir \n"
|
|
"log-level=WARN \n"
|
|
"api-port=8081 \n"
|
|
"disc-port=8091 \n"
|
|
"nat=none \n";
|
|
|
|
node_config cfg = DEFAULT_STORAGE_NODE_CONFIG;
|
|
FILE *cfg_file = write_to_temp(conf);
|
|
assert(e_storage_read_config_file(cfg_file, &cfg) == RET_OK);
|
|
fclose(cfg_file);
|
|
|
|
assert(strcmp(cfg.bootstrap_node, "spr:CiUIAhIhA-VlcoiRm02KyIzrcTP") == 0);
|
|
assert(strcmp(cfg.data_dir, "/home/user/data-dir") == 0);
|
|
assert(strcmp(cfg.log_level, "WARN") == 0);
|
|
assert(cfg.api_port == 8081);
|
|
assert(cfg.disc_port == 8091);
|
|
assert(strcmp(cfg.nat, "none") == 0);
|
|
|
|
e_storage_free_config(&cfg);
|
|
}
|
|
|
|
int main(void) {
|
|
printf("Running easylibstorage tests...\n");
|
|
|
|
RUN_TEST(test_new);
|
|
RUN_TEST(test_new_defaults);
|
|
RUN_TEST(test_start);
|
|
RUN_TEST(test_start_null);
|
|
RUN_TEST(test_stop);
|
|
RUN_TEST(test_destroy);
|
|
RUN_TEST(test_destroy_null);
|
|
RUN_TEST(test_upload);
|
|
RUN_TEST(test_upload_null);
|
|
RUN_TEST(test_download);
|
|
RUN_TEST(test_download_null);
|
|
RUN_TEST(test_get_should_get_node_spr);
|
|
RUN_TEST(test_full_lifecycle);
|
|
RUN_TEST(test_should_read_configuration_file);
|
|
|
|
printf("\n%d/%d tests passed.\n", tests_passed, tests_run);
|
|
return tests_passed == tests_run ? 0 : 1;
|
|
}
|