Skip to content

Commit 82ec823

Browse files
committed
mpt/internal/pmem: replace TestOpenPopulatesID with higher-level test
1 parent d2b2dfb commit 82ec823

1 file changed

Lines changed: 37 additions & 7 deletions

File tree

mpt/internal/pmem/pmem_test.go

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ func testRecovery(t *testing.T) {
101101
check(t, mem.UnsafeUnmap())
102102
}
103103

104-
func TestOpenPopulatesID(t *testing.T) {
104+
func TestWriteAfterOpen(t *testing.T) {
105105
tt := &tester{t: t}
106106
for i := range tt.file {
107107
tt.file[i].tester = tt
@@ -116,19 +116,49 @@ func TestOpenPopulatesID(t *testing.T) {
116116
if createdID == [16]byte{} {
117117
t.Fatal("created ID is zero")
118118
}
119-
m.Release()
120-
m.UnsafeUnmap()
119+
first := []byte("written before reopen")
120+
_, err = m.Expand(len(first))
121+
check(t, err)
122+
check(t, m.Mutate(m.Data(), first))
123+
check(t, m.Sync())
124+
check(t, m.Release())
125+
check(t, m.UnsafeUnmap())
126+
127+
m, err = Open("magic", &tt.file[0], &tt.file[1], nil)
128+
if err != nil {
129+
t.Fatal(err)
130+
}
131+
tt.setMem(m)
132+
if m.id != createdID {
133+
t.Errorf("opened ID %x != created ID %x", m.id, createdID)
134+
}
135+
if !bytes.Equal(m.Data(), first) {
136+
t.Errorf("opened data %q, want %q", m.Data(), first)
137+
}
138+
139+
// Frames written after Open carry m.id, so if Open did not restore it
140+
// from the files, the writes below would be stamped with a zero ID and
141+
// dropped (or rejected) by the next Open.
142+
second := []byte("written after reopen, longer than the first write")
143+
_, err = m.Expand(len(second))
144+
check(t, err)
145+
check(t, m.Mutate(m.Data(), second))
146+
check(t, m.Sync())
147+
check(t, m.Release())
148+
check(t, m.UnsafeUnmap())
121149

122150
m2, err := Open("magic", tt.file[0].clone(), tt.file[1].clone(), nil)
123151
if err != nil {
124152
t.Fatal(err)
125153
}
126-
defer m2.Release()
127-
defer m2.UnsafeUnmap()
128-
129154
if m2.id != createdID {
130-
t.Errorf("opened ID %x != created ID %x", m2.id, createdID)
155+
t.Errorf("reopened ID %x != created ID %x", m2.id, createdID)
156+
}
157+
if !bytes.Equal(m2.Data(), second) {
158+
t.Errorf("reopened data %q, want %q", m2.Data(), second)
131159
}
160+
check(t, m2.Release())
161+
check(t, m2.UnsafeUnmap())
132162
}
133163

134164
func randFill(b []byte) []byte {

0 commit comments

Comments
 (0)