From 396c3facb8287b9a34076cae8f3d7b300d366d99 Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Tue, 15 Sep 2026 14:18:14 -0400 Subject: fix: atomic saves, casino RNG/config isolation, tick lifecycle --- internal/casino/machine_ownership_test.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 internal/casino/machine_ownership_test.go (limited to 'internal/casino/machine_ownership_test.go') diff --git a/internal/casino/machine_ownership_test.go b/internal/casino/machine_ownership_test.go new file mode 100644 index 0000000..47e068a --- /dev/null +++ b/internal/casino/machine_ownership_test.go @@ -0,0 +1,24 @@ +package casino + +import "testing" + +func TestMachineRejectsStaleAndNonOwnerCommands(t *testing.T) { + m := NewManager(1) + cfg := MachineConfig{ID: "slots", Game: GameSlots} + m.JoinMachine(1, cfg, "alice") + m.MarkDisconnected("alice") + for _, occupied := range []bool{false, true} { + if occupied { + m.JoinMachine(1, cfg, "bob") + } + for _, events := range [][]Event{ + m.SetMachineBet(1, "slots", "alice", 10, nil), + m.StartMachine(1, "slots", "alice", nil), + m.EnableMachineAutoBet(1, "slots", "alice", nil), + } { + if len(events) != 1 || events[0].PrivateTo != "alice" || events[0].Public { + t.Fatalf("rejection misrouted (occupied=%v): %+v", occupied, events) + } + } + } +} -- cgit v1.2.3