113 lines
3.7 KiB
Swift
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"
|
|
)
|
|
}
|
|
}
|