#include "amduat/fed/ingest.h" #include #include 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; }