Browse Source

Use canonical reaction and answer payloads in feedback tests

master
evgeny 5 days ago
parent
commit
ef476bf4e2
  1. 13
      tests/test_chat_feedback.c

13
tests/test_chat_feedback.c

@ -70,7 +70,7 @@ int main(void) {
puts("PASS: message identity is deterministic and binds channel, timestamp and signature");
uint64_t ver; struct chat_feedback_record first, second, cancelled, actual;
uint8_t a[] = {1}, b[] = {1, 2};
uint8_t a[] = {1, 0}, b[] = {2, 0, 1}, answer_data[] = {1, 0, 0, 0};
assert(chat_feedback_set(&source, "1001", message, CHAT_FEEDBACK_REACTION, a, sizeof(a), &ver) == 1 && ver == 1);
assert(chat_feedback_get(&source, "1001", message, source.node_id, CHAT_FEEDBACK_REACTION, &first) == 1);
int saved_events = events;
@ -98,17 +98,18 @@ int main(void) {
puts("PASS: signature binds version, channel and author; rejection preserves tree and events");
struct chat_feedback_record low = first, high = first;
low.ver = high.ver = 4; low.data[0] = 3; high.data[0] = 4;
low.ver = high.ver = 4; low.data[1] = 3; high.data[1] = 4;
sign_record(&source, 1001, &low); sign_record(&source, 1001, &high);
assert(chat_feedback_apply(&source, "1001", &low) == 1 && chat_feedback_apply(&source, "1001", &high) == 1);
assert(chat_feedback_apply(&target, "1001", &high) == 1 && chat_feedback_apply(&target, "1001", &low) == 0);
root(&source, expected); root(&target, received); assert(!memcmp(expected, received, 32));
assert(chat_feedback_set(&source, "1001", message, CHAT_FEEDBACK_ANSWER, b, sizeof(b), &ver) == 1 && ver == 1);
assert(chat_feedback_set(&source, "1001", message, CHAT_FEEDBACK_ANSWER, answer_data, sizeof(answer_data), &ver) == 1 && ver == 1);
puts("PASS: equal-version conflicts converge in both orders; answer and reaction have independent versions");
struct chat_feedback_record newer = high, answer = first;
newer.ver = 5; newer.data[0] = 5; sign_record(&source, 1001, &newer);
answer.kind = CHAT_FEEDBACK_ANSWER; answer.ver = 2; sign_record(&source, 1001, &answer);
newer.ver = 5; newer.data[1] = 5; sign_record(&source, 1001, &newer);
answer.kind = CHAT_FEEDBACK_ANSWER; answer.ver = 2; answer.data_len = sizeof(answer_data);
memcpy(answer.data, answer_data, sizeof(answer_data)); sign_record(&source, 1001, &answer);
uint8_t page[2 + 2 * FB_WIRE_MAX]; page[0] = 0; page[1] = 2;
int n = fb_encode(&newer, page + 2); assert(n > 0);
int m = fb_encode(&answer, page + 2 + n); assert(m > 0);
@ -132,7 +133,7 @@ int main(void) {
&cursor, page, &bytes, &next, &more) == 0 && !more);
assert(bytes >= 2 + FB_FIXED_SIZE && page[1] >= 1);
struct chat_feedback_record decoded; assert(fb_decode(page + 2, bytes - 2, &decoded) > 0);
assert(decoded.ver == 5 && decoded.data[0] == 5);
assert(decoded.ver == 5 && decoded.data[1] == 5);
assert(chat_feedback_set(&target, "1001", message, CHAT_FEEDBACK_REACTION, NULL, 0, &ver) == 1 && ver == 1);
assert(chat_feedback_set(&target, "1001", message, CHAT_FEEDBACK_REACTION, a, sizeof(a), &ver) == 1 && ver == 2);
assert(chat_feedback_set(&target, "1001", message, CHAT_FEEDBACK_REACTION, NULL, 0, &ver) == 1 && ver == 3);

Loading…
Cancel
Save