82 lines
2.2 KiB
C
82 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.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;
|
|
}
|