mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-25 02:25:20 +00:00
Fix all compilation errors and warnings in test suite
- Fixed mock service property overrides to match base class properties - Added missing CryptoKit imports where needed - Fixed immutable property assignments by creating new instances - Replaced XCTAssertThrows with XCTAssertThrowsError - Fixed DeliveryAck serialization method names (serialize -> encode) - Fixed unused variable warnings - Ensured all BitchatPacket modifications create new instances - Fixed BitchatMessage property mutations by creating new instances All test targets now build successfully for both iOS and macOS platforms.
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
//
|
||||
|
||||
import XCTest
|
||||
import CryptoKit
|
||||
@testable import bitchat
|
||||
|
||||
final class PrivateChatE2ETests: XCTestCase {
|
||||
@@ -134,7 +135,7 @@ final class PrivateChatE2ETests: XCTestCase {
|
||||
hopCount: 1
|
||||
) {
|
||||
// Send ACK back
|
||||
let ackData = ack.serialize()
|
||||
let ackData = ack.encode()!
|
||||
let ackPacket = TestHelpers.createTestPacket(
|
||||
type: 0x03,
|
||||
senderID: TestConstants.testPeerID2,
|
||||
@@ -149,20 +150,25 @@ final class PrivateChatE2ETests: XCTestCase {
|
||||
// Setup Alice to process ACK
|
||||
alice.packetDeliveryHandler = { packet in
|
||||
if packet.type == 0x03 {
|
||||
if let ack = DeliveryAck.deserialize(from: packet.payload) {
|
||||
if let ack = DeliveryAck.decode(from: packet.payload) {
|
||||
self.deliveryTracker.processDeliveryAck(ack)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Track the message
|
||||
let message = TestHelpers.createTestMessage(
|
||||
let trackedMessage = BitchatMessage(
|
||||
id: messageID,
|
||||
sender: TestConstants.testNickname1,
|
||||
content: TestConstants.testMessage1,
|
||||
timestamp: Date(),
|
||||
isRelay: false,
|
||||
originalSender: nil,
|
||||
isPrivate: true,
|
||||
recipientNickname: TestConstants.testNickname2
|
||||
recipientNickname: TestConstants.testNickname2,
|
||||
senderPeerID: TestConstants.testPeerID1,
|
||||
mentions: nil
|
||||
)
|
||||
var trackedMessage = message
|
||||
trackedMessage.id = messageID
|
||||
|
||||
deliveryTracker.trackMessage(
|
||||
trackedMessage,
|
||||
@@ -187,8 +193,8 @@ final class PrivateChatE2ETests: XCTestCase {
|
||||
let messageID = UUID().uuidString
|
||||
let expectation = XCTestExpectation(description: "Delivery failed due to timeout")
|
||||
|
||||
// Use shorter timeout for testing
|
||||
let shortTimeoutTracker = DeliveryTracker()
|
||||
// Use shared instance (can't create new one due to private init)
|
||||
let shortTimeoutTracker = DeliveryTracker.shared
|
||||
|
||||
let cancellable = shortTimeoutTracker.deliveryStatusUpdated.sink { update in
|
||||
if update.messageID == messageID {
|
||||
@@ -202,13 +208,18 @@ final class PrivateChatE2ETests: XCTestCase {
|
||||
}
|
||||
}
|
||||
|
||||
let message = TestHelpers.createTestMessage(
|
||||
let trackedMessage = BitchatMessage(
|
||||
id: messageID,
|
||||
sender: TestConstants.testNickname1,
|
||||
content: TestConstants.testMessage1,
|
||||
timestamp: Date(),
|
||||
isRelay: false,
|
||||
originalSender: nil,
|
||||
isPrivate: true,
|
||||
recipientNickname: TestConstants.testNickname2
|
||||
recipientNickname: TestConstants.testNickname2,
|
||||
senderPeerID: TestConstants.testPeerID1,
|
||||
mentions: nil
|
||||
)
|
||||
var trackedMessage = message
|
||||
trackedMessage.id = messageID
|
||||
|
||||
// Track with short timeout (will use default 30s for private messages)
|
||||
shortTimeoutTracker.trackMessage(
|
||||
@@ -347,9 +358,15 @@ final class PrivateChatE2ETests: XCTestCase {
|
||||
message.isPrivate {
|
||||
do {
|
||||
let encrypted = try aliceManager.encrypt(packet.payload, for: TestConstants.testPeerID2)
|
||||
var encryptedPacket = packet
|
||||
encryptedPacket.type = 0x02 // Encrypted message type
|
||||
encryptedPacket.payload = encrypted
|
||||
let encryptedPacket = BitchatPacket(
|
||||
type: 0x02, // Encrypted message type
|
||||
senderID: packet.senderID,
|
||||
recipientID: packet.recipientID,
|
||||
timestamp: packet.timestamp,
|
||||
payload: encrypted,
|
||||
signature: packet.signature,
|
||||
ttl: packet.ttl
|
||||
)
|
||||
self.bob.simulateIncomingPacket(encryptedPacket)
|
||||
} catch {
|
||||
XCTFail("Encryption failed: \(error)")
|
||||
@@ -527,7 +544,7 @@ final class PrivateChatE2ETests: XCTestCase {
|
||||
myNickname: TestConstants.testNickname2,
|
||||
hopCount: 1
|
||||
) {
|
||||
let ackData = ack.serialize()
|
||||
let ackData = ack.encode()!
|
||||
let ackPacket = TestHelpers.createTestPacket(
|
||||
type: 0x03,
|
||||
senderID: TestConstants.testPeerID2,
|
||||
@@ -548,8 +565,8 @@ final class PrivateChatE2ETests: XCTestCase {
|
||||
|
||||
private func createMockService(peerID: String, nickname: String) -> MockBluetoothMeshService {
|
||||
let service = MockBluetoothMeshService()
|
||||
service.peerID = peerID
|
||||
service.nickname = nickname
|
||||
service.myPeerID = peerID
|
||||
service.mockNickname = nickname
|
||||
return service
|
||||
}
|
||||
|
||||
|
||||
@@ -101,14 +101,29 @@ final class PublicChatE2ETests: XCTestCase {
|
||||
message.sender == TestConstants.testNickname1 {
|
||||
|
||||
// Create relay message
|
||||
var relayMessage = message
|
||||
relayMessage.isRelay = true
|
||||
relayMessage.originalSender = message.sender
|
||||
let relayMessage = BitchatMessage(
|
||||
id: message.id,
|
||||
sender: message.sender,
|
||||
content: message.content,
|
||||
timestamp: message.timestamp,
|
||||
isRelay: true,
|
||||
originalSender: message.sender,
|
||||
isPrivate: message.isPrivate,
|
||||
recipientNickname: message.recipientNickname,
|
||||
senderPeerID: message.senderPeerID,
|
||||
mentions: message.mentions
|
||||
)
|
||||
|
||||
if let relayPayload = relayMessage.toBinaryPayload() {
|
||||
var relayPacket = packet
|
||||
relayPacket.payload = relayPayload
|
||||
relayPacket.ttl = packet.ttl - 1
|
||||
let relayPacket = BitchatPacket(
|
||||
type: packet.type,
|
||||
senderID: packet.senderID,
|
||||
recipientID: packet.recipientID,
|
||||
timestamp: packet.timestamp,
|
||||
payload: relayPayload,
|
||||
signature: packet.signature,
|
||||
ttl: packet.ttl - 1
|
||||
)
|
||||
|
||||
// Simulate relay to Charlie
|
||||
self.charlie.simulateIncomingPacket(relayPacket)
|
||||
@@ -394,8 +409,8 @@ final class PublicChatE2ETests: XCTestCase {
|
||||
|
||||
private func createMockService(peerID: String, nickname: String) -> MockBluetoothMeshService {
|
||||
let service = MockBluetoothMeshService()
|
||||
service.peerID = peerID
|
||||
service.nickname = nickname
|
||||
service.myPeerID = peerID
|
||||
service.mockNickname = nickname
|
||||
return service
|
||||
}
|
||||
|
||||
@@ -414,17 +429,29 @@ final class PublicChatE2ETests: XCTestCase {
|
||||
guard message.senderPeerID != node.peerID else { return }
|
||||
|
||||
// Create relay message
|
||||
var relayMessage = message
|
||||
if !relayMessage.isRelay {
|
||||
relayMessage.isRelay = true
|
||||
relayMessage.originalSender = message.sender
|
||||
}
|
||||
let relayMessage = BitchatMessage(
|
||||
id: message.id,
|
||||
sender: message.sender,
|
||||
content: message.content,
|
||||
timestamp: message.timestamp,
|
||||
isRelay: true,
|
||||
originalSender: message.isRelay ? message.originalSender : message.sender,
|
||||
isPrivate: message.isPrivate,
|
||||
recipientNickname: message.recipientNickname,
|
||||
senderPeerID: message.senderPeerID,
|
||||
mentions: message.mentions
|
||||
)
|
||||
|
||||
if let relayPayload = relayMessage.toBinaryPayload() {
|
||||
var relayPacket = packet
|
||||
relayPacket.payload = relayPayload
|
||||
relayPacket.ttl = packet.ttl - 1
|
||||
relayPacket.senderID = node.peerID.data(using: .utf8)!
|
||||
let relayPacket = BitchatPacket(
|
||||
type: packet.type,
|
||||
senderID: node.peerID.data(using: .utf8)!,
|
||||
recipientID: packet.recipientID,
|
||||
timestamp: packet.timestamp,
|
||||
payload: relayPayload,
|
||||
signature: packet.signature,
|
||||
ttl: packet.ttl - 1
|
||||
)
|
||||
|
||||
// Relay to next hops
|
||||
for nextHop in nextHops {
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
//
|
||||
|
||||
import XCTest
|
||||
import CryptoKit
|
||||
@testable import bitchat
|
||||
|
||||
final class IntegrationTests: XCTestCase {
|
||||
@@ -40,7 +41,7 @@ final class IntegrationTests: XCTestCase {
|
||||
var messageMatrix: [String: Set<String>] = [:]
|
||||
|
||||
// Each node should receive messages from all others
|
||||
for (senderName, sender) in nodes {
|
||||
for (senderName, _) in nodes {
|
||||
messageMatrix[senderName] = []
|
||||
|
||||
for (receiverName, receiver) in nodes where receiverName != senderName {
|
||||
@@ -106,7 +107,7 @@ final class IntegrationTests: XCTestCase {
|
||||
connect("Charlie", "David")
|
||||
|
||||
let expectation = XCTestExpectation(description: "Partitions merge and communicate")
|
||||
var messagesBeforeMerge = 0
|
||||
let messagesBeforeMerge = 0
|
||||
var messagesAfterMerge = 0
|
||||
|
||||
// Monitor cross-partition messages
|
||||
@@ -189,8 +190,15 @@ final class IntegrationTests: XCTestCase {
|
||||
} else if packet.type == 0x02 { // Would be encrypted
|
||||
// Simulate encryption
|
||||
if let encrypted = try? self.noiseManagers["Alice"]!.encrypt(packet.payload, for: TestConstants.testPeerID2) {
|
||||
var encPacket = packet
|
||||
encPacket.payload = encrypted
|
||||
let encPacket = BitchatPacket(
|
||||
type: packet.type,
|
||||
senderID: packet.senderID,
|
||||
recipientID: packet.recipientID,
|
||||
timestamp: packet.timestamp,
|
||||
payload: encrypted,
|
||||
signature: packet.signature,
|
||||
ttl: packet.ttl
|
||||
)
|
||||
self.nodes["Bob"]!.simulateIncomingPacket(encPacket)
|
||||
}
|
||||
}
|
||||
@@ -403,9 +411,15 @@ final class IntegrationTests: XCTestCase {
|
||||
message.isPrivate && packet.recipientID != nil {
|
||||
// Encrypt private messages
|
||||
if let encrypted = try? self.noiseManagers["Alice"]!.encrypt(packet.payload, for: TestConstants.testPeerID2) {
|
||||
var encPacket = packet
|
||||
encPacket.type = 0x02
|
||||
encPacket.payload = encrypted
|
||||
let encPacket = BitchatPacket(
|
||||
type: 0x02,
|
||||
senderID: packet.senderID,
|
||||
recipientID: packet.recipientID,
|
||||
timestamp: packet.timestamp,
|
||||
payload: encrypted,
|
||||
signature: packet.signature,
|
||||
ttl: packet.ttl
|
||||
)
|
||||
self.nodes["Bob"]!.simulateIncomingPacket(encPacket)
|
||||
}
|
||||
}
|
||||
@@ -451,8 +465,8 @@ final class IntegrationTests: XCTestCase {
|
||||
|
||||
private func createNode(_ name: String, peerID: String) {
|
||||
let node = MockBluetoothMeshService()
|
||||
node.peerID = peerID
|
||||
node.nickname = name
|
||||
node.myPeerID = peerID
|
||||
node.mockNickname = name
|
||||
nodes[name] = node
|
||||
|
||||
// Create Noise manager
|
||||
@@ -490,16 +504,29 @@ final class IntegrationTests: XCTestCase {
|
||||
if let message = BitchatMessage.fromBinaryPayload(packet.payload) {
|
||||
guard message.senderPeerID != node.peerID else { return }
|
||||
|
||||
var relayMessage = message
|
||||
if !relayMessage.isRelay {
|
||||
relayMessage.isRelay = true
|
||||
relayMessage.originalSender = message.sender
|
||||
}
|
||||
let relayMessage = BitchatMessage(
|
||||
id: message.id,
|
||||
sender: message.sender,
|
||||
content: message.content,
|
||||
timestamp: message.timestamp,
|
||||
isRelay: true,
|
||||
originalSender: message.isRelay ? message.originalSender : message.sender,
|
||||
isPrivate: message.isPrivate,
|
||||
recipientNickname: message.recipientNickname,
|
||||
senderPeerID: message.senderPeerID,
|
||||
mentions: message.mentions
|
||||
)
|
||||
|
||||
if let relayPayload = relayMessage.toBinaryPayload() {
|
||||
var relayPacket = packet
|
||||
relayPacket.payload = relayPayload
|
||||
relayPacket.ttl = packet.ttl - 1
|
||||
let relayPacket = BitchatPacket(
|
||||
type: packet.type,
|
||||
senderID: packet.senderID,
|
||||
recipientID: packet.recipientID,
|
||||
timestamp: packet.timestamp,
|
||||
payload: relayPayload,
|
||||
signature: packet.signature,
|
||||
ttl: packet.ttl - 1
|
||||
)
|
||||
|
||||
for hop in nextHops {
|
||||
self.nodes[hop]?.simulateIncomingPacket(relayPacket)
|
||||
|
||||
@@ -17,44 +17,58 @@ class MockBluetoothMeshService: BluetoothMeshService {
|
||||
var messageDeliveryHandler: ((BitchatMessage) -> Void)?
|
||||
var packetDeliveryHandler: ((BitchatPacket) -> Void)?
|
||||
|
||||
// Override these properties
|
||||
var mockNickname: String = "MockUser"
|
||||
|
||||
override var myPeerID: String {
|
||||
didSet {
|
||||
// Update when changed
|
||||
}
|
||||
}
|
||||
|
||||
var nickname: String {
|
||||
return mockNickname
|
||||
}
|
||||
|
||||
var peerID: String {
|
||||
return myPeerID
|
||||
}
|
||||
|
||||
override init() {
|
||||
super.init()
|
||||
self.myPeerID = "MOCK1234"
|
||||
}
|
||||
|
||||
func simulateConnectedPeer(_ peerID: String) {
|
||||
connectedPeers.insert(peerID)
|
||||
delegate?.bluetoothMeshService(self, didConnectToPeer: peerID, peerInfo: PeerInfo(
|
||||
mcPeerID: MCPeerID(displayName: peerID),
|
||||
peerID: peerID,
|
||||
nickname: "Test User",
|
||||
publicKey: nil,
|
||||
capabilities: PeerCapabilities(supportedProtocolVersions: [1])
|
||||
))
|
||||
delegate?.didConnectToPeer(peerID)
|
||||
delegate?.didUpdatePeerList(Array(connectedPeers))
|
||||
}
|
||||
|
||||
func simulateDisconnectedPeer(_ peerID: String) {
|
||||
connectedPeers.remove(peerID)
|
||||
delegate?.bluetoothMeshService(self, didDisconnectFromPeer: peerID)
|
||||
delegate?.didDisconnectFromPeer(peerID)
|
||||
delegate?.didUpdatePeerList(Array(connectedPeers))
|
||||
}
|
||||
|
||||
override func sendMessage(_ content: String, mentions: [String], to room: String? = nil, messageID: String? = nil, timestamp: Date? = nil) {
|
||||
let message = BitchatMessage(
|
||||
id: messageID ?? UUID().uuidString,
|
||||
sender: nickname,
|
||||
sender: mockNickname,
|
||||
content: content,
|
||||
timestamp: timestamp ?? Date(),
|
||||
isRelay: false,
|
||||
originalSender: nil,
|
||||
isPrivate: false,
|
||||
recipientNickname: nil,
|
||||
senderPeerID: peerID,
|
||||
senderPeerID: myPeerID,
|
||||
mentions: mentions.isEmpty ? nil : mentions
|
||||
)
|
||||
|
||||
if let payload = message.toBinaryPayload() {
|
||||
let packet = BitchatPacket(
|
||||
type: 0x01,
|
||||
senderID: peerID.data(using: .utf8)!,
|
||||
senderID: myPeerID.data(using: .utf8)!,
|
||||
recipientID: nil,
|
||||
timestamp: UInt64(Date().timeIntervalSince1970 * 1000),
|
||||
payload: payload,
|
||||
@@ -67,7 +81,7 @@ class MockBluetoothMeshService: BluetoothMeshService {
|
||||
|
||||
// Simulate local echo
|
||||
DispatchQueue.main.async { [weak self] in
|
||||
self?.delegate?.bluetoothMeshService(self!, didReceiveMessage: message)
|
||||
self?.delegate?.didReceiveMessage(message)
|
||||
}
|
||||
|
||||
// Call delivery handler if set
|
||||
@@ -78,21 +92,21 @@ class MockBluetoothMeshService: BluetoothMeshService {
|
||||
override func sendPrivateMessage(_ content: String, to recipientPeerID: String, recipientNickname: String, messageID: String? = nil) {
|
||||
let message = BitchatMessage(
|
||||
id: messageID ?? UUID().uuidString,
|
||||
sender: nickname,
|
||||
sender: mockNickname,
|
||||
content: content,
|
||||
timestamp: Date(),
|
||||
isRelay: false,
|
||||
originalSender: nil,
|
||||
isPrivate: true,
|
||||
recipientNickname: recipientNickname,
|
||||
senderPeerID: peerID,
|
||||
senderPeerID: myPeerID,
|
||||
mentions: nil
|
||||
)
|
||||
|
||||
if let payload = message.toBinaryPayload() {
|
||||
let packet = BitchatPacket(
|
||||
type: 0x01,
|
||||
senderID: peerID.data(using: .utf8)!,
|
||||
senderID: myPeerID.data(using: .utf8)!,
|
||||
recipientID: recipientPeerID.data(using: .utf8)!,
|
||||
timestamp: UInt64(Date().timeIntervalSince1970 * 1000),
|
||||
payload: payload,
|
||||
@@ -105,7 +119,7 @@ class MockBluetoothMeshService: BluetoothMeshService {
|
||||
|
||||
// Simulate local echo
|
||||
DispatchQueue.main.async { [weak self] in
|
||||
self?.delegate?.bluetoothMeshService(self!, didReceiveMessage: message)
|
||||
self?.delegate?.didReceiveMessage(message)
|
||||
}
|
||||
|
||||
// Call delivery handler if set
|
||||
@@ -114,18 +128,18 @@ class MockBluetoothMeshService: BluetoothMeshService {
|
||||
}
|
||||
|
||||
func simulateIncomingMessage(_ message: BitchatMessage) {
|
||||
delegate?.bluetoothMeshService(self, didReceiveMessage: message)
|
||||
delegate?.didReceiveMessage(message)
|
||||
}
|
||||
|
||||
func simulateIncomingPacket(_ packet: BitchatPacket) {
|
||||
// Process through the actual handling logic
|
||||
if let message = BitchatMessage.fromBinaryPayload(packet.payload) {
|
||||
delegate?.bluetoothMeshService(self, didReceiveMessage: message)
|
||||
delegate?.didReceiveMessage(message)
|
||||
}
|
||||
packetDeliveryHandler?(packet)
|
||||
}
|
||||
|
||||
override func getConnectedPeers() -> [String] {
|
||||
func getConnectedPeers() -> [String] {
|
||||
return Array(connectedPeers)
|
||||
}
|
||||
}
|
||||
@@ -84,13 +84,13 @@ final class NoiseProtocolTests: XCTestCase {
|
||||
)
|
||||
|
||||
// Cannot process message before starting handshake
|
||||
XCTAssertThrows(try aliceSession.processHandshakeMessage(Data()))
|
||||
XCTAssertThrowsError(try aliceSession.processHandshakeMessage(Data()))
|
||||
|
||||
// Start handshake
|
||||
_ = try aliceSession.startHandshake()
|
||||
|
||||
// Cannot start handshake twice
|
||||
XCTAssertThrows(try aliceSession.startHandshake())
|
||||
XCTAssertThrowsError(try aliceSession.startHandshake())
|
||||
}
|
||||
|
||||
// MARK: - Encryption/Decryption Tests
|
||||
@@ -150,8 +150,8 @@ final class NoiseProtocolTests: XCTestCase {
|
||||
let plaintext = "test".data(using: .utf8)!
|
||||
|
||||
// Should throw when not established
|
||||
XCTAssertThrows(try aliceSession.encrypt(plaintext))
|
||||
XCTAssertThrows(try aliceSession.decrypt(plaintext))
|
||||
XCTAssertThrowsError(try aliceSession.encrypt(plaintext))
|
||||
XCTAssertThrowsError(try aliceSession.decrypt(plaintext))
|
||||
}
|
||||
|
||||
// MARK: - Session Manager Tests
|
||||
@@ -255,7 +255,7 @@ final class NoiseProtocolTests: XCTestCase {
|
||||
ciphertext[ciphertext.count / 2] ^= 0xFF
|
||||
|
||||
// Decryption should fail
|
||||
XCTAssertThrows(try bobSession.decrypt(ciphertext))
|
||||
XCTAssertThrowsError(try bobSession.decrypt(ciphertext))
|
||||
}
|
||||
|
||||
func testReplayPrevention() throws {
|
||||
@@ -268,7 +268,7 @@ final class NoiseProtocolTests: XCTestCase {
|
||||
_ = try bobSession.decrypt(ciphertext)
|
||||
|
||||
// Replaying the same ciphertext should fail
|
||||
XCTAssertThrows(try bobSession.decrypt(ciphertext))
|
||||
XCTAssertThrowsError(try bobSession.decrypt(ciphertext))
|
||||
}
|
||||
|
||||
func testSessionIsolation() throws {
|
||||
@@ -288,7 +288,7 @@ final class NoiseProtocolTests: XCTestCase {
|
||||
let ciphertext1 = try aliceSession1.encrypt(plaintext)
|
||||
|
||||
// Should not be able to decrypt with session 2
|
||||
XCTAssertThrows(try bobSession2.decrypt(ciphertext1))
|
||||
XCTAssertThrowsError(try bobSession2.decrypt(ciphertext1))
|
||||
|
||||
// But should work with correct session
|
||||
let decrypted = try bobSession1.decrypt(ciphertext1)
|
||||
|
||||
@@ -58,8 +58,9 @@ final class BinaryProtocolTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testPacketWithSignature() throws {
|
||||
var packet = TestHelpers.createTestPacket()
|
||||
packet.signature = TestConstants.testSignature
|
||||
let packet = TestHelpers.createTestPacket(
|
||||
signature: TestConstants.testSignature
|
||||
)
|
||||
|
||||
// Encode and decode
|
||||
guard let encodedData = BinaryProtocol.encode(packet),
|
||||
@@ -208,9 +209,18 @@ final class BinaryProtocolTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testRelayMessageEncoding() throws {
|
||||
var message = TestHelpers.createTestMessage()
|
||||
message.isRelay = true
|
||||
message.originalSender = TestConstants.testNickname3
|
||||
let message = BitchatMessage(
|
||||
id: UUID().uuidString,
|
||||
sender: TestConstants.testNickname1,
|
||||
content: TestConstants.testMessage1,
|
||||
timestamp: Date(),
|
||||
isRelay: true,
|
||||
originalSender: TestConstants.testNickname3,
|
||||
isPrivate: false,
|
||||
recipientNickname: nil,
|
||||
senderPeerID: TestConstants.testPeerID1,
|
||||
mentions: nil
|
||||
)
|
||||
|
||||
guard let payload = message.toBinaryPayload(),
|
||||
let decodedMessage = BitchatMessage.fromBinaryPayload(payload) else {
|
||||
@@ -234,7 +244,7 @@ final class BinaryProtocolTests: XCTestCase {
|
||||
XCTAssertNil(BinaryProtocol.decode(random))
|
||||
|
||||
// Corrupted header
|
||||
var packet = TestHelpers.createTestPacket()
|
||||
let packet = TestHelpers.createTestPacket()
|
||||
guard var encoded = BinaryProtocol.encode(packet) else {
|
||||
XCTFail("Failed to encode test packet")
|
||||
return
|
||||
@@ -275,17 +285,8 @@ final class BinaryProtocolTests: XCTestCase {
|
||||
// MARK: - Protocol Version Tests
|
||||
|
||||
func testProtocolVersionHandling() throws {
|
||||
// Test with supported version
|
||||
let packet = BitchatPacket(
|
||||
version: 1,
|
||||
type: 0x01,
|
||||
senderID: TestConstants.testPeerID1.data(using: .utf8)!,
|
||||
recipientID: nil,
|
||||
timestamp: UInt64(Date().timeIntervalSince1970 * 1000),
|
||||
payload: "test".data(using: .utf8)!,
|
||||
signature: nil,
|
||||
ttl: 3
|
||||
)
|
||||
// Test with supported version (version is always 1 in init)
|
||||
let packet = TestHelpers.createTestPacket()
|
||||
|
||||
guard let encoded = BinaryProtocol.encode(packet),
|
||||
let decoded = BinaryProtocol.decode(encoded) else {
|
||||
@@ -297,15 +298,17 @@ final class BinaryProtocolTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testUnsupportedProtocolVersion() throws {
|
||||
// Create packet with unsupported version
|
||||
var packet = TestHelpers.createTestPacket()
|
||||
packet.version = 99 // Unsupported version
|
||||
// Create packet data with unsupported version
|
||||
let packet = TestHelpers.createTestPacket()
|
||||
|
||||
guard let encoded = BinaryProtocol.encode(packet) else {
|
||||
guard var encoded = BinaryProtocol.encode(packet) else {
|
||||
XCTFail("Failed to encode packet")
|
||||
return
|
||||
}
|
||||
|
||||
// Manually change version byte to unsupported value
|
||||
encoded[0] = 99 // Unsupported version
|
||||
|
||||
// Should fail to decode
|
||||
XCTAssertNil(BinaryProtocol.decode(encoded))
|
||||
}
|
||||
|
||||
@@ -28,6 +28,5 @@ struct TestConstants {
|
||||
static let testMessage3 = "This is a test message"
|
||||
static let testLongMessage = String(repeating: "This is a long message. ", count: 100)
|
||||
|
||||
static let testRoomID = "test-room"
|
||||
static let testSignature = Data(repeating: 0xAB, count: 64)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,14 +20,9 @@ class TestHelpers {
|
||||
return (privateKey, publicKey)
|
||||
}
|
||||
|
||||
static func generateTestIdentity(peerID: String, nickname: String) -> UserProfile {
|
||||
static func generateTestIdentity(peerID: String, nickname: String) -> (peerID: String, nickname: String, privateKey: Curve25519.KeyAgreement.PrivateKey, publicKey: Curve25519.KeyAgreement.PublicKey) {
|
||||
let (privateKey, publicKey) = generateTestKeyPair()
|
||||
return UserProfile(
|
||||
nickname: nickname,
|
||||
peerID: peerID,
|
||||
publicKey: publicKey.rawRepresentation,
|
||||
privateKey: privateKey.rawRepresentation
|
||||
)
|
||||
return (peerID: peerID, nickname: nickname, privateKey: privateKey, publicKey: publicKey)
|
||||
}
|
||||
|
||||
// MARK: - Message Creation
|
||||
@@ -59,6 +54,7 @@ class TestHelpers {
|
||||
senderID: String = TestConstants.testPeerID1,
|
||||
recipientID: String? = nil,
|
||||
payload: Data = "test payload".data(using: .utf8)!,
|
||||
signature: Data? = nil,
|
||||
ttl: UInt8 = 3
|
||||
) -> BitchatPacket {
|
||||
return BitchatPacket(
|
||||
@@ -67,7 +63,7 @@ class TestHelpers {
|
||||
recipientID: recipientID?.data(using: .utf8),
|
||||
timestamp: UInt64(Date().timeIntervalSince1970 * 1000),
|
||||
payload: payload,
|
||||
signature: nil,
|
||||
signature: signature,
|
||||
ttl: ttl
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user