From 6ccf71b20db92414d350afe70245fb9511280f3c Mon Sep 17 00:00:00 2001 From: evgeny Date: Thu, 1 Oct 2026 18:56:57 +0300 Subject: [PATCH] Exercise separate conversations and codec format boundaries --- tests/test_attachment.c | 9 ++++++++- tests/test_attachment_send.c | 6 +++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/tests/test_attachment.c b/tests/test_attachment.c index b9943dc6..dee371f9 100644 --- a/tests/test_attachment.c +++ b/tests/test_attachment.c @@ -36,6 +36,9 @@ int main(void) { REQUIRE(in.duration_ms == 1000 && strlen(in.waveform) == 100 && !attachment_validate(&in)); FILE* file = fopen(path, "rb"); REQUIRE(file != NULL); uint8_t header[12]; REQUIRE(fread(header, 1, 12, file) == 12); + uint32_t magic, rate; uint16_t channels, frame; + memcpy(&magic, header, 4); memcpy(&rate, header + 4, 4); memcpy(&channels, header + 8, 2); memcpy(&frame, header + 10, 2); + REQUIRE(magic == 0x5355504f && rate == 48000 && channels == 1 && frame == 960); opus_codec_decoder_t* decoder = opus_codec_decoder_create(48000, 1); REQUIRE(decoder != NULL); uint8_t packet[4000]; int16_t decoded[960]; unsigned frames = 0; for (;;) { @@ -45,7 +48,11 @@ int main(void) { REQUIRE(opus_codec_decode(decoder, packet, n, decoded, 960) == 960); frames++; } REQUIRE(frames == 50 && fgetc(file) == EOF); - fclose(file); remove(path); opus_codec_decoder_destroy(decoder); u_free(pcm); + fclose(file); remove(path); opus_codec_decoder_destroy(decoder); + REQUIRE(voice_file_encode(pcm, 23999, 48000, 1, 1, path, &in) < 0); + REQUIRE(voice_file_encode(pcm, 48000, 48000, 1, 3, path, &in) < 0); + REQUIRE(voice_file_encode(pcm, 48000, 44100, 1, 1, path, &in) < 0); + u_free(pcm); printf("test_attachment: strict metadata and shared Opus encode/decode PASS\n"); return 0; } diff --git a/tests/test_attachment_send.c b/tests/test_attachment_send.c index ef68be6d..701ed393 100644 --- a/tests/test_attachment_send.c +++ b/tests/test_attachment_send.c @@ -59,13 +59,17 @@ int main(void) { uint64_t peer_id = sc_derive_node_id_from_pubkey(peer.public_key); REQUIRE(!dm_start(inst, peer_id, peer.public_key, ed, "test", NULL)); snprintf(conv, sizeof(conv), "%llu", (unsigned long long)dm_derive_conv_id(inst->node_id, peer_id)); + REQUIRE(!sc_generate_keypair(&peer) && !sc_derive_ed25519_pubkey(peer.private_key, ed)); + peer_id = sc_derive_node_id_from_pubkey(peer.public_key); + REQUIRE(!dm_start(inst, peer_id, peer.public_key, ed, "other", NULL)); + char other[64]; snprintf(other, sizeof(other), "%llu", (unsigned long long)dm_derive_conv_id(inst->node_id, peer_id)); struct attachment_send_req* req = u_calloc(1, sizeof(*req)); REQUIRE(req); req->inst = inst; req->is_dm = 1; req->info.kind = ATTACHMENT_VOICE; req->preset = 1; snprintf(req->target, sizeof(req->target), "%s", conv); req->pcm = test.pcm; req->pcm_count = 48000; req->pcm_owner = &test; req->pcm_release = release_pcm; char active_target[64]; snprintf(active_target, sizeof(active_target), "%s", conv); attachment_send_trampoline(req); - snprintf(active_target, sizeof(active_target), "999"); /* Выбор GUI изменился до completion. */ + snprintf(active_target, sizeof(active_target), "%s", other); /* Выбор GUI изменился до completion. */ for (unsigned i = 0; i < 500 && count(inst) == 0; i++) uasync_poll(ua, 20); REQUIRE(count(inst) == 1 && test.released == 1 && test.release_in_worker && test.starts == 2 && test.ready == 2 && !test.failed); char expected[68], json[8192]; size_t length;