aboutsummaryrefslogtreecommitdiff
path: root/pc/media_session_unittest.cc
diff options
context:
space:
mode:
authorErwin Jansen <jansene@google.com>2021-06-30 07:29:26 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2021-06-30 07:29:26 +0000
commit059cdc5996938f5f6b5343b6c969c12098275587 (patch)
tree6eacaffe4bebf8e00c290c1e1839e084b0c52e88 /pc/media_session_unittest.cc
parent97e54a7e73c7b24e464ef06ef3c3b3716f21bb15 (diff)
parent16be34ae72cdb525c88c2b31b21b976f35fe36d8 (diff)
downloadwebrtc-059cdc5996938f5f6b5343b6c969c12098275587.tar.gz
Merge "Merge upstream-master and enable ARM64" into emu-master-devemu-31-stable-releaseemu-31-release
Diffstat (limited to 'pc/media_session_unittest.cc')
-rw-r--r--pc/media_session_unittest.cc88
1 files changed, 75 insertions, 13 deletions
diff --git a/pc/media_session_unittest.cc b/pc/media_session_unittest.cc
index 6d914f9b81..c7c07fc527 100644
--- a/pc/media_session_unittest.cc
+++ b/pc/media_session_unittest.cc
@@ -139,6 +139,7 @@ static const RtpExtension kAudioRtpExtensionEncrypted1[] = {
RtpExtension("urn:ietf:params:rtp-hdrext:ssrc-audio-level", 8),
RtpExtension("http://google.com/testing/audio_something", 10),
RtpExtension("urn:ietf:params:rtp-hdrext:ssrc-audio-level", 12, true),
+ RtpExtension("http://google.com/testing/audio_something", 11, true),
};
static const RtpExtension kAudioRtpExtension2[] = {
@@ -161,7 +162,15 @@ static const RtpExtension kAudioRtpExtension3ForEncryption[] = {
static const RtpExtension kAudioRtpExtension3ForEncryptionOffer[] = {
RtpExtension("http://google.com/testing/audio_something", 2),
RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 3),
- RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 14, true),
+ RtpExtension("http://google.com/testing/audio_something", 14, true),
+ RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 13, true),
+};
+
+static const RtpExtension kVideoRtpExtension3ForEncryptionOffer[] = {
+ RtpExtension("http://google.com/testing/video_something", 4),
+ RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 3),
+ RtpExtension("http://google.com/testing/video_something", 12, true),
+ RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 13, true),
};
static const RtpExtension kAudioRtpExtensionAnswer[] = {
@@ -180,7 +189,8 @@ static const RtpExtension kVideoRtpExtension1[] = {
static const RtpExtension kVideoRtpExtensionEncrypted1[] = {
RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 14),
RtpExtension("http://google.com/testing/video_something", 13),
- RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 11, true),
+ RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 9, true),
+ RtpExtension("http://google.com/testing/video_something", 7, true),
};
static const RtpExtension kVideoRtpExtension2[] = {
@@ -205,7 +215,7 @@ static const RtpExtension kVideoRtpExtensionAnswer[] = {
};
static const RtpExtension kVideoRtpExtensionEncryptedAnswer[] = {
- RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 11, true),
+ RtpExtension("urn:ietf:params:rtp-hdrext:toffset", 9, true),
};
static const RtpExtension kRtpExtensionTransportSequenceNumber01[] = {
@@ -1036,6 +1046,66 @@ TEST_F(MediaSessionDescriptionFactoryTest, ReAnswerChangedBundleOffererTagged) {
EXPECT_TRUE(bundle_group->HasContentName("video"));
}
+TEST_F(MediaSessionDescriptionFactoryTest,
+ CreateAnswerForOfferWithMultipleBundleGroups) {
+ // Create an offer with 4 m= sections, initially without BUNDLE groups.
+ MediaSessionOptions opts;
+ opts.bundle_enabled = false;
+ AddMediaDescriptionOptions(MEDIA_TYPE_AUDIO, "1",
+ RtpTransceiverDirection::kSendRecv, kActive,
+ &opts);
+ AddMediaDescriptionOptions(MEDIA_TYPE_AUDIO, "2",
+ RtpTransceiverDirection::kSendRecv, kActive,
+ &opts);
+ AddMediaDescriptionOptions(MEDIA_TYPE_AUDIO, "3",
+ RtpTransceiverDirection::kSendRecv, kActive,
+ &opts);
+ AddMediaDescriptionOptions(MEDIA_TYPE_AUDIO, "4",
+ RtpTransceiverDirection::kSendRecv, kActive,
+ &opts);
+ std::unique_ptr<SessionDescription> offer = f1_.CreateOffer(opts, nullptr);
+ ASSERT_TRUE(offer->groups().empty());
+
+ // Munge the offer to have two groups. Offers like these cannot be generated
+ // without munging, but it is valid to receive such offers from remote
+ // endpoints.
+ cricket::ContentGroup bundle_group1(cricket::GROUP_TYPE_BUNDLE);
+ bundle_group1.AddContentName("1");
+ bundle_group1.AddContentName("2");
+ cricket::ContentGroup bundle_group2(cricket::GROUP_TYPE_BUNDLE);
+ bundle_group2.AddContentName("3");
+ bundle_group2.AddContentName("4");
+ offer->AddGroup(bundle_group1);
+ offer->AddGroup(bundle_group2);
+
+ // If BUNDLE is enabled, the answer to this offer should accept both BUNDLE
+ // groups.
+ opts.bundle_enabled = true;
+ std::unique_ptr<SessionDescription> answer =
+ f2_.CreateAnswer(offer.get(), opts, nullptr);
+
+ std::vector<const cricket::ContentGroup*> answer_groups =
+ answer->GetGroupsByName(cricket::GROUP_TYPE_BUNDLE);
+ ASSERT_EQ(answer_groups.size(), 2u);
+ EXPECT_EQ(answer_groups[0]->content_names().size(), 2u);
+ EXPECT_TRUE(answer_groups[0]->HasContentName("1"));
+ EXPECT_TRUE(answer_groups[0]->HasContentName("2"));
+ EXPECT_EQ(answer_groups[1]->content_names().size(), 2u);
+ EXPECT_TRUE(answer_groups[1]->HasContentName("3"));
+ EXPECT_TRUE(answer_groups[1]->HasContentName("4"));
+
+ // If BUNDLE is disabled, the answer to this offer should reject both BUNDLE
+ // groups.
+ opts.bundle_enabled = false;
+ answer = f2_.CreateAnswer(offer.get(), opts, nullptr);
+
+ answer_groups = answer->GetGroupsByName(cricket::GROUP_TYPE_BUNDLE);
+ // Rejected groups are still listed, but they are empty.
+ ASSERT_EQ(answer_groups.size(), 2u);
+ EXPECT_TRUE(answer_groups[0]->content_names().empty());
+ EXPECT_TRUE(answer_groups[1]->content_names().empty());
+}
+
// Test that if the BUNDLE offerer-tagged media section is changed in a reoffer
// and there is still a non-rejected media section that was in the initial
// offer, then the ICE credentials do not change in the reoffer offerer-tagged
@@ -3371,19 +3441,11 @@ TEST_F(MediaSessionDescriptionFactoryTest, RtpExtensionIdReusedEncrypted) {
MAKE_VECTOR(kVideoRtpExtension3ForEncryption), &opts);
std::unique_ptr<SessionDescription> offer = f1_.CreateOffer(opts, NULL);
- // The extensions that are shared between audio and video should use the same
- // id.
- const RtpExtension kExpectedVideoRtpExtension[] = {
- kVideoRtpExtension3ForEncryption[0],
- kAudioRtpExtension3ForEncryptionOffer[1],
- kAudioRtpExtension3ForEncryptionOffer[2],
- };
-
EXPECT_EQ(
MAKE_VECTOR(kAudioRtpExtension3ForEncryptionOffer),
GetFirstAudioContentDescription(offer.get())->rtp_header_extensions());
EXPECT_EQ(
- MAKE_VECTOR(kExpectedVideoRtpExtension),
+ MAKE_VECTOR(kVideoRtpExtension3ForEncryptionOffer),
GetFirstVideoContentDescription(offer.get())->rtp_header_extensions());
// Nothing should change when creating a new offer
@@ -3393,7 +3455,7 @@ TEST_F(MediaSessionDescriptionFactoryTest, RtpExtensionIdReusedEncrypted) {
EXPECT_EQ(MAKE_VECTOR(kAudioRtpExtension3ForEncryptionOffer),
GetFirstAudioContentDescription(updated_offer.get())
->rtp_header_extensions());
- EXPECT_EQ(MAKE_VECTOR(kExpectedVideoRtpExtension),
+ EXPECT_EQ(MAKE_VECTOR(kVideoRtpExtension3ForEncryptionOffer),
GetFirstVideoContentDescription(updated_offer.get())
->rtp_header_extensions());
}