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.
48 lines
2.1 KiB
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)])
|
|
}
|
|
}
|