114 lines
5.4 KiB
HTML
114 lines
5.4 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
|
<html>
|
|
<head>
|
|
<script src="../../resources/js-test-pre.js"></script>
|
|
<script src="./resources/sdp-utils.js"></script>
|
|
</head>
|
|
<body>
|
|
<script>
|
|
|
|
description("Inspect that the SDP offer contains the correct number of a=bundle-only lines according to the bundlePolicy value.");
|
|
|
|
if (window.testRunner)
|
|
testRunner.setUserMediaPermission(true);
|
|
else {
|
|
debug("This test can not be run without the testRunner");
|
|
finishJSTest();
|
|
}
|
|
|
|
function testBundlePolicySDP(bundlePolicy) {
|
|
var mediaDescriptionVariables = [];
|
|
var numberOfExtraTracksPerType = 5;
|
|
var stream;
|
|
var numberOfGeneratedBundleOnlyLines = 0;
|
|
var numberOfExpectedBundleOnlyLines = 0;
|
|
var numberOfDifferentTypeTracks = 2; // audio and video
|
|
|
|
switch (bundlePolicy) {
|
|
case "max-compat":
|
|
// None of the m= sections should have a=bundle-only.
|
|
numberOfExpectedBundleOnlyLines = 0;
|
|
break;
|
|
case "max-bundle":
|
|
// All the m= sections (except the first one) should have a=bundle-only.
|
|
numberOfExpectedBundleOnlyLines = numberOfDifferentTypeTracks * (numberOfExtraTracksPerType + 1 ) - 1;
|
|
break;
|
|
default: // balanced
|
|
// All the m= sections (except the first one of each type) should have a=bundle-only.
|
|
numberOfExpectedBundleOnlyLines = numberOfDifferentTypeTracks * numberOfExtraTracksPerType;
|
|
break;
|
|
}
|
|
if (numberOfExpectedBundleOnlyLines < 0)
|
|
numberOfExpectedBundleOnlyLines = 0;
|
|
|
|
var connectionConfig = { iceServers:[{urls:'stun:foo.com'}],
|
|
bundlePolicy: bundlePolicy };
|
|
var pc = new RTCPeerConnection(connectionConfig);
|
|
|
|
navigator.mediaDevices.getUserMedia({ "audio": true, "video": true})
|
|
.then(function (stream) {
|
|
testPassed("Start promise chain for bundlePolicy: " + bundlePolicy);
|
|
var audioTrack = stream.getAudioTracks()[0];
|
|
var videoTrack = stream.getVideoTracks()[0];
|
|
pc.addTrack(audioTrack, stream);
|
|
pc.addTrack(videoTrack, stream);
|
|
mediaDescriptionVariables.push({ "trackId": audioTrack.id, "streamId": stream.id });
|
|
mediaDescriptionVariables.push({ "trackId": videoTrack.id, "streamId": stream.id });
|
|
for(var i=0; i < numberOfExtraTracksPerType; i++){
|
|
var audioTrackCloned = audioTrack.clone();
|
|
var videoTrackCloned = videoTrack.clone();
|
|
pc.addTrack(audioTrackCloned, stream);
|
|
pc.addTrack(videoTrackCloned, stream);
|
|
mediaDescriptionVariables.push({ "trackId": audioTrackCloned.id, "streamId": stream.id });
|
|
mediaDescriptionVariables.push({ "trackId": videoTrackCloned.id, "streamId": stream.id });
|
|
}
|
|
return pc.createOffer();
|
|
})
|
|
.then(function (offer) {
|
|
testPassed("Generated SDP offer for bundlePolicy: " + bundlePolicy);
|
|
printComparableSessionDescription(offer, mediaDescriptionVariables);
|
|
offer.sdp.split("\r\n").forEach(function (line) {
|
|
if (line == "a=bundle-only") {
|
|
numberOfGeneratedBundleOnlyLines++;
|
|
};
|
|
});
|
|
if (numberOfExpectedBundleOnlyLines == numberOfGeneratedBundleOnlyLines) {
|
|
testPassed("Generated SDP offer for bundlePolicy: " + bundlePolicy + ". Got the expected number of a=bundle-only lines: " + numberOfGeneratedBundleOnlyLines);
|
|
} else {
|
|
testFailed("Generated SDP offer for bundlePolicy: " + bundlePolicy + ". Expected " + numberOfExpectedBundleOnlyLines + " a=bundle-only lines, but got " + numberOfGeneratedBundleOnlyLines + " lines instead.");
|
|
}
|
|
runNextSubTestIfNotFinished();
|
|
|
|
})
|
|
.catch(function (error) {
|
|
testFailed("Error caught in promise chain: " + error);
|
|
finishJSTest();
|
|
});
|
|
|
|
};
|
|
|
|
|
|
function runNextSubTestIfNotFinished() {
|
|
if (subTestsCompleted == bundlePolicies.length) {
|
|
testPassed("Tested the following bundlePolicy values: " + bundlePolicies.join(" "));
|
|
finishJSTest();
|
|
} else {
|
|
testBundlePolicySDP(bundlePolicies[subTestsCompleted]);
|
|
subTestsCompleted++;
|
|
};
|
|
};
|
|
|
|
|
|
var subTestsCompleted = 0;
|
|
var bundlePolicies = ["max-compat", "balanced", "max-bundle"];
|
|
|
|
runNextSubTestIfNotFinished();
|
|
|
|
window.jsTestIsAsync = true;
|
|
window.successfullyParsed = true;
|
|
|
|
</script>
|
|
<script src="../../resources/js-test-post.js"></script>
|
|
</body>
|
|
</html>
|