amduat/tests/fed/test_fed_ingest.c
2026-01-18 11:25:39 +01:00

84 lines
2.2 KiB
C

#include "amduat/fed/ingest.h"
#include <stdio.h>
#include <string.h>
static amduat_reference_t make_ref(amduat_hash_id_t hash_id,
const uint8_t *bytes,
size_t len) {
return amduat_reference(hash_id, amduat_octets(bytes, len));
}
static amduat_fed_record_t make_record(uint32_t domain_id,
uint64_t logseq,
amduat_fed_record_type_t type,
amduat_reference_t ref) {
amduat_fed_record_t record;
memset(&record, 0, sizeof(record));
record.meta.domain_id = domain_id;
record.meta.visibility = 1;
record.meta.has_source = 0;
record.id.type = type;
record.id.ref = ref;
record.location.domain_id = domain_id;
record.location.ref = ref;
record.logseq = logseq;
record.snapshot_id = 1;
record.log_prefix = 10;
return record;
}
static int test_invalid_record(void) {
uint8_t key[] = {0x01};
amduat_fed_record_t record;
size_t error_index = 0;
record = make_record(1, 1, AMDUAT_FED_REC_ARTIFACT,
make_ref(1, key, sizeof(key)));
record.meta.visibility = 2;
if (amduat_fed_ingest_validate(&record, 1, &error_index, NULL) !=
AMDUAT_FED_INGEST_ERR_INVALID) {
fprintf(stderr, "expected invalid error\n");
return 1;
}
if (error_index != 0) {
fprintf(stderr, "expected error index 0\n");
return 1;
}
return 0;
}
static int test_conflicting_duplicate(void) {
uint8_t key[] = {0x02};
amduat_reference_t ref = make_ref(1, key, sizeof(key));
amduat_fed_record_t records[2];
size_t error_index = 0;
size_t conflict_index = 0;
records[0] = make_record(1, 1, AMDUAT_FED_REC_ARTIFACT, ref);
records[1] = make_record(1, 2, AMDUAT_FED_REC_ARTIFACT, ref);
if (amduat_fed_ingest_validate(records, 2, &error_index, &conflict_index) !=
AMDUAT_FED_INGEST_ERR_CONFLICT) {
fprintf(stderr, "expected conflict error\n");
return 1;
}
if (error_index != 1 || conflict_index != 0) {
fprintf(stderr, "unexpected conflict indices\n");
return 1;
}
return 0;
}
int main(void) {
if (test_invalid_record() != 0) {
return 1;
}
if (test_conflicting_duplicate() != 0) {
return 1;
}
return 0;
}