15976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org/*
25976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * libjingle
35976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * Copyright 2012 Google Inc.
45976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *
55976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * Redistribution and use in source and binary forms, with or without
65976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * modification, are permitted provided that the following conditions are met:
75976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *
85976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *  1. Redistributions of source code must retain the above copyright notice,
95976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *     this list of conditions and the following disclaimer.
105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *  2. Redistributions in binary form must reproduce the above copyright notice,
115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *     this list of conditions and the following disclaimer in the documentation
125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *     and/or other materials provided with the distribution.
135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *  3. The name of the author may not be used to endorse or promote products
145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *     derived from this software without specific prior written permission.
155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *
165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org */
275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/gunit.h"
295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/media/base/streamparams.h"
305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/media/base/testutils.h"
315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
3285a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgstatic const uint32 kSsrcs1[] = {1};
3385a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgstatic const uint32 kSsrcs2[] = {1, 2};
3485a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgstatic const uint32 kSsrcs3[] = {1, 2, 3};
3585a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgstatic const uint32 kRtxSsrcs3[] = {4, 5, 6};
365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgstatic cricket::StreamParams CreateStreamParamsWithSsrcGroup(
385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    const std::string& semantics, const uint32 ssrcs_in[], size_t len) {
395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::StreamParams stream;
405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  std::vector<uint32> ssrcs(ssrcs_in, ssrcs_in + len);
415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::SsrcGroup sg(semantics, ssrcs);
425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  stream.ssrcs = ssrcs;
435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  stream.ssrc_groups.push_back(sg);
445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  return stream;
455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}
465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(SsrcGroup, EqualNotEqual) {
485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::SsrcGroup ssrc_groups[] = {
4985a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org    cricket::SsrcGroup("ABC", MAKE_VECTOR(kSsrcs1)),
5085a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org    cricket::SsrcGroup("ABC", MAKE_VECTOR(kSsrcs2)),
5185a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org    cricket::SsrcGroup("Abc", MAKE_VECTOR(kSsrcs2)),
5285a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org    cricket::SsrcGroup("abc", MAKE_VECTOR(kSsrcs2)),
535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  };
545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  for (size_t i = 0; i < ARRAY_SIZE(ssrc_groups); ++i) {
565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    for (size_t j = 0; j < ARRAY_SIZE(ssrc_groups); ++j) {
575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      EXPECT_EQ((ssrc_groups[i] == ssrc_groups[j]), (i == j));
585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      EXPECT_EQ((ssrc_groups[i] != ssrc_groups[j]), (i != j));
595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    }
605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  }
615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}
625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(SsrcGroup, HasSemantics) {
6485a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  cricket::SsrcGroup sg1("ABC", MAKE_VECTOR(kSsrcs1));
655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_TRUE(sg1.has_semantics("ABC"));
665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
6785a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  cricket::SsrcGroup sg2("Abc", MAKE_VECTOR(kSsrcs1));
685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_FALSE(sg2.has_semantics("ABC"));
695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
7085a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  cricket::SsrcGroup sg3("abc", MAKE_VECTOR(kSsrcs1));
715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_FALSE(sg3.has_semantics("ABC"));
725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}
735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(SsrcGroup, ToString) {
7585a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  cricket::SsrcGroup sg1("ABC", MAKE_VECTOR(kSsrcs1));
765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_STREQ("{semantics:ABC;ssrcs:[1]}", sg1.ToString().c_str());
775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}
785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(StreamParams, CreateLegacy) {
805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  const uint32 ssrc = 7;
815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::StreamParams one_sp = cricket::StreamParams::CreateLegacy(ssrc);
825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_EQ(1U, one_sp.ssrcs.size());
835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_EQ(ssrc, one_sp.first_ssrc());
845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_TRUE(one_sp.has_ssrcs());
855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_TRUE(one_sp.has_ssrc(ssrc));
865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_FALSE(one_sp.has_ssrc(ssrc+1));
875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_FALSE(one_sp.has_ssrc_groups());
885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_EQ(0U, one_sp.ssrc_groups.size());
895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}
905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(StreamParams, HasSsrcGroup) {
925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::StreamParams sp =
9385a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org      CreateStreamParamsWithSsrcGroup("XYZ", kSsrcs2, ARRAY_SIZE(kSsrcs2));
945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_EQ(2U, sp.ssrcs.size());
9585a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  EXPECT_EQ(kSsrcs2[0], sp.first_ssrc());
965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_TRUE(sp.has_ssrcs());
9785a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  EXPECT_TRUE(sp.has_ssrc(kSsrcs2[0]));
9885a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  EXPECT_TRUE(sp.has_ssrc(kSsrcs2[1]));
995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_TRUE(sp.has_ssrc_group("XYZ"));
1005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_EQ(1U, sp.ssrc_groups.size());
1015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_EQ(2U, sp.ssrc_groups[0].ssrcs.size());
10285a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  EXPECT_EQ(kSsrcs2[0], sp.ssrc_groups[0].ssrcs[0]);
10385a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  EXPECT_EQ(kSsrcs2[1], sp.ssrc_groups[0].ssrcs[1]);
1045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}
1055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(StreamParams, GetSsrcGroup) {
1075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::StreamParams sp =
10885a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org      CreateStreamParamsWithSsrcGroup("XYZ", kSsrcs2, ARRAY_SIZE(kSsrcs2));
1095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_EQ(NULL, sp.get_ssrc_group("xyz"));
1105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_EQ(&sp.ssrc_groups[0], sp.get_ssrc_group("XYZ"));
1115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}
1125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(StreamParams, EqualNotEqual) {
1145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::StreamParams l1 = cricket::StreamParams::CreateLegacy(1);
1155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::StreamParams l2 = cricket::StreamParams::CreateLegacy(2);
1165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::StreamParams sg1 =
11785a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org      CreateStreamParamsWithSsrcGroup("ABC", kSsrcs1, ARRAY_SIZE(kSsrcs1));
1185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::StreamParams sg2 =
11985a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org      CreateStreamParamsWithSsrcGroup("ABC", kSsrcs2, ARRAY_SIZE(kSsrcs2));
1205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::StreamParams sg3 =
12185a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org      CreateStreamParamsWithSsrcGroup("Abc", kSsrcs2, ARRAY_SIZE(kSsrcs2));
1225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::StreamParams sg4 =
12385a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org      CreateStreamParamsWithSsrcGroup("abc", kSsrcs2, ARRAY_SIZE(kSsrcs2));
1245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::StreamParams sps[] = {l1, l2, sg1, sg2, sg3, sg4};
1255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  for (size_t i = 0; i < ARRAY_SIZE(sps); ++i) {
1275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    for (size_t j = 0; j < ARRAY_SIZE(sps); ++j) {
1285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      EXPECT_EQ((sps[i] == sps[j]), (i == j));
1295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      EXPECT_EQ((sps[i] != sps[j]), (i != j));
1305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    }
1315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  }
1325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}
1335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(StreamParams, FidFunctions) {
1355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  uint32 fid_ssrc;
1365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::StreamParams sp = cricket::StreamParams::CreateLegacy(1);
1385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_FALSE(sp.AddFidSsrc(10, 20));
1395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_TRUE(sp.AddFidSsrc(1, 2));
1405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_TRUE(sp.GetFidSsrc(1, &fid_ssrc));
1415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_EQ(2u, fid_ssrc);
1425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_FALSE(sp.GetFidSsrc(15, &fid_ssrc));
1435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  sp.add_ssrc(20);
1455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  sp.AddFidSsrc(20, 30);
1465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_TRUE(sp.GetFidSsrc(20, &fid_ssrc));
1475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_EQ(30u, fid_ssrc);
1485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  // Manually create SsrcGroup to test bounds-checking
1505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  // in GetSecondarySsrc. We construct an invalid StreamParams
1515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  // for this.
1525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  std::vector<uint32> fid_vector;
1535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  fid_vector.push_back(13);
1545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::SsrcGroup invalid_fid_group(cricket::kFidSsrcGroupSemantics,
1555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                                        fid_vector);
1565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::StreamParams sp_invalid;
1575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  sp_invalid.add_ssrc(13);
1585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  sp_invalid.ssrc_groups.push_back(invalid_fid_group);
1595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_FALSE(sp_invalid.GetFidSsrc(13, &fid_ssrc));
1605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}
1615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(StreamParams, ToString) {
1635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  cricket::StreamParams sp =
16485a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org      CreateStreamParamsWithSsrcGroup("XYZ", kSsrcs2, ARRAY_SIZE(kSsrcs2));
1655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  EXPECT_STREQ("{ssrcs:[1,2];ssrc_groups:{semantics:XYZ;ssrcs:[1,2]};}",
1665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org               sp.ToString().c_str());
1675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}
16885a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org
16985a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org
17085a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgTEST(StreamParams, TestIsOneSsrcStream_LegacyStream) {
17185a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  EXPECT_TRUE(
17285a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org      cricket::IsOneSsrcStream(cricket::StreamParams::CreateLegacy(13)));
17385a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org}
17485a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org
17585a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgTEST(StreamParams, TestIsOneSsrcStream_SingleRtxStream) {
17685a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  cricket::StreamParams stream;
17785a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  stream.add_ssrc(13);
17885a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  EXPECT_TRUE(stream.AddFidSsrc(13, 14));
17985a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  EXPECT_TRUE(cricket::IsOneSsrcStream(stream));
18085a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org}
18185a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org
18285a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgTEST(StreamParams, TestIsOneSsrcStream_SimulcastStream) {
18385a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  EXPECT_FALSE(cricket::IsOneSsrcStream(
18485a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org      cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs2))));
18585a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  EXPECT_FALSE(cricket::IsOneSsrcStream(
18685a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org      cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3))));
18785a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org}
18885a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org
18985a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgTEST(StreamParams, TestIsOneSsrcStream_SimRtxStream) {
19085a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  cricket::StreamParams stream =
19185a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org      cricket::CreateSimWithRtxStreamParams("cname",
19285a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org                                            MAKE_VECTOR(kSsrcs3),
19385a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org                                            MAKE_VECTOR(kRtxSsrcs3));
19485a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  EXPECT_FALSE(cricket::IsOneSsrcStream(stream));
19585a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org}
19685a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org
19785a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgTEST(StreamParams, TestIsSimulcastStream_LegacyStream) {
19885a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  EXPECT_FALSE(
19985a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org      cricket::IsSimulcastStream(cricket::StreamParams::CreateLegacy(13)));
20085a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org}
20185a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org
20285a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgTEST(StreamParams, TestIsSimulcastStream_SingleRtxStream) {
20385a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  cricket::StreamParams stream;
20485a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  stream.add_ssrc(13);
20585a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  EXPECT_TRUE(stream.AddFidSsrc(13, 14));
20685a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  EXPECT_FALSE(cricket::IsSimulcastStream(stream));
20785a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org}
20885a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org
20985a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgTEST(StreamParams, TestIsSimulcastStream_SimulcastStream) {
21085a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  EXPECT_TRUE(cricket::IsSimulcastStream(
21185a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org      cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs2))));
21285a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  EXPECT_TRUE(cricket::IsSimulcastStream(
21385a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org      cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3))));
21485a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org}
21585a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org
21685a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgTEST(StreamParams, TestIsSimulcastStream_SimRtxStream) {
21785a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  cricket::StreamParams stream =
21885a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org      cricket::CreateSimWithRtxStreamParams("cname",
21985a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org                                            MAKE_VECTOR(kSsrcs3),
22085a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org                                            MAKE_VECTOR(kRtxSsrcs3));
22185a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  EXPECT_TRUE(cricket::IsSimulcastStream(stream));
22285a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org}
22385a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org
22485a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgTEST(StreamParams, TestIsSimulcastStream_InvalidStreams) {
22585a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  // stream1 has extra non-sim, non-fid ssrc.
22685a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  cricket::StreamParams stream1 =
22785a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org      cricket::CreateSimWithRtxStreamParams("cname",
22885a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org                                            MAKE_VECTOR(kSsrcs3),
22985a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org                                            MAKE_VECTOR(kRtxSsrcs3));
23085a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  stream1.add_ssrc(25);
23185a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  EXPECT_FALSE(cricket::IsSimulcastStream(stream1));
23285a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org
23385a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  // stream2 has invalid fid-group (no primary).
23485a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  cricket::StreamParams stream2;
23585a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  stream2.add_ssrc(13);
23685a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  EXPECT_TRUE(stream2.AddFidSsrc(13, 14));
23785a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  std::remove(stream2.ssrcs.begin(), stream2.ssrcs.end(), 13);
23885a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  EXPECT_FALSE(cricket::IsSimulcastStream(stream2));
23985a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org
24085a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  // stream3 has two SIM groups.
24185a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  cricket::StreamParams stream3 =
24285a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org      cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs2));
24385a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  std::vector<uint32> sim_ssrcs = MAKE_VECTOR(kRtxSsrcs3);
24485a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  cricket::SsrcGroup sg(cricket::kSimSsrcGroupSemantics, sim_ssrcs);
24585a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  for (size_t i = 0; i < sim_ssrcs.size(); i++) {
24685a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org    stream3.add_ssrc(sim_ssrcs[i]);
24785a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  }
24885a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  stream3.ssrc_groups.push_back(sg);
24985a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org  EXPECT_FALSE(cricket::IsSimulcastStream(stream3));
25085a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org}
251