Browse Source

Exercise separate conversations and codec format boundaries

master
evgeny 1 week ago
parent
commit
6ccf71b20d
  1. 9
      tests/test_attachment.c
  2. 6
      tests/test_attachment_send.c

9
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;
}

6
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;

Loading…
Cancel
Save