// // Copyright 2024 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only // import XCTest @testable import SignalServiceKit import SignalCoreKit final class ChunkedStreamTransformTests: XCTestCase { func testRoundTrip() throws { let outputStream = ChunkedOutputStreamTransform() let inputStream = ChunkedInputStreamTransform() let data1 = "TestString".data(using: .utf8)! let transformedData = try outputStream.transform(data: data1) let roundTripData = try inputStream.transform(data: transformedData) XCTAssertEqual(data1, roundTripData) } func testSplit() throws { let outputStream = ChunkedOutputStreamTransform() let inputStream = ChunkedInputStreamTransform() let data1 = "TestString".data(using: .utf8)! let transformedData = try outputStream.transform(data: data1) let part1 = transformedData.subdata(in: 0..<5) let part2 = transformedData.subdata(in: 5.. 0 else { break } results.append(result) } zip(data1, results).forEach { XCTAssertEqual($0, $1) } } } final class GzipStreamTransformTests: XCTestCase { func testRoundtrip() throws { let outputStream = try GzipStreamTransform(.compress) let inputStream = try GzipStreamTransform(.decompress) let data1 = "TestString".data(using: .utf8)! var transformedData = try outputStream.transform(data: data1) transformedData.append(try outputStream.finalize()) var roundTripData = try inputStream.transform(data: transformedData) roundTripData.append(try inputStream.finalize()) XCTAssertEqual(data1, roundTripData) } func testRoundtrip2() throws { let outputStream = try GzipStreamTransform(.compress) let inputStream = try GzipStreamTransform(.decompress) let data1 = Randomness.generateRandomBytes(68000) var transformedData = try outputStream.transform(data: data1) transformedData.append(try outputStream.finalize()) var roundTripData = try inputStream.transform(data: transformedData) roundTripData.append(try inputStream.finalize()) XCTAssertEqual(data1, roundTripData) } func testRoundtrip3() throws { let outputStream = try GzipStreamTransform(.compress) let inputStream = try GzipStreamTransform(.decompress) let data1 = String(repeating: "abcdefghijklmnopqrstuv", count: 1600).data(using: .utf8)! var transformedData = try outputStream.transform(data: data1) transformedData.append(try outputStream.finalize()) var roundTripData = try inputStream.transform(data: transformedData) roundTripData.append(try inputStream.finalize()) XCTAssertEqual(data1, roundTripData) } func testFailedCRC() throws { let outputStream = try GzipStreamTransform(.compress) let inputStream = try GzipStreamTransform(.decompress) let data1 = Randomness.generateRandomBytes(4096) var transformedData = try outputStream.transform(data: data1) let tmpData = try outputStream.finalize() transformedData.append(tmpData.subdata(in: 0..<(tmpData.count - 2000))) transformedData.append(1) transformedData.append(tmpData.subdata(in: (tmpData.count - 2000)..