Signal-iOS/SignalServiceKit/tests/Messages/SignalServiceAddressTest.swift
2021-03-25 09:24:27 -03:00

147 lines
7.0 KiB
Swift

//
// Copyright (c) 2021 Open Whisper Systems. All rights reserved.
//
import Foundation
@testable import SignalServiceKit
import XCTest
class SignalServiceAddressTest: SSKBaseTestSwift {
var cache: SignalServiceAddressCache {
return Self.signalServiceAddressCache
}
override func setUp() {
super.setUp()
// Put setup code here. This method is called before the invocation of each test method in the class.
}
override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
super.tearDown()
}
func test_isEqualPermissive() {
let phoneNumber1 = "+13213214321"
let phoneNumber2 = "+13213214322"
let uuid1 = UUID()
let uuid2 = UUID()
// Double match
XCTAssertEqual(SignalServiceAddress(uuid: uuid1, phoneNumber: phoneNumber1),
SignalServiceAddress(uuid: uuid1, phoneNumber: phoneNumber1))
// Single match works, ignores single missing.
//
// SignalServiceAddress's getters use a cache to fill in the blanks.
cache.updateMapping(uuid: uuid1, phoneNumber: phoneNumber1)
XCTAssertEqual(SignalServiceAddress(uuid: nil, phoneNumber: phoneNumber1),
SignalServiceAddress(uuid: uuid1, phoneNumber: phoneNumber1))
XCTAssertEqual(SignalServiceAddress(uuid: uuid1),
SignalServiceAddress(uuid: uuid1, phoneNumber: phoneNumber1))
XCTAssertEqual(SignalServiceAddress(uuid: uuid1, phoneNumber: phoneNumber1),
SignalServiceAddress(uuid: nil, phoneNumber: phoneNumber1))
XCTAssertEqual(SignalServiceAddress(uuid: uuid1, phoneNumber: phoneNumber1),
SignalServiceAddress(uuid: uuid1))
// Single match works, ignores double missing.
XCTAssertEqual(SignalServiceAddress(uuid: nil, phoneNumber: phoneNumber1),
SignalServiceAddress(uuid: nil, phoneNumber: phoneNumber1))
XCTAssertEqual(SignalServiceAddress(uuid: uuid1),
SignalServiceAddress(uuid: uuid1))
// Ignores phone number when UUIDs match.
XCTAssertEqual(SignalServiceAddress(uuid: uuid1, phoneNumber: phoneNumber1),
SignalServiceAddress(uuid: uuid1, phoneNumber: phoneNumber2))
// Match fails if no common value.
XCTAssertEqual(SignalServiceAddress(uuid: uuid1),
SignalServiceAddress(uuid: nil, phoneNumber: phoneNumber1))
// Match fails if either value doesn't match.
XCTAssertNotEqual(SignalServiceAddress(uuid: uuid1),
SignalServiceAddress(uuid: uuid2))
XCTAssertNotEqual(SignalServiceAddress(uuid: nil, phoneNumber: phoneNumber1),
SignalServiceAddress(uuid: nil, phoneNumber: phoneNumber2))
XCTAssertNotEqual(SignalServiceAddress(uuid: uuid1, phoneNumber: phoneNumber1),
SignalServiceAddress(uuid: uuid2))
XCTAssertNotEqual(SignalServiceAddress(uuid: uuid1, phoneNumber: phoneNumber1),
SignalServiceAddress(uuid: nil, phoneNumber: phoneNumber2))
XCTAssertNotEqual(SignalServiceAddress(uuid: uuid1, phoneNumber: phoneNumber1),
SignalServiceAddress(uuid: uuid2, phoneNumber: phoneNumber1))
XCTAssertNotEqual(SignalServiceAddress(uuid: uuid1, phoneNumber: phoneNumber1),
SignalServiceAddress(uuid: uuid2, phoneNumber: phoneNumber2))
}
func test_mappingChanges() {
let uuid1 = UUID()
let uuid2 = UUID()
let phoneNumber1 = "+13213214321"
let phoneNumber2 = "+13213214322"
let phoneNumber3 = "+13213214323"
autoreleasepool {
let address1a = SignalServiceAddress(uuid: uuid1, phoneNumber: nil)
let address1b = SignalServiceAddress(uuid: uuid1, phoneNumber: nil)
let address1c = SignalServiceAddress(uuid: uuid1, phoneNumber: phoneNumber1)
let address2a = SignalServiceAddress(uuid: uuid2, phoneNumber: nil)
let address2b = SignalServiceAddress(uuid: uuid2, phoneNumber: phoneNumber2)
// We use the "unresolved" accessors unresolvedUuid(), unresolvedPhoneNumber()
// to avoid filling in the backing values.
XCTAssertEqual(address1a.unresolvedUuid, uuid1)
XCTAssertNil(address1a.unresolvedPhoneNumber)
XCTAssertEqual(address1b.unresolvedUuid, uuid1)
XCTAssertNil(address1b.unresolvedPhoneNumber)
XCTAssertEqual(address1c.unresolvedUuid, uuid1)
XCTAssertEqual(address1c.unresolvedPhoneNumber, phoneNumber1)
XCTAssertEqual(address2a.unresolvedUuid, uuid2)
XCTAssertNil(address2a.unresolvedPhoneNumber)
XCTAssertEqual(address2b.unresolvedUuid, uuid2)
XCTAssertEqual(address2b.unresolvedPhoneNumber, phoneNumber2)
Self.signalServiceAddressCache.updateMapping(uuid: uuid1, phoneNumber: phoneNumber1)
XCTAssertEqual(address1a.unresolvedUuid, uuid1)
XCTAssertEqual(address1a.unresolvedPhoneNumber, phoneNumber1)
XCTAssertEqual(address1b.unresolvedUuid, uuid1)
XCTAssertEqual(address1b.unresolvedPhoneNumber, phoneNumber1)
XCTAssertEqual(address1c.unresolvedUuid, uuid1)
XCTAssertEqual(address1c.unresolvedPhoneNumber, phoneNumber1)
XCTAssertEqual(address2a.unresolvedUuid, uuid2)
XCTAssertNil(address2a.unresolvedPhoneNumber)
XCTAssertEqual(address2b.unresolvedUuid, uuid2)
XCTAssertEqual(address2b.unresolvedPhoneNumber, phoneNumber2)
Self.signalServiceAddressCache.updateMapping(uuid: uuid1, phoneNumber: phoneNumber3)
XCTAssertEqual(address1a.unresolvedUuid, uuid1)
XCTAssertEqual(address1a.unresolvedPhoneNumber, phoneNumber3)
XCTAssertEqual(address1b.unresolvedUuid, uuid1)
XCTAssertEqual(address1b.unresolvedPhoneNumber, phoneNumber3)
XCTAssertEqual(address1c.unresolvedUuid, uuid1)
XCTAssertEqual(address1c.unresolvedPhoneNumber, phoneNumber3)
XCTAssertEqual(address2a.unresolvedUuid, uuid2)
XCTAssertNil(address2a.unresolvedPhoneNumber)
XCTAssertEqual(address2b.unresolvedUuid, uuid2)
XCTAssertEqual(address2b.unresolvedPhoneNumber, phoneNumber2)
// MARK: - Resolved values
XCTAssertEqual(address1a.uuid, uuid1)
XCTAssertEqual(address1a.phoneNumber, phoneNumber3)
XCTAssertEqual(address1b.uuid, uuid1)
XCTAssertEqual(address1b.phoneNumber, phoneNumber3)
XCTAssertEqual(address1c.uuid, uuid1)
XCTAssertEqual(address1c.phoneNumber, phoneNumber3)
XCTAssertEqual(address2a.uuid, uuid2)
XCTAssertNil(address2a.phoneNumber)
XCTAssertEqual(address2b.uuid, uuid2)
XCTAssertEqual(address2b.phoneNumber, phoneNumber2)
}
}
}