113 lines
4.5 KiB
Swift
113 lines
4.5 KiB
Swift
import Foundation
|
|
import XCTest
|
|
import TestResources
|
|
@testable import MetadataReader
|
|
|
|
class FunctionDecodeTest: XCTestCase {
|
|
|
|
func testInit_nilIfCantCreateIterator() {
|
|
XCTAssertNil(decode(Data(), metadataSectionSize: 0, databaseSize: 0))
|
|
}
|
|
|
|
func testInit_nilIfCantFetchFirstControlByte() {
|
|
XCTAssertNil(decode(Data([0b0000_1111]), metadataSectionSize: 0, databaseSize: 0))
|
|
}
|
|
|
|
func testInit_nilIfFirstControlByteIsNotMap() {
|
|
XCTAssertNil(decode(Data([0b0010_1111]), metadataSectionSize: 0, databaseSize: 0))
|
|
}
|
|
|
|
func testInit_withBinary() {
|
|
guard let metadata = decode(binaryMetaData, metadataSectionSize: 0, databaseSize: 0) else {
|
|
XCTFail("Input binary is valid. Should have constructed a proper struct.")
|
|
return
|
|
}
|
|
|
|
XCTAssertEqual(expectedMetaData, metadata)
|
|
XCTAssertEqual(expectedMetaData.nodeByteSize, metadata.nodeByteSize)
|
|
XCTAssertEqual(expectedMetaData.searchTreeSize, metadata.searchTreeSize)
|
|
XCTAssertEqual(expectedMetaData.dataSectionSize, metadata.dataSectionSize)
|
|
}
|
|
|
|
}
|
|
|
|
fileprivate let expectedMetaData = Metadata(
|
|
nodeCount: 618459,
|
|
recordSize: 24,
|
|
ipVersion: 6,
|
|
databaseType: "GeoLite2-Country",
|
|
languages: ["de", "en", "es", "fr", "ja", "pt-BR", "ru", "zh-CN"],
|
|
binaryFormatMajorVersion: 2,
|
|
binaryFormatMinorVersion: 0,
|
|
buildEpoch: 1587472614,
|
|
description: ["en": "GeoLite2 Country database"],
|
|
|
|
metadataSectionSize: 0,
|
|
databaseSize: 0
|
|
)
|
|
|
|
fileprivate let binaryMetaData = Data(
|
|
[
|
|
0b11101001, // control byte
|
|
0b01011011, 0b01100010, 0b01101001, 0b01101110,
|
|
0b01100001, 0b01110010, 0b01111001, 0b01011111,
|
|
0b01100110, 0b01101111, 0b01110010, 0b01101101,
|
|
0b01100001, 0b01110100, 0b01011111, 0b01101101,
|
|
0b01100001, 0b01101010, 0b01101111, 0b01110010,
|
|
0b01011111, 0b01110110, 0b01100101, 0b01110010,
|
|
0b01110011, 0b01101001, 0b01101111, 0b01101110,
|
|
0b10100001, 0b00000010, 0b01011011, 0b01100010,
|
|
0b01101001, 0b01101110, 0b01100001, 0b01110010,
|
|
0b01111001, 0b01011111, 0b01100110, 0b01101111,
|
|
0b01110010, 0b01101101, 0b01100001, 0b01110100,
|
|
0b01011111, 0b01101101, 0b01101001, 0b01101110,
|
|
0b01101111, 0b01110010, 0b01011111, 0b01110110,
|
|
0b01100101, 0b01110010, 0b01110011, 0b01101001,
|
|
0b01101111, 0b01101110, 0b10100000, 0b01001011,
|
|
0b01100010, 0b01110101, 0b01101001, 0b01101100,
|
|
0b01100100, 0b01011111, 0b01100101, 0b01110000,
|
|
0b01101111, 0b01100011, 0b01101000, 0b00000100,
|
|
0b00000010, 0b01011110, 0b10011110, 0b11101000,
|
|
0b11100110, 0b01001101, 0b01100100, 0b01100001,
|
|
0b01110100, 0b01100001, 0b01100010, 0b01100001,
|
|
0b01110011, 0b01100101, 0b01011111, 0b01110100,
|
|
0b01111001, 0b01110000, 0b01100101, 0b01010000,
|
|
0b01000111, 0b01100101, 0b01101111, 0b01001100,
|
|
0b01101001, 0b01110100, 0b01100101, 0b00110010,
|
|
0b00101101, 0b01000011, 0b01101111, 0b01110101,
|
|
0b01101110, 0b01110100, 0b01110010, 0b01111001,
|
|
0b01001011, 0b01100100, 0b01100101, 0b01110011,
|
|
0b01100011, 0b01110010, 0b01101001, 0b01110000,
|
|
0b01110100, 0b01101001, 0b01101111, 0b01101110,
|
|
0b11100001, 0b01000010, 0b01100101, 0b01101110,
|
|
0b01011001, 0b01000111, 0b01100101, 0b01101111,
|
|
0b01001100, 0b01101001, 0b01110100, 0b01100101,
|
|
0b00110010, 0b00100000, 0b01000011, 0b01101111,
|
|
0b01110101, 0b01101110, 0b01110100, 0b01110010,
|
|
0b01111001, 0b00100000, 0b01100100, 0b01100001,
|
|
0b01110100, 0b01100001, 0b01100010, 0b01100001,
|
|
0b01110011, 0b01100101, 0b01001010, 0b01101001,
|
|
0b01110000, 0b01011111, 0b01110110, 0b01100101,
|
|
0b01110010, 0b01110011, 0b01101001, 0b01101111,
|
|
0b01101110, 0b10100001, 0b00000110, 0b01001001,
|
|
0b01101100, 0b01100001, 0b01101110, 0b01100111,
|
|
0b01110101, 0b01100001, 0b01100111, 0b01100101,
|
|
0b01110011, 0b00001000, 0b00000100, 0b01000010,
|
|
0b01100100, 0b01100101, 0b01000010, 0b01100101,
|
|
0b01101110, 0b01000010, 0b01100101, 0b01110011,
|
|
0b01000010, 0b01100110, 0b01110010, 0b01000010,
|
|
0b01101010, 0b01100001, 0b01000101, 0b01110000,
|
|
0b01110100, 0b00101101, 0b01000010, 0b01010010,
|
|
0b01000010, 0b01110010, 0b01110101, 0b01000101,
|
|
0b01111010, 0b01101000, 0b00101101, 0b01000011,
|
|
0b01001110, 0b01001010, 0b01101110, 0b01101111,
|
|
0b01100100, 0b01100101, 0b01011111, 0b01100011,
|
|
0b01101111, 0b01110101, 0b01101110, 0b01110100,
|
|
0b11000011, 0b00001001, 0b01101111, 0b11011011,
|
|
0b01001011, 0b01110010, 0b01100101, 0b01100011,
|
|
0b01101111, 0b01110010, 0b01100100, 0b01011111,
|
|
0b01110011, 0b01101001, 0b01111010, 0b01100101,
|
|
0b10100001, 0b00011000
|
|
]
|
|
)
|