GeoIP2-swift/Tests/DataSectionTests/InMemoryDataSectionTest.swift

105 lines
3.5 KiB
Swift

import Foundation
import XCTest
import Metadata
import Decoder
@testable import DataSection
class InMemoryDataSectionTest: XCTestCase {
private static var countryFilePath: String {
get {
guard let countryFilePath = bundle.path(
forResource: "GeoLite2-Country_20200421/GeoLite2-Country",
ofType: "mmdb"
) else { fatalError("GeoLite2 Country DB file was not found.") }
return countryFilePath
}
}
private static let countryMetadata = Reader(windowSize: 1024).read(
InputStream(fileAtPath: countryFilePath)!
)!
func testLookup_returnsNilIfIteratorCantResolveNextControlByte() {
let dataSection = InMemoryDataSection(
metadata: InMemoryDataSectionTest.countryMetadata,
decoder: Decoder(Data([0b0000_0000]))
)
XCTAssertNil(dataSection.lookup(pointer: 100))
}
func testLookup_returnsNilIfIteratorDoesntResolveToMap() {
let dataSection = InMemoryDataSection(
metadata: InMemoryDataSectionTest.countryMetadata,
decoder: Decoder(Data(
[0b0101_1100] + "Hello World Hello World test".data(using: .utf8)!
))
)
XCTAssertNil(dataSection.lookup(pointer: 0))
}
func testLookup_returnsExpectedDictionary() {
let dataSection = InMemoryDataSection(
metadata: InMemoryDataSectionTest.countryMetadata,
stream: InputStream(fileAtPath: InMemoryDataSectionTest.countryFilePath)!
)
let expectedResult = [
"continent": Payload.map(
[
"geoname_id": Payload.uInt32(6255148),
"names": Payload.map(
[
"ru": Payload.utf8String("Европа"),
"en": Payload.utf8String("Europe"),
"de": Payload.utf8String("Europa"),
"fr": Payload.utf8String("Europe"),
"ja": Payload.utf8String("ヨーロッパ"),
"pt-BR": Payload.utf8String("Europa"),
"es": Payload.utf8String("Europa"),
"zh-CN": Payload.utf8String("欧洲")]
),
"code": Payload.utf8String("EU")
]
),
"country": Payload.map(
[
"names": Payload.map(
[
"es": Payload.utf8String("Hungría"),
"zh-CN": Payload.utf8String("匈牙利"),
"ru": Payload.utf8String("Венгрия"),
"ja": Payload.utf8String("ハンガリー共和国"),
"de": Payload.utf8String("Ungarn"),
"fr": Payload.utf8String("Hongrie"),
"pt-BR": Payload.utf8String("Hungria"),
"en": Payload.utf8String("Hungary")]
),
"iso_code": Payload.utf8String("HU"),
"is_in_european_union": Payload.boolean(true),
"geoname_id": Payload.uInt32(719819)]
),
"registered_country": Payload.map(
[
"is_in_european_union": Payload.boolean(true),
"names": Payload.map(
[
"es": Payload.utf8String("Hungría"),
"de": Payload.utf8String("Ungarn"),
"fr": Payload.utf8String("Hongrie"),
"en": Payload.utf8String("Hungary"),
"pt-BR": Payload.utf8String("Hungria"),
"ja": Payload.utf8String("ハンガリー共和国"),
"ru": Payload.utf8String("Венгрия"),
"zh-CN": Payload.utf8String("匈牙利")]
),
"geoname_id": Payload.uInt32(719819),
"iso_code": Payload.utf8String("HU")
]
)
]
XCTAssertEqual(expectedResult, dataSection.lookup(pointer: 9696))
}
}