mirror of https://github.com/cirruslabs/tart.git
56 lines
2.1 KiB
Swift
56 lines
2.1 KiB
Swift
import Foundation
|
|
import XCTest
|
|
@testable import tart
|
|
|
|
final class DigestTests: XCTestCase {
|
|
func testEmptyData() throws {
|
|
let data = Data("".utf8)
|
|
|
|
let digest = Digest()
|
|
digest.update(data)
|
|
XCTAssertEqual(digest.finalize(), "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")
|
|
|
|
XCTAssertEqual(Digest.hash(data), "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")
|
|
}
|
|
|
|
func testNonEmptyData() throws {
|
|
let data = Data("The quick brown fox jumps over the lazy dog".utf8)
|
|
|
|
let digest = Digest()
|
|
digest.update(data)
|
|
XCTAssertEqual(digest.finalize(), "sha256:d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592")
|
|
|
|
XCTAssertEqual(Digest.hash(data), "sha256:d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592")
|
|
}
|
|
|
|
func testFileAndRangeHashingMatchDataHashing() throws {
|
|
let prefix = Data(repeating: 0x61, count: 4 * 1024 * 1024 + 17)
|
|
let range = Data("range".utf8)
|
|
let suffix = Data(repeating: 0x62, count: 23)
|
|
let data = prefix + range + suffix
|
|
let url = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString)
|
|
try data.write(to: url)
|
|
defer { try? FileManager.default.removeItem(at: url) }
|
|
|
|
XCTAssertEqual(try Digest.hash(url), Digest.hash(data))
|
|
XCTAssertEqual(try Digest.hash(url, offset: UInt64(prefix.count), size: UInt64(range.count)), Digest.hash(range))
|
|
}
|
|
|
|
func testRangeHashingRejectsOutOfBoundsRanges() throws {
|
|
let url = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString)
|
|
try Data("range".utf8).write(to: url)
|
|
defer { try? FileManager.default.removeItem(at: url) }
|
|
|
|
XCTAssertThrowsError(try Digest.hash(url, offset: 6, size: 0)) { error in
|
|
guard case DigestError.InvalidOffset = error else {
|
|
return XCTFail("unexpected error: \(error)")
|
|
}
|
|
}
|
|
XCTAssertThrowsError(try Digest.hash(url, offset: 1, size: UInt64.max)) { error in
|
|
guard case DigestError.InvalidSize = error else {
|
|
return XCTFail("unexpected error: \(error)")
|
|
}
|
|
}
|
|
}
|
|
}
|