Files
Syncplay/protocol_test.odin
T

74 lines
2.8 KiB
Odin
Raw Normal View History

2026-08-11 10:55:02 +02:00
package main
import "core:strings"
import "core:testing"
@(test)
protocol_round_trip_pause :: proc(t: ^testing.T) {
line := encode_protocol_event(Playback_Event{kind = .Pause, paused = true})
defer delete(line)
event, err := parse_protocol_event(transmute([]byte)strings.trim_space(line))
testing.expect_value(t, err, Protocol_Error.None)
testing.expect_value(t, event.kind, Event_Kind.Pause)
testing.expect_value(t, event.paused, true)
}
@(test)
protocol_round_trip_seek :: proc(t: ^testing.T) {
line := encode_protocol_event(Playback_Event{kind = .Seek, position = 123.456})
defer delete(line)
event, err := parse_protocol_event(transmute([]byte)strings.trim_space(line))
testing.expect_value(t, err, Protocol_Error.None)
testing.expect_value(t, event.kind, Event_Kind.Seek)
testing.expect(t, event.position > 123.455 && event.position < 123.457)
}
@(test)
protocol_rejects_invalid_messages :: proc(t: ^testing.T) {
missing_pause: string = `{"version":1,"type":"pause"}`
bad_version: string = `{"version":2,"type":"pause","paused":true}`
bad_position: string = `{"version":1,"type":"seek","position":-1}`
_, err := parse_protocol_event(transmute([]byte)missing_pause)
testing.expect_value(t, err, Protocol_Error.Missing_Paused)
_, err = parse_protocol_event(transmute([]byte)bad_version)
testing.expect_value(t, err, Protocol_Error.Unsupported_Version)
_, err = parse_protocol_event(transmute([]byte)bad_position)
testing.expect_value(t, err, Protocol_Error.Invalid_Position)
}
@(test)
protocol_round_trip_sourced_event :: proc(t: ^testing.T) {
line := encode_protocol_event(Playback_Event{
kind = .Seek,
position = 9.25,
client_id = 7,
})
defer delete(line)
event, err := parse_protocol_event(transmute([]byte)strings.trim_space(line))
testing.expect_value(t, err, Protocol_Error.None)
testing.expect_value(t, event.client_id, u64(7))
}
@(test)
protocol_parses_welcome :: proc(t: ^testing.T) {
line := encode_welcome(12)
defer delete(line)
client_id, matched, err := parse_welcome(transmute([]byte)strings.trim_space(line))
testing.expect(t, matched)
testing.expect_value(t, err, Protocol_Error.None)
testing.expect_value(t, client_id, u64(12))
}
@(test)
playback_logs_identify_client_and_action :: proc(t: ^testing.T) {
paused := format_playback_log("server", 2, Playback_Event{kind = .Pause, paused = true})
defer delete(paused)
played := format_playback_log("client", 3, Playback_Event{kind = .Pause}, is_local = true)
defer delete(played)
sought := format_playback_log("client", 4, Playback_Event{kind = .Seek, position = 65.125})
defer delete(sought)
testing.expect_value(t, paused, "server: client 2 paused")
testing.expect_value(t, played, "client: client 3 (you) played")
testing.expect_value(t, sought, "client: client 4 sought to 65.125 seconds")
}