diff options
| author | historia <[not public]> | 2026-09-18 15:42:23 -0400 |
|---|---|---|
| committer | historia <[not public]> | 2026-09-18 15:42:23 -0400 |
| commit | 67e01aab85607b9e601185c7d62dff576af3bb43 (patch) | |
| tree | 059134b2434eba7c14aa9d89f48c5a475feb0312 /internal/world/rekey_objects_test.go | |
| parent | 7eab582d8a8ee2af1a6baae7baf0696c7005de2e (diff) | |
| download | thehouseoficarus-67e01aab85607b9e601185c7d62dff576af3bb43.tar.gz | |
fix: close map OOM, admin traversal, transport safespot, room rekey, and legacy payout recovery
Diffstat (limited to 'internal/world/rekey_objects_test.go')
| -rw-r--r-- | internal/world/rekey_objects_test.go | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/internal/world/rekey_objects_test.go b/internal/world/rekey_objects_test.go new file mode 100644 index 0000000..7ee2de3 --- /dev/null +++ b/internal/world/rekey_objects_test.go @@ -0,0 +1,37 @@ +package world + +import "testing" + +// TestRekeyRoomsUpdatesObjStateRoomID: object lookups filter on ObjState.RoomID +// while GetObjState looks up the map key, so the invariant +// mapKey == ObjStateKey(st.RoomID, ...) must survive a rekey. Leaving RoomID +// stale makes room objects vanish from a renamed/swapped room for the rest of +// the process and lets TickObjWander create a duplicate entry for the state. +func TestRekeyRoomsUpdatesObjStateRoomID(t *testing.T) { + w := New(t.TempDir()) + w.objStates[w.ObjStateKey(1, "anvil", 0)] = &ObjState{ + RoomID: 1, + DefID: "anvil", + Index: 0, + WanderRooms: []int{1, 5, 9}, + } + + w.RekeyRooms(map[int]int{1: 3, 5: 7}) + + inst := w.GetObjState(3, "anvil", 0) + if inst == nil { + t.Fatal("object state lost after rekey") + } + if inst.RoomID != 3 { + t.Fatalf("ObjState.RoomID = %d, want 3 (map key and state desynchronised)", inst.RoomID) + } + if got := inst.WanderRooms; len(got) != 3 || got[0] != 3 || got[1] != 7 || got[2] != 9 { + t.Fatalf("WanderRooms after rekey = %v, want [3 7 9]", got) + } + if got := w.AllObjInstances(3); len(got) != 1 { + t.Fatalf("AllObjInstances(3) = %d entries, want 1 (object invisible in renamed room)", len(got)) + } + if got := w.AllObjInstances(1); len(got) != 0 { + t.Fatalf("AllObjInstances(1) = %d entries, want 0 (stale old room)", len(got)) + } +} |
