TM-SGNL-iOS/SignalServiceKit/tests/Util/TransformingInputStreamTests.swift
TeleMessage developers dde0620daf initial commit
2025-05-03 12:28:28 -07:00

51 lines
1.7 KiB
Swift

//
// Copyright 2024 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import XCTest
@testable import SignalServiceKit
final class TransformingInputStreamTests: XCTestCase {
func testRoundTrip() throws {
let iv = Randomness.generateRandomBytes(UInt(16))
let encryptionKey = Randomness.generateRandomBytes(UInt(32))
let outputStream = TextBackedOutputStream()
let transformingOutputStream = TransformingOutputStream(
transforms: [
ChunkedOutputStreamTransform(),
try GzipStreamTransform(.compress),
try EncryptingStreamTransform(iv: iv, encryptionKey: encryptionKey)
],
outputStream: outputStream
)
try transformingOutputStream.write(data: "w".data(using: .utf8)!)
try transformingOutputStream.write(data: "xx".data(using: .utf8)!)
try transformingOutputStream.write(data: "yyy".data(using: .utf8)!)
try transformingOutputStream.close()
let inputData = outputStream.accumulation
let inputStream = TextBackedInputStream(data: inputData)
let transformingIntputStream = TransformingInputStream(
transforms: [
try DecryptingStreamTransform(encryptionKey: encryptionKey),
try GzipStreamTransform(.decompress),
ChunkedInputStreamTransform()
],
inputStream: inputStream
)
var results = [Data]()
while transformingIntputStream.hasBytesAvailable {
results.append(try transformingIntputStream.read(maxLength: 1024))
}
try transformingIntputStream.close()
XCTAssertEqual(results.filter({$0.count > 0}).count, 3)
}
}