Files
Luma/Tests/CallSDPOrderingTests.swift
wt 10e18eecb6
iOS CI / Build and Test SwiftUI App (push) Canceled after 0s
Build Unsigned iOS and macOS Apps / Build Unsigned iOS IPA (push) Canceled after 0s
Build Unsigned iOS and macOS Apps / Build macOS ZIP (push) Canceled after 0s
fix ios ci test callsdpnormalization
2026-08-11 14:42:15 +07:00

146 lines
4.8 KiB
Swift

import XCTest
@testable import Luma
final class CallSDPOrderingTests: XCTestCase {
func testAnswerKeepsOfferMediaOrder() {
XCTAssertEqual(
CallSDPOrdering.answerIndices(
localOrder: ["audio", "video"],
remoteOrder: ["audio", "video"]
),
[0, 1]
)
}
func testAnswerWithReversedJingleContentsIsReordered() {
XCTAssertEqual(
CallSDPOrdering.answerIndices(
localOrder: ["audio", "video"],
remoteOrder: ["video", "audio"]
),
[1, 0]
)
}
func testAnswerWithMissingOrDuplicateContentIsRejected() {
XCTAssertNil(
CallSDPOrdering.answerIndices(
localOrder: ["audio", "video"],
remoteOrder: ["audio"]
)
)
XCTAssertNil(
CallSDPOrdering.answerIndices(
localOrder: ["audio", "video"],
remoteOrder: ["audio", "audio"]
)
)
}
func testJingleCandidateIsNormalizedForWebRTC() {
XCTAssertEqual(
CallSDPOrdering.webRTCCandidateLine("a=candidate:1 1 UDP 1 192.0.2.1 5000 typ host"),
"candidate:1 1 UDP 1 192.0.2.1 5000 typ host"
)
XCTAssertEqual(
CallSDPOrdering.webRTCCandidateLine("candidate:2 1 UDP 1 192.0.2.2 5002 typ host"),
"candidate:2 1 UDP 1 192.0.2.2 5002 typ host"
)
}
func testMartinParseInputPreservesFinalMSIDCharacter() {
let raw =
[
"v=0",
"m=video 9 UDP/TLS/RTP/SAVPF 96",
"a=ssrc-group:FID 2408145738 2025569816",
"a=ssrc:2408145738 msid:luma-stream luma-video-0435",
"a=ssrc:2025569816 msid:luma-stream luma-video-0435",
].joined(separator: "\r\n") + "\n"
let result = CallSDPNormalization.martinParseInput(raw)
let expected =
[
"v=0",
"m=video 9 UDP/TLS/RTP/SAVPF 96",
"a=ssrc-group:FID 2408145738 2025569816",
"a=ssrc:2408145738 msid:luma-stream luma-video-0435",
"a=ssrc:2025569816 msid:luma-stream luma-video-0435",
].joined(separator: "\r\n") + "\r\n"
XCTAssertEqual(result, expected)
}
func testMartinParseInputUsesExactlyOneTrailingCRLF() {
for suffix in ["", "\n", "\r\n", "\n\n"] {
let parseInput = CallSDPNormalization.martinParseInput(
"v=0\nm=audio 9 UDP/TLS/RTP/SAVPF 111\na=mid:0" + suffix
)
XCTAssertTrue(parseInput.hasSuffix("a=mid:0\r\n"))
XCTAssertFalse(parseInput.hasSuffix("\r\n\r\n"))
}
}
func testFIDMSIDsUseTheCompleteTrackIdentifier() {
let repaired = CallSDPCompatibility.canonicalFIDMSIDs(
groups: [
.init(semantics: "FID", sources: ["primary", "rtx"])
],
msids: [
"primary": "luma-stream luma-video-9FBECB58-45C5-445B-9F4E-0598594F4F2D",
"rtx": "luma-stream luma-video-9FBECB58-45C5-445B-9F4E-0598594F4F2",
]
)
XCTAssertEqual(repaired["primary"], repaired["rtx"])
XCTAssertTrue(repaired["rtx"]?.hasSuffix("F4F2D") == true)
}
func testFIDMSIDRepairAlsoHandlesMissingRTXMetadata() {
let repaired = CallSDPCompatibility.canonicalFIDMSIDs(
groups: [
.init(semantics: "fid", sources: ["primary", "rtx"]),
.init(semantics: "SIM", sources: ["sim-a", "sim-b"]),
],
msids: [
"primary": "stream video-track",
"sim-a": "stream camera-a",
"sim-b": "stream camera-b",
]
)
XCTAssertEqual(repaired["rtx"], "stream video-track")
XCTAssertEqual(repaired["sim-a"], "stream camera-a")
XCTAssertEqual(repaired["sim-b"], "stream camera-b")
}
func testCandidateDispatchWaitsForRemoteAnswerAndFullJID() {
XCTAssertFalse(
CallCandidateDispatchGate.canSend(
initialDescriptionWasSignaled: true,
hasLocalDescription: true,
hasRemoteDescription: false,
hasFullPeerJID: true
))
XCTAssertFalse(
CallCandidateDispatchGate.canSend(
initialDescriptionWasSignaled: true,
hasLocalDescription: true,
hasRemoteDescription: true,
hasFullPeerJID: false
))
}
func testCandidateDispatchOpensAfterSessionAccept() {
XCTAssertTrue(
CallCandidateDispatchGate.canSend(
initialDescriptionWasSignaled: true,
hasLocalDescription: true,
hasRemoteDescription: true,
hasFullPeerJID: true
))
}
}