PeerID 11/n: Noise types use PeerID + create separate files (#750)

* Noise types use PeerID

* Fix tests

* Extract `NoiseSessionManager` into a separate file

* Extract `NoiseSessionState` into a separate file

* Remove `failed` state from `NoiseSessionState`

* Extract `NoiseSessionError` into a separate file
This commit is contained in:
Islam
2025-10-05 15:51:06 +02:00
committed by GitHub
parent 64f91bb1d6
commit 03c357f048
13 changed files with 329 additions and 311 deletions
@@ -301,9 +301,9 @@ final class PrivateChatE2ETests: XCTestCase {
// MARK: - Helper Methods
private func createMockService(peerID: String, nickname: String) -> MockBluetoothMeshService {
private func createMockService(peerID: PeerID, nickname: String) -> MockBluetoothMeshService {
let service = MockBluetoothMeshService()
service.myPeerID = peerID
service.myPeerID = peerID.id
service.mockNickname = nickname
return service
}
@@ -200,9 +200,9 @@ final class PublicChatE2ETests: XCTestCase {
}
// Inject at Bob with TTL=2 so Charlie sees it (TTL->1) and does not relay to David
let msg = TestHelpers.createTestMessage(content: TestConstants.testMessage1, sender: TestConstants.testNickname1, senderPeerID: alice.peerID)
let msg = TestHelpers.createTestMessage(content: TestConstants.testMessage1, sender: TestConstants.testNickname1, senderPeerID: PeerID(str: alice.peerID))
if let payload = msg.toBinaryPayload() {
let pkt = TestHelpers.createTestPacket(senderID: alice.peerID, payload: payload, ttl: 2)
let pkt = TestHelpers.createTestPacket(senderID: PeerID(str: alice.peerID), payload: payload, ttl: 2)
bob.simulateIncomingPacket(pkt)
}
@@ -419,9 +419,9 @@ final class PublicChatE2ETests: XCTestCase {
// MARK: - Helper Methods
private func createMockService(peerID: String, nickname: String) -> MockBluetoothMeshService {
private func createMockService(peerID: PeerID, nickname: String) -> MockBluetoothMeshService {
let service = MockBluetoothMeshService()
service.myPeerID = peerID
service.myPeerID = peerID.id
service.mockNickname = nickname
return service
}
@@ -484,10 +484,13 @@ final class IntegrationTests: XCTestCase {
guard let aliceManager = noiseManagers["Alice"],
let bobManager = noiseManagers["Bob"],
let alicePeerID = nodes["Alice"]?.peerID,
let bobPeerID = nodes["Bob"]?.peerID else {
let aliceStringPeerID = nodes["Alice"]?.peerID,
let bobStringPeerID = nodes["Bob"]?.peerID else {
return XCTFail("Missing managers or peer IDs")
}
let alicePeerID = PeerID(str: aliceStringPeerID)
let bobPeerID = PeerID(str: bobStringPeerID)
// Baseline: encrypt from Alice, decrypt at Bob
let plaintext1 = Data("hello-secure".utf8)
@@ -587,9 +590,9 @@ final class IntegrationTests: XCTestCase {
// MARK: - Helper Methods
private func createNode(_ name: String, peerID: String) {
private func createNode(_ name: String, peerID: PeerID) {
let node = MockBluetoothMeshService()
node.myPeerID = peerID
node.myPeerID = peerID.id
node.mockNickname = name
nodes[name] = node
@@ -666,9 +669,9 @@ final class IntegrationTests: XCTestCase {
let peer1ID = nodes[node1]?.peerID,
let peer2ID = nodes[node2]?.peerID else { return }
let msg1 = try manager1.initiateHandshake(with: peer2ID)
let msg2 = try manager2.handleIncomingHandshake(from: peer1ID, message: msg1)!
let msg3 = try manager1.handleIncomingHandshake(from: peer2ID, message: msg2)!
_ = try manager2.handleIncomingHandshake(from: peer1ID, message: msg3)
let msg1 = try manager1.initiateHandshake(with: PeerID(str: peer2ID))
let msg2 = try manager2.handleIncomingHandshake(from: PeerID(str: peer1ID), message: msg1)!
let msg3 = try manager1.handleIncomingHandshake(from: PeerID(str: peer2ID), message: msg2)!
_ = try manager2.handleIncomingHandshake(from: PeerID(str: peer1ID), message: msg3)
}
}
+2 -2
View File
@@ -342,8 +342,8 @@ final class MockBLEService: NSObject {
// MARK: - Compatibility methods for old tests
func sendPrivateMessage(_ content: String, to recipientPeerID: String, recipientNickname: String, messageID: String? = nil) {
sendPrivateMessage(content, to: recipientPeerID, recipientNickname: recipientNickname, messageID: messageID ?? UUID().uuidString)
func sendPrivateMessage(_ content: String, to recipientPeerID: PeerID, recipientNickname: String, messageID: String? = nil) {
sendPrivateMessage(content, to: recipientPeerID.id, recipientNickname: recipientNickname, messageID: messageID ?? UUID().uuidString)
}
}
@@ -54,7 +54,7 @@ final class BinaryProtocolTests: XCTestCase {
// Verify recipient
XCTAssertNotNil(decodedPacket.recipientID)
let decodedRecipientID = decodedPacket.recipientID?.trimmingNullBytes()
XCTAssertEqual(String(data: decodedRecipientID!, encoding: .utf8), recipientID)
XCTAssertTrue(String(data: decodedRecipientID!, encoding: .utf8) == recipientID)
}
func testPacketWithSignature() throws {
@@ -251,7 +251,7 @@ final class BinaryProtocolTests: XCTestCase {
originalSender: TestConstants.testNickname3,
isPrivate: false,
recipientNickname: nil,
senderPeerID: TestConstants.testPeerID1,
senderPeerID: TestConstants.testPeerID1.id,
mentions: nil
)
@@ -7,16 +7,17 @@
//
import Foundation
@testable import bitchat
struct TestConstants {
static let defaultTimeout: TimeInterval = 5.0
static let shortTimeout: TimeInterval = 1.0
static let longTimeout: TimeInterval = 10.0
static let testPeerID1 = "PEER1234"
static let testPeerID2 = "PEER5678"
static let testPeerID3 = "PEER9012"
static let testPeerID4 = "PEER3456"
static let testPeerID1: PeerID = "PEER1234"
static let testPeerID2: PeerID = "PEER5678"
static let testPeerID3: PeerID = "PEER9012"
static let testPeerID4: PeerID = "PEER3456"
static let testNickname1 = "Alice"
static let testNickname2 = "Bob"
+19 -7
View File
@@ -30,7 +30,7 @@ final class TestHelpers {
static func createTestMessage(
content: String = TestConstants.testMessage1,
sender: String = TestConstants.testNickname1,
senderPeerID: String = TestConstants.testPeerID1,
senderPeerID: PeerID = TestConstants.testPeerID1,
isPrivate: Bool = false,
recipientNickname: String? = nil,
mentions: [String]? = nil
@@ -44,23 +44,23 @@ final class TestHelpers {
originalSender: nil,
isPrivate: isPrivate,
recipientNickname: recipientNickname,
senderPeerID: senderPeerID,
senderPeerID: senderPeerID.id,
mentions: mentions
)
}
static func createTestPacket(
type: UInt8 = 0x01,
senderID: String = TestConstants.testPeerID1,
recipientID: String? = nil,
senderID: PeerID = TestConstants.testPeerID1,
recipientID: PeerID? = nil,
payload: Data = "test payload".data(using: .utf8)!,
signature: Data? = nil,
ttl: UInt8 = 3
) -> BitchatPacket {
return BitchatPacket(
type: type,
senderID: senderID.data(using: .utf8)!,
recipientID: recipientID?.data(using: .utf8),
senderID: senderID.id.data(using: .utf8)!,
recipientID: recipientID?.id.data(using: .utf8),
timestamp: UInt64(Date().timeIntervalSince1970 * 1000),
payload: payload,
signature: signature,
@@ -119,4 +119,16 @@ enum TestError: Error {
case timeout
case unexpectedValue
case testFailure(String)
}
}
// MARK: - PeerID String Helpers
/// Raw String can be passed as PeerID
extension PeerID: @retroactive ExpressibleByStringLiteral {
public init(stringLiteral value: String) {
self.init(str: value)
}
}
/// Interpolated String can be passed as PeerID
extension PeerID: @retroactive ExpressibleByStringInterpolation {}