|
|
|
|
@ -38,6 +38,7 @@
|
|
|
|
|
#include "asterisk/format_cap.h"
|
|
|
|
|
#include "asterisk/format_cache.h"
|
|
|
|
|
#include "asterisk/channel.h"
|
|
|
|
|
#include "asterisk/uuid.h"
|
|
|
|
|
|
|
|
|
|
AST_TEST_DEFINE(stream_create)
|
|
|
|
|
{
|
|
|
|
|
@ -224,6 +225,70 @@ AST_TEST_DEFINE(stream_set_state)
|
|
|
|
|
return AST_TEST_PASS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AST_TEST_DEFINE(stream_metadata)
|
|
|
|
|
{
|
|
|
|
|
RAII_VAR(struct ast_stream *, stream, NULL, ast_stream_free);
|
|
|
|
|
char track_label[AST_UUID_STR_LEN + 1];
|
|
|
|
|
const char *stream_track_label;
|
|
|
|
|
int rc;
|
|
|
|
|
|
|
|
|
|
switch (cmd) {
|
|
|
|
|
case TEST_INIT:
|
|
|
|
|
info->name = "stream_metadata";
|
|
|
|
|
info->category = "/main/stream/";
|
|
|
|
|
info->summary = "stream metadata unit test";
|
|
|
|
|
info->description =
|
|
|
|
|
"Test that metadata operations on a stream works";
|
|
|
|
|
return AST_TEST_NOT_RUN;
|
|
|
|
|
case TEST_EXECUTE:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
stream = ast_stream_alloc("test", AST_MEDIA_TYPE_AUDIO);
|
|
|
|
|
if (!stream) {
|
|
|
|
|
ast_test_status_update(test, "Failed to create media stream given proper arguments\n");
|
|
|
|
|
return AST_TEST_FAIL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
stream_track_label = ast_stream_get_metadata(stream, "AST_STREAM_METADATA_TRACK_LABEL");
|
|
|
|
|
if (stream_track_label) {
|
|
|
|
|
ast_test_status_update(test, "New stream HAD a track label\n");
|
|
|
|
|
return AST_TEST_FAIL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ast_uuid_generate_str(track_label, sizeof(track_label));
|
|
|
|
|
rc = ast_stream_set_metadata(stream, "AST_STREAM_METADATA_TRACK_LABEL", track_label);
|
|
|
|
|
if (rc != 0) {
|
|
|
|
|
ast_test_status_update(test, "Failed to add track label\n");
|
|
|
|
|
return AST_TEST_FAIL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
stream_track_label = ast_stream_get_metadata(stream, "AST_STREAM_METADATA_TRACK_LABEL");
|
|
|
|
|
if (!stream_track_label) {
|
|
|
|
|
ast_test_status_update(test, "Changed stream does not have a track label\n");
|
|
|
|
|
return AST_TEST_FAIL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (strcmp(stream_track_label, track_label) != 0) {
|
|
|
|
|
ast_test_status_update(test, "Changed stream did not return same track label\n");
|
|
|
|
|
return AST_TEST_FAIL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
rc = ast_stream_set_metadata(stream, "AST_STREAM_METADATA_TRACK_LABEL", NULL);
|
|
|
|
|
if (rc != 0) {
|
|
|
|
|
ast_test_status_update(test, "Failed to remove track label\n");
|
|
|
|
|
return AST_TEST_FAIL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
stream_track_label = ast_stream_get_metadata(stream, "AST_STREAM_METADATA_TRACK_LABEL");
|
|
|
|
|
if (stream_track_label) {
|
|
|
|
|
ast_test_status_update(test, "Changed stream still had a track label after we removed it\n");
|
|
|
|
|
return AST_TEST_FAIL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return AST_TEST_PASS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AST_TEST_DEFINE(stream_topology_create)
|
|
|
|
|
{
|
|
|
|
|
RAII_VAR(struct ast_stream_topology *, topology, NULL, ast_stream_topology_free);
|
|
|
|
|
@ -254,6 +319,11 @@ AST_TEST_DEFINE(stream_topology_clone)
|
|
|
|
|
RAII_VAR(struct ast_stream_topology *, topology, NULL, ast_stream_topology_free);
|
|
|
|
|
RAII_VAR(struct ast_stream_topology *, cloned, NULL, ast_stream_topology_free);
|
|
|
|
|
struct ast_stream *audio_stream, *video_stream;
|
|
|
|
|
char audio_track_label[AST_UUID_STR_LEN + 1];
|
|
|
|
|
char video_track_label[AST_UUID_STR_LEN + 1];
|
|
|
|
|
const char *original_track_label;
|
|
|
|
|
const char *cloned_track_label;
|
|
|
|
|
int rc;
|
|
|
|
|
|
|
|
|
|
switch (cmd) {
|
|
|
|
|
case TEST_INIT:
|
|
|
|
|
@ -279,6 +349,13 @@ AST_TEST_DEFINE(stream_topology_clone)
|
|
|
|
|
return AST_TEST_FAIL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ast_uuid_generate_str(audio_track_label, sizeof(audio_track_label));
|
|
|
|
|
rc = ast_stream_set_metadata(audio_stream, "AST_STREAM_METADATA_TRACK_LABEL", audio_track_label);
|
|
|
|
|
if (rc != 0) {
|
|
|
|
|
ast_test_status_update(test, "Failed to add track label\n");
|
|
|
|
|
return AST_TEST_FAIL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ast_stream_topology_append_stream(topology, audio_stream) == -1) {
|
|
|
|
|
ast_test_status_update(test, "Failed to append valid audio stream to stream topology\n");
|
|
|
|
|
ast_stream_free(audio_stream);
|
|
|
|
|
@ -291,6 +368,13 @@ AST_TEST_DEFINE(stream_topology_clone)
|
|
|
|
|
return AST_TEST_FAIL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ast_uuid_generate_str(video_track_label, sizeof(video_track_label));
|
|
|
|
|
rc = ast_stream_set_metadata(video_stream, "AST_STREAM_METADATA_TRACK_LABEL", video_track_label);
|
|
|
|
|
if (rc != 0) {
|
|
|
|
|
ast_test_status_update(test, "Failed to add track label\n");
|
|
|
|
|
return AST_TEST_FAIL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ast_stream_topology_append_stream(topology, video_stream) == -1) {
|
|
|
|
|
ast_test_status_update(test, "Failed to append valid video stream to stream topology\n");
|
|
|
|
|
ast_stream_free(video_stream);
|
|
|
|
|
@ -313,11 +397,45 @@ AST_TEST_DEFINE(stream_topology_clone)
|
|
|
|
|
return AST_TEST_FAIL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
original_track_label = ast_stream_get_metadata(ast_stream_topology_get_stream(topology, 0),
|
|
|
|
|
"AST_STREAM_METADATA_TRACK_LABEL");
|
|
|
|
|
if (!original_track_label) {
|
|
|
|
|
ast_test_status_update(test, "Original topology stream 0 does not contain metadata\n");
|
|
|
|
|
return AST_TEST_FAIL;
|
|
|
|
|
}
|
|
|
|
|
cloned_track_label = ast_stream_get_metadata(ast_stream_topology_get_stream(cloned, 0),
|
|
|
|
|
"AST_STREAM_METADATA_TRACK_LABEL");
|
|
|
|
|
if (!cloned_track_label) {
|
|
|
|
|
ast_test_status_update(test, "Cloned topology stream 0 does not contain metadata\n");
|
|
|
|
|
return AST_TEST_FAIL;
|
|
|
|
|
}
|
|
|
|
|
if (strcmp(original_track_label, cloned_track_label) != 0) {
|
|
|
|
|
ast_test_status_update(test, "Cloned topology stream 0 track label was not the same as the original\n");
|
|
|
|
|
return AST_TEST_FAIL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ast_stream_get_type(ast_stream_topology_get_stream(cloned, 1)) != ast_stream_get_type(ast_stream_topology_get_stream(topology, 1))) {
|
|
|
|
|
ast_test_status_update(test, "Cloned video stream does not contain same type as original\n");
|
|
|
|
|
return AST_TEST_FAIL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
original_track_label = ast_stream_get_metadata(ast_stream_topology_get_stream(topology, 1),
|
|
|
|
|
"AST_STREAM_METADATA_TRACK_LABEL");
|
|
|
|
|
if (!original_track_label) {
|
|
|
|
|
ast_test_status_update(test, "Original topology stream 1 does not contain metadata\n");
|
|
|
|
|
return AST_TEST_FAIL;
|
|
|
|
|
}
|
|
|
|
|
cloned_track_label = ast_stream_get_metadata(ast_stream_topology_get_stream(cloned, 1),
|
|
|
|
|
"AST_STREAM_METADATA_TRACK_LABEL");
|
|
|
|
|
if (!cloned_track_label) {
|
|
|
|
|
ast_test_status_update(test, "Cloned topology stream 1 does not contain metadata\n");
|
|
|
|
|
return AST_TEST_FAIL;
|
|
|
|
|
}
|
|
|
|
|
if (strcmp(original_track_label, cloned_track_label) != 0) {
|
|
|
|
|
ast_test_status_update(test, "Cloned topology stream 1 track label was not the same as the original\n");
|
|
|
|
|
return AST_TEST_FAIL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return AST_TEST_PASS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -2139,6 +2257,7 @@ static int unload_module(void)
|
|
|
|
|
AST_TEST_UNREGISTER(stream_set_type);
|
|
|
|
|
AST_TEST_UNREGISTER(stream_set_formats);
|
|
|
|
|
AST_TEST_UNREGISTER(stream_set_state);
|
|
|
|
|
AST_TEST_UNREGISTER(stream_metadata);
|
|
|
|
|
AST_TEST_UNREGISTER(stream_topology_create);
|
|
|
|
|
AST_TEST_UNREGISTER(stream_topology_clone);
|
|
|
|
|
AST_TEST_UNREGISTER(stream_topology_clone);
|
|
|
|
|
@ -2169,6 +2288,7 @@ static int load_module(void)
|
|
|
|
|
AST_TEST_REGISTER(stream_set_type);
|
|
|
|
|
AST_TEST_REGISTER(stream_set_formats);
|
|
|
|
|
AST_TEST_REGISTER(stream_set_state);
|
|
|
|
|
AST_TEST_REGISTER(stream_metadata);
|
|
|
|
|
AST_TEST_REGISTER(stream_topology_create);
|
|
|
|
|
AST_TEST_REGISTER(stream_topology_clone);
|
|
|
|
|
AST_TEST_REGISTER(stream_topology_append_stream);
|
|
|
|
|
|