Skip to content

Commit dc329c2

Browse files
committed
Add transport test that validates emitted catalog JSON content
1 parent 50274c1 commit dc329c2

1 file changed

Lines changed: 53 additions & 0 deletions

File tree

tests/moqt_session_test.cpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -960,6 +960,59 @@ int main() {
960960
}
961961
}
962962

963+
{
964+
MockTransport transport;
965+
transport.reads[0].push_back(encode_server_setup_message({
966+
.draft = DraftVersion::kDraft14,
967+
.max_request_id = 8,
968+
}));
969+
transport.reads[0].push_back(encode_publish_namespace_ok_message(DraftVersion::kDraft14, 0));
970+
transport.reads[0].push_back(encode_publish_ok_message(DraftVersion::kDraft14, 2, 1));
971+
transport.reads[0].push_back(encode_subscribe_message(3, kTestTrackNamespace, "vide_1", 0));
972+
MoqtSession session(transport, std::string(kTestTrackNamespace), false, true);
973+
974+
auto status = session.connect(endpoint, tls);
975+
ok &= expect(status.ok, "expected catalog-content session connect to succeed");
976+
977+
PublishPlan catalog_content_plan = make_span_backed_plan(DraftVersion::kDraft14);
978+
const std::string catalog_text =
979+
"{\"version\":1,\"format\":\"cmsf\",\"tracks\":[{\"name\":\"vide_1\",\"initData\":\"AAAA\"}]}";
980+
catalog_content_plan.objects[0].payload = ByteSpan{.offset = 0, .size = catalog_text.size()};
981+
catalog_content_plan.objects[1].payload = ByteSpan{.offset = catalog_text.size(), .size = 3};
982+
std::vector<std::uint8_t> catalog_source_bytes(catalog_text.begin(), catalog_text.end());
983+
catalog_source_bytes.insert(catalog_source_bytes.end(), {'V', 'I', 'D'});
984+
const PublishPlan materialized = materialize_publish_plan(catalog_content_plan, catalog_source_bytes);
985+
986+
status = session.publish(materialized);
987+
ok &= expect(status.ok, "expected publish to succeed with catalog content validation");
988+
ok &= expect(transport.writes.size() >= 4,
989+
"expected catalog-content flow to emit catalog object stream");
990+
if (transport.writes.size() >= 4) {
991+
std::uint64_t stream_type = 0;
992+
std::uint64_t track_alias = 0;
993+
std::uint64_t group_id = 0;
994+
std::uint64_t object_id_delta = 0;
995+
std::uint64_t payload_length = 0;
996+
std::vector<std::uint8_t> payload;
997+
ok &= expect(
998+
decode_object_stream_fields(transport.writes[3].bytes,
999+
stream_type,
1000+
track_alias,
1001+
group_id,
1002+
object_id_delta,
1003+
payload_length,
1004+
payload),
1005+
"expected catalog-content object stream fields to decode");
1006+
const std::string served_catalog(payload.begin(), payload.end());
1007+
ok &= expect(served_catalog.find("\"format\":\"cmsf\"") != std::string::npos,
1008+
"expected served catalog payload to include cmsf format");
1009+
ok &= expect(served_catalog.find("\"name\":\"vide_1\"") != std::string::npos,
1010+
"expected served catalog payload to include vide_1 track");
1011+
ok &= expect(served_catalog.find("\"initData\":\"AAAA\"") != std::string::npos,
1012+
"expected served catalog payload to include initData");
1013+
}
1014+
}
1015+
9631016
{
9641017
MockTransport transport;
9651018
transport.reads[0].push_back(encode_server_setup_message({

0 commit comments

Comments
 (0)