mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 19:04:45 +00:00
Bug 1332163: Test-case for bug. r=mjf
Differential Revision: https://phabricator.services.mozilla.com/D176764
This commit is contained in:
parent
73c7f15014
commit
3acd8ba766
@ -5073,7 +5073,7 @@ TEST_F(JsepSessionTest, UnknownFingerprintAlgorithm) {
|
||||
ReplaceAll("fingerprint:sha", "fingerprint:foo", &offer);
|
||||
JsepSession::Result result =
|
||||
mSessionAns->SetRemoteDescription(kJsepSdpOffer, offer);
|
||||
ASSERT_EQ(dom::PCError::OperationError, *result.mError);
|
||||
ASSERT_EQ(dom::PCError::InvalidAccessError, *result.mError);
|
||||
ASSERT_NE("", mSessionAns->GetLastError());
|
||||
}
|
||||
|
||||
@ -5752,7 +5752,7 @@ TEST_F(JsepSessionTest, missingUfrag) {
|
||||
offer.replace(pos, ufrag.length(), "ice-ufrog");
|
||||
JsepSession::Result result =
|
||||
mSessionAns->SetRemoteDescription(kJsepSdpOffer, offer);
|
||||
ASSERT_EQ(dom::PCError::OperationError, *result.mError);
|
||||
ASSERT_EQ(dom::PCError::InvalidAccessError, *result.mError);
|
||||
}
|
||||
|
||||
TEST_F(JsepSessionTest, AudioOnlyCalleeNoRtcpMux) {
|
||||
@ -7440,4 +7440,170 @@ TEST_F(JsepSessionTest, TestDuplicatePayloadTypes) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(JsepSessionTest, TestTransportAttributeValidation) {
|
||||
const std::string sdpTemplate =
|
||||
"v=0\r\n"
|
||||
"o=- 6 2 IN IP4 1r\r\n"
|
||||
"t=0 0a\r\n"
|
||||
"a=group:BUNDLE audio video\r\n"
|
||||
"m=audio 9 UDP/TLS/RTP/SAVPF 111\r\n"
|
||||
"c=IN IP4 51.81.107.13\r\n"
|
||||
"a=ice-ufrag:Xp\r\n"
|
||||
"a=ice-pwd:he\r\n"
|
||||
"a=setup:actpass\r\n"
|
||||
"a=fingerprint:sha-256 "
|
||||
"DC:FC:25:56:2B:88:77:2F:E4:FA:97:4E:2E:F1:D6:34:A6:A0:11:E2:E4:38:B3:98:"
|
||||
"08:D2:F7:9D:F5:E2:C1:15\r\n"
|
||||
"a=sendrecv\r\n"
|
||||
"a=extmap:11 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\n"
|
||||
"a=fmtp:111 maxplaybackrate=48000;stereo=1;useinbandfec=1\r\n"
|
||||
"a=mid:audio\r\n"
|
||||
"a=rtcp-mux\r\n"
|
||||
"a=rtpmap:111 opus/48000/2\r\n"
|
||||
"a=ssrc:3463672643 cname:{ec9a356a-8d2c-504e-9977-99070a51f929}\r\n"
|
||||
"m=video 9 UDP/TLS/RTP/SAVPF 100\r\n"
|
||||
"c=IN IP4 51.81.107.13\r\n"
|
||||
"a=rtpmap:100 VP8/90000\r\n"
|
||||
"a=extmap:1 urn:ietf:params:rtp-hdrext:toffset\r\n"
|
||||
"a=mid:video\r\n"
|
||||
"a=ice-ufrag:Xp\r\n"
|
||||
"a=ice-pwd:he\r\n"
|
||||
"a=setup:actpass\r\n"
|
||||
"a=fingerprint:sha-256 "
|
||||
"DC:FC:25:56:2B:88:77:2F:E4:FA:97:4E:2E:F1:D6:34:A6:A0:11:E2:E4:38:B3:98:"
|
||||
"08:D2:F7:9D:F5:E2:C1:15\r\n";
|
||||
|
||||
// Control case
|
||||
{
|
||||
auto result = mSessionOff->SetRemoteDescription(kJsepSdpOffer, sdpTemplate);
|
||||
ASSERT_FALSE(result.mError.isSome());
|
||||
}
|
||||
|
||||
// Missing ufrag
|
||||
{
|
||||
UniquePtr<Sdp> parsed = Parse(sdpTemplate);
|
||||
parsed->GetMediaSection(0).GetAttributeList().RemoveAttribute(
|
||||
SdpAttribute::kIceUfragAttribute);
|
||||
auto sdp = parsed->ToString();
|
||||
auto result = mSessionOff->SetRemoteDescription(kJsepSdpOffer, sdp);
|
||||
ASSERT_TRUE(result.mError.isSome());
|
||||
}
|
||||
|
||||
// Missing pwd, bundle tag
|
||||
{
|
||||
UniquePtr<Sdp> parsed = Parse(sdpTemplate);
|
||||
parsed->GetMediaSection(0).GetAttributeList().RemoveAttribute(
|
||||
SdpAttribute::kIcePwdAttribute);
|
||||
auto sdp = parsed->ToString();
|
||||
auto result = mSessionOff->SetRemoteDescription(kJsepSdpOffer, sdp);
|
||||
ASSERT_TRUE(result.mError.isSome());
|
||||
}
|
||||
|
||||
// Missing setup, bundle tag
|
||||
{
|
||||
UniquePtr<Sdp> parsed = Parse(sdpTemplate);
|
||||
parsed->GetMediaSection(0).GetAttributeList().RemoveAttribute(
|
||||
SdpAttribute::kSetupAttribute);
|
||||
auto sdp = parsed->ToString();
|
||||
auto result = mSessionOff->SetRemoteDescription(kJsepSdpOffer, sdp);
|
||||
ASSERT_TRUE(result.mError.isSome());
|
||||
}
|
||||
|
||||
// Invalid setup attribute (holdconn), bundle tag
|
||||
{
|
||||
UniquePtr<Sdp> parsed = Parse(sdpTemplate);
|
||||
parsed->GetMediaSection(0).GetAttributeList().SetAttribute(
|
||||
new SdpSetupAttribute(SdpSetupAttribute::kHoldconn));
|
||||
auto sdp = parsed->ToString();
|
||||
auto result = mSessionOff->SetRemoteDescription(kJsepSdpOffer, sdp);
|
||||
ASSERT_TRUE(result.mError.isSome());
|
||||
}
|
||||
|
||||
// Missing fingerprint, bundle tag
|
||||
{
|
||||
UniquePtr<Sdp> parsed = Parse(sdpTemplate);
|
||||
parsed->GetMediaSection(0).GetAttributeList().RemoveAttribute(
|
||||
SdpAttribute::kFingerprintAttribute);
|
||||
auto sdp = parsed->ToString();
|
||||
auto result = mSessionOff->SetRemoteDescription(kJsepSdpOffer, sdp);
|
||||
ASSERT_TRUE(result.mError.isSome());
|
||||
}
|
||||
|
||||
// Unknown fingerprint algorithm
|
||||
{
|
||||
std::string mungedSdp = sdpTemplate;
|
||||
ReplaceAll("fingerprint:sha", "fingerprint:foo", &mungedSdp);
|
||||
UniquePtr<Sdp> parsed = Parse(mungedSdp);
|
||||
auto sdp = parsed->ToString();
|
||||
auto result = mSessionOff->SetRemoteDescription(kJsepSdpOffer, sdp);
|
||||
ASSERT_TRUE(result.mError.isSome());
|
||||
}
|
||||
|
||||
// Missing pwd, bundled msection without bundle-only
|
||||
{
|
||||
UniquePtr<Sdp> parsed = Parse(sdpTemplate);
|
||||
parsed->GetMediaSection(1).GetAttributeList().RemoveAttribute(
|
||||
SdpAttribute::kIcePwdAttribute);
|
||||
auto sdp = parsed->ToString();
|
||||
auto result = mSessionOff->SetRemoteDescription(kJsepSdpOffer, sdp);
|
||||
ASSERT_TRUE(result.mError.isSome());
|
||||
}
|
||||
|
||||
// Missing setup, bundled msection without bundle-only
|
||||
{
|
||||
UniquePtr<Sdp> parsed = Parse(sdpTemplate);
|
||||
parsed->GetMediaSection(1).GetAttributeList().RemoveAttribute(
|
||||
SdpAttribute::kSetupAttribute);
|
||||
auto sdp = parsed->ToString();
|
||||
auto result = mSessionOff->SetRemoteDescription(kJsepSdpOffer, sdp);
|
||||
ASSERT_TRUE(result.mError.isSome());
|
||||
}
|
||||
|
||||
// Missing fingerprint, bundled msection without bundle-only
|
||||
{
|
||||
UniquePtr<Sdp> parsed = Parse(sdpTemplate);
|
||||
parsed->GetMediaSection(1).GetAttributeList().RemoveAttribute(
|
||||
SdpAttribute::kFingerprintAttribute);
|
||||
auto sdp = parsed->ToString();
|
||||
auto result = mSessionOff->SetRemoteDescription(kJsepSdpOffer, sdp);
|
||||
ASSERT_TRUE(result.mError.isSome());
|
||||
}
|
||||
|
||||
// Missing ufrag attribute, bundle-only msection
|
||||
{
|
||||
UniquePtr<Sdp> parsed = Parse(sdpTemplate);
|
||||
parsed->GetMediaSection(1).GetAttributeList().RemoveAttribute(
|
||||
SdpAttribute::kIceUfragAttribute);
|
||||
parsed->GetMediaSection(1).GetAttributeList().SetAttribute(
|
||||
new SdpFlagAttribute(SdpAttribute::kBundleOnlyAttribute));
|
||||
auto sdp = parsed->ToString();
|
||||
auto result = mSessionOff->SetRemoteDescription(kJsepSdpOffer, sdp);
|
||||
ASSERT_FALSE(result.mError.isSome());
|
||||
}
|
||||
|
||||
// Missing pwd attribute, bundle-only msection
|
||||
{
|
||||
UniquePtr<Sdp> parsed = Parse(sdpTemplate);
|
||||
parsed->GetMediaSection(1).GetAttributeList().RemoveAttribute(
|
||||
SdpAttribute::kIcePwdAttribute);
|
||||
parsed->GetMediaSection(1).GetAttributeList().SetAttribute(
|
||||
new SdpFlagAttribute(SdpAttribute::kBundleOnlyAttribute));
|
||||
auto sdp = parsed->ToString();
|
||||
auto result = mSessionOff->SetRemoteDescription(kJsepSdpOffer, sdp);
|
||||
ASSERT_FALSE(result.mError.isSome());
|
||||
}
|
||||
|
||||
// Missing fingerprint attribute, bundle-only msection
|
||||
{
|
||||
UniquePtr<Sdp> parsed = Parse(sdpTemplate);
|
||||
parsed->GetMediaSection(1).GetAttributeList().RemoveAttribute(
|
||||
SdpAttribute::kFingerprintAttribute);
|
||||
parsed->GetMediaSection(1).GetAttributeList().SetAttribute(
|
||||
new SdpFlagAttribute(SdpAttribute::kBundleOnlyAttribute));
|
||||
auto sdp = parsed->ToString();
|
||||
auto result = mSessionOff->SetRemoteDescription(kJsepSdpOffer, sdp);
|
||||
ASSERT_FALSE(result.mError.isSome());
|
||||
}
|
||||
}
|
||||
} // namespace mozilla
|
||||
|
@ -118,4 +118,33 @@ a=setup:actpass
|
||||
assert_false(transceivers[0].stopped);
|
||||
assert_true(transceivers[1].stopped);
|
||||
}, 'max-bundle with an offer without bundle only negotiates the first m-line');
|
||||
|
||||
promise_test(async t => {
|
||||
const sdp = `v=0
|
||||
o=- 0 3 IN IP4 127.0.0.1
|
||||
s=-
|
||||
t=0 0
|
||||
a=group:BUNDLE audio video
|
||||
m=audio 9 UDP/TLS/RTP/SAVPF 111
|
||||
c=IN IP4 0.0.0.0
|
||||
a=fingerprint:sha-256 A7:24:72:CA:6E:02:55:39:BA:66:DF:6E:CC:4C:D8:B0:1A:BF:1A:56:65:7D:F4:03:AD:7E:77:43:2A:29:EC:93
|
||||
a=ice-ufrag:ETEn
|
||||
a=ice-pwd:OtSK0WpNtpUjkY4+86js7Z/l
|
||||
a=rtcp-mux
|
||||
a=sendonly
|
||||
a=mid:audio
|
||||
a=rtpmap:111 opus/48000/2
|
||||
a=setup:actpass
|
||||
m=video 9 UDP/TLS/RTP/SAVPF 100
|
||||
c=IN IP4 0.0.0.0
|
||||
a=bundle-only
|
||||
a=sendonly
|
||||
a=mid:video
|
||||
a=rtpmap:100 VP8/90000
|
||||
a=fmtp:100 max-fr=30;max-fs=3600
|
||||
`;
|
||||
const pc = new RTCPeerConnection();
|
||||
t.add_cleanup(() => pc.close());
|
||||
await pc.setRemoteDescription({ type: 'offer', sdp });
|
||||
}, 'sRD(offer) works with no transport attributes in a bundle-only m-section');
|
||||
</script>
|
||||
|
Loading…
Reference in New Issue
Block a user