From 7f0845e50cbedb0f58c97efea63bb64ae1e4a0c5 Mon Sep 17 00:00:00 2001 From: evgeny Date: Tue, 27 Oct 2026 03:50:16 +0100 Subject: [PATCH] Check readback retries and refused acknowledgments keep feedback roots unchanged --- tests/test_chat_poll.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/test_chat_poll.c b/tests/test_chat_poll.c index d77955de..db351989 100644 --- a/tests/test_chat_poll.c +++ b/tests/test_chat_poll.c @@ -157,12 +157,16 @@ static void sql_faults(struct UTUN_INSTANCE* inst, const char* channel, const ch u_free(result); assert(message_count(inst, channel) == messages + (int)publish); snprintf(read, sizeof(read), "{\"cmd\":\"feedback\",\"ch\":\"%s\",\"message_id\":\"%s\"}", channel, acknowledged); + assert(!merkle_sync_read_hash(inst, MT_DATA_FEEDBACK, channel, 0, 0, before)); unsigned events = changed_events; result = command(inst, read, 0); u_free(result); - assert(message_count(inst, channel) == messages + (int)publish); + assert(message_count(inst, channel) == messages + (int)publish && changed_events == events); + assert(!merkle_sync_read_hash(inst, MT_DATA_FEEDBACK, channel, 0, 0, after) && !memcmp(before, after, 32)); } int messages = message_count(inst, channel); unsigned events = changed_events; + assert(!merkle_sync_read_hash(inst, MT_DATA_FEEDBACK, channel, 0, 0, before)); fail_ack_allocation = 1; result = command(inst, request, -1); u_free(result); assert(!fail_ack_allocation && changed_events == events && message_count(inst, channel) == messages); + assert(!merkle_sync_read_hash(inst, MT_DATA_FEEDBACK, channel, 0, 0, after) && !memcmp(before, after, 32)); } chat_event_set_handler(inst, NULL); printf("PASS: %u poll SQL faults,8 post-commit read failures,2 pre-commit allocation failures; state/events preserved, read-only retry, complete emoji text\n", cases);