You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Musubi/Packages/MusubiKit/Tests/RemoteTests/FramingTests.swift

48 lines
2.1 KiB

import Foundation
import Testing
import MusubiCore
@testable import Remote
@Suite struct FramingTests {
let show = RemoteMessage.show(VideoAssignment(screen: ScreenRef(name: "Field Monitor", index: 1), source: Source(ndiName: "PGM (pgm)")))
@Test func roundTripsMessages() throws {
var framer = MessageFramer()
let data = try MessageFramer.encode(.hello(name: "MacBook", role: .control, version: 1)) + MessageFramer.encode(show)
#expect(try framer.append(data) == [.hello(name: "MacBook", role: .control, version: 1), show])
}
@Test func reassemblesSplitData() throws {
var framer = MessageFramer()
let data = try MessageFramer.encode(show)
var received: [RemoteMessage] = []
for byte in data { received += try framer.append(Data([byte])) }
#expect(received == [show])
}
@Test func skipsMalformedBody() throws {
var framer = MessageFramer()
var bad = Data([0, 0, 0, 3]) + Data("{x}".utf8)
bad += try MessageFramer.encode(.stop(ScreenRef(name: "A", index: 0)))
#expect(try framer.append(bad) == [.stop(ScreenRef(name: "A", index: 0))])
}
@Test func rejectsHugeLength() {
var framer = MessageFramer()
#expect(throws: MessageFramer.FramingError.self) {
try framer.append(Data([0xFF, 0xFF, 0xFF, 0xFF]))
}
}
@Test func statusRoundTrips() throws {
let status = NodeStatus(
screens: [ScreenStatus(screen: ScreenRef(name: "Field Monitor", index: 1), width: 1920, height: 1080, refreshRate: 50,
output: OutputStatus(source: Source(ndiName: "PGM (pgm)"), state: .live, width: 1920, height: 1080,
frameRate: 50, lostFrames: 3, lossRate: 0.0001))],
config: MachineConfig(video: [VideoAssignment(screen: ScreenRef(name: "Field Monitor", index: 1), source: Source(ndiName: "PGM (pgm)"))]),
cpuPercent: 51.2, sleepBlocked: true)
var framer = MessageFramer()
#expect(try framer.append(MessageFramer.encode(.status(status))) == [.status(status)])
}
}

Powered by TurnKey Linux.