Files
bitchat/bitchatTests/Protocols/BitchatFilePacketTests.swift
264a95b61a Raise protocol coverage to 99 percent (#1058)
* Expand protocol coverage with edge-case tests

* Stabilize read receipt transport test

* Stabilize BLE duplicate packet test

---------

Co-authored-by: jack <jackjackbits@users.noreply.github.com>
2026-03-12 17:55:41 -10:00

77 lines
2.5 KiB
Swift

import XCTest
@testable import bitchat
final class BitchatFilePacketTests: XCTestCase {
func testRoundTripPreservesFields() throws {
let content = Data((0..<4096).map { UInt8($0 % 251) })
let packet = BitchatFilePacket(
fileName: "sample.jpg",
fileSize: UInt64(content.count),
mimeType: "image/jpeg",
content: content
)
guard let encoded = packet.encode() else {
return XCTFail("Failed to encode file packet")
}
guard let decoded = BitchatFilePacket.decode(encoded) else {
return XCTFail("Failed to decode file packet")
}
XCTAssertEqual(decoded.fileName, packet.fileName)
XCTAssertEqual(decoded.fileSize, packet.fileSize)
XCTAssertEqual(decoded.mimeType, packet.mimeType)
XCTAssertEqual(decoded.content, packet.content)
}
func testDecodeFallsBackToContentSizeWhenFileSizeMissing() throws {
let content = Data(repeating: 0x7F, count: 1024)
let packet = BitchatFilePacket(
fileName: nil,
fileSize: nil,
mimeType: nil,
content: content
)
guard let encoded = packet.encode() else {
return XCTFail("Failed to encode file packet")
}
guard let decoded = BitchatFilePacket.decode(encoded) else {
return XCTFail("Failed to decode file packet")
}
XCTAssertEqual(decoded.fileSize, UInt64(content.count))
XCTAssertEqual(decoded.content, content)
}
func testDecodeSupportsLegacyEightByteFileSizeTLV() throws {
let content = Data([0x01, 0x02, 0x03, 0x04])
var data = Data()
data.append(0x02)
data.append(contentsOf: [0x00, 0x08])
data.append(contentsOf: [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00])
data.append(0x04)
data.append(contentsOf: [0x00, 0x00, 0x00, 0x04])
data.append(content)
let decoded = try XCTUnwrap(BitchatFilePacket.decode(data))
XCTAssertEqual(decoded.fileSize, 256)
XCTAssertEqual(decoded.content, content)
}
func testDecodeUsesContentCountWhenFileSizeTLVIsMissing() throws {
let content = Data([0xAA, 0xBB, 0xCC])
var data = Data()
data.append(0x04)
data.append(contentsOf: [0x00, 0x00, 0x00, 0x03])
data.append(content)
let decoded = try XCTUnwrap(BitchatFilePacket.decode(data))
XCTAssertEqual(decoded.fileSize, UInt64(content.count))
XCTAssertEqual(decoded.content, content)
}
}