Files
Luma/Tests/SASLMechanismPreferenceTests.swift
T
wt 1650145d4d
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
serverinfoview
2026-09-03 12:42:20 +07:00

113 lines
3.7 KiB
Swift

import XCTest
@testable import Luma
final class SASLMechanismPreferenceTests: XCTestCase {
func testPrefersScramSha512WhenAdvertised() {
XCTAssertEqual(
SASLMechanismPreference.selected(among: [
"PLAIN", "SCRAM-SHA-1", "SCRAM-SHA-512", "SCRAM-SHA-256",
]),
"SCRAM-SHA-512"
)
}
func testFallsBackToSha256WithoutSha512() {
XCTAssertEqual(
SASLMechanismPreference.selected(among: ["SCRAM-SHA-256", "PLAIN"]),
"SCRAM-SHA-256"
)
}
func testFallsBackToSha1AndPlain() {
XCTAssertEqual(
SASLMechanismPreference.selected(among: ["PLAIN", "SCRAM-SHA-1"]),
"SCRAM-SHA-1"
)
XCTAssertEqual(
SASLMechanismPreference.selected(among: ["PLAIN"]),
"PLAIN"
)
}
func testReturnsNilWhenNothingKnownIsOffered() {
XCTAssertNil(
SASLMechanismPreference.selected(among: ["X-OAUTH2", "ANONYMOUS"])
)
XCTAssertNil(SASLMechanismPreference.selected(among: []))
}
func testStrongestAvailableRanking() {
XCTAssertTrue(
SASLMechanismPreference.isStrongestAvailable(
"SCRAM-SHA-512",
among: ["SCRAM-SHA-512", "SCRAM-SHA-256", "PLAIN"]
)
)
XCTAssertFalse(
SASLMechanismPreference.isStrongestAvailable(
"SCRAM-SHA-1",
among: ["SCRAM-SHA-512", "SCRAM-SHA-1"]
)
)
XCTAssertFalse(
SASLMechanismPreference.isStrongestAvailable(
"X-OAUTH2",
among: ["X-OAUTH2"]
)
)
}
func testPLAINIsNeverChosenWhileSCRAMIsOffered() {
let offered = ["SCRAM-SHA-1", "PLAIN", "SCRAM-SHA-512"]
XCTAssertEqual(SASLMechanismPreference.selected(among: offered), "SCRAM-SHA-512")
XCTAssertNotEqual(SASLMechanismPreference.selected(among: offered), "PLAIN")
}
func testPlusVariantsArePreferredOverPlainSCRAM() {
let offered = ["PLAIN", "SCRAM-SHA-1", "SCRAM-SHA-256-PLUS", "SCRAM-SHA-512"]
XCTAssertEqual(
SASLMechanismPreference.selected(among: offered),
"SCRAM-SHA-256-PLUS"
)
XCTAssertEqual(
SASLMechanismPreference.selected(among: [
"SCRAM-SHA-512", "SCRAM-SHA-1-PLUS", "SCRAM-SHA-256-PLUS",
]),
"SCRAM-SHA-256-PLUS"
)
XCTAssertEqual(
SASLMechanismPreference.selected(among: [
"SCRAM-SHA-512-PLUS", "SCRAM-SHA-256-PLUS", "SCRAM-SHA-512",
]),
"SCRAM-SHA-512-PLUS"
)
}
func testWeakMechanismsAreFlagged() {
XCTAssertTrue(SASLMechanismPreference.weakMechanisms.contains("PLAIN"))
XCTAssertTrue(SASLMechanismPreference.weakMechanisms.contains("OAUTHBEARER"))
XCTAssertFalse(SASLMechanismPreference.weakMechanisms.contains("SCRAM-SHA-1"))
XCTAssertFalse(SASLMechanismPreference.weakMechanisms.contains("SCRAM-SHA-512-PLUS"))
XCTAssertFalse(SASLMechanismPreference.weakMechanisms.contains("EXTERNAL"))
}
func testPlusVariantsSkippedWithoutChannelBinding() {
let offered = ["SCRAM-SHA-512-PLUS", "SCRAM-SHA-512", "PLAIN"]
XCTAssertEqual(
SASLMechanismPreference.selected(
among: offered,
allowsChannelBinding: false
),
"SCRAM-SHA-512"
)
// Without any plain SCRAM alternative, PLAIN is the only choice.
XCTAssertEqual(
SASLMechanismPreference.selected(
among: ["SCRAM-SHA-1-PLUS", "PLAIN"],
allowsChannelBinding: false
),
"PLAIN"
)
}
}