mmm: fix fuzz test.

This commit is contained in:
fiatjaf
2025-10-13 21:53:48 +00:00
parent 96fcff7908
commit 47b1608e6b
3 changed files with 20 additions and 9 deletions

View File

@@ -88,13 +88,13 @@ func FuzzTest(f *testing.F) {
} }
// verify each layer has the correct events // verify each layer has the correct events
for _, layer := range mmmm.layers { for i, layer := range mmmm.layers {
count := 0 count := 0
for evt := range layer.QueryEvents(nostr.Filter{}, 500) { for evt := range layer.QueryEvents(nostr.Filter{}, 11000) {
require.True(t, evt.Tags.ContainsAny("t", []string{layer.name})) require.True(t, evt.Tags.ContainsAny("t", []string{layer.name}))
count++ count++
} }
require.Equal(t, count, len(storedByLayer[layer.name])) require.Equal(t, count, len(storedByLayer[layer.name]), "layer %d ('%s')", i, layer.name)
} }
// randomly select n events to delete from random layers // randomly select n events to delete from random layers
@@ -147,13 +147,13 @@ func FuzzTest(f *testing.F) {
for _, layer := range mmmm.layers { for _, layer := range mmmm.layers {
// verify event still accessible from other layers // verify event still accessible from other layers
if slices.Contains(foundlayers, layer) { if slices.Contains(foundlayers, layer) {
next, stop := iter.Pull(layer.QueryEvents(nostr.Filter{Kinds: []nostr.Kind{evt.Kind}}, 500)) // hack next, stop := iter.Pull(layer.QueryEvents(nostr.Filter{Kinds: []nostr.Kind{evt.Kind}}, 11000)) // hack
_, fetched := next() _, fetched := next()
require.True(t, fetched) require.True(t, fetched)
stop() stop()
} else { } else {
// and not accessible from this layer we just deleted // and not accessible from this layer we just deleted
next, stop := iter.Pull(layer.QueryEvents(nostr.Filter{Kinds: []nostr.Kind{evt.Kind}}, 500)) // hack next, stop := iter.Pull(layer.QueryEvents(nostr.Filter{Kinds: []nostr.Kind{evt.Kind}}, 11000)) // hack
_, fetched := next() _, fetched := next()
require.True(t, fetched) require.True(t, fetched)
stop() stop()
@@ -165,7 +165,7 @@ func FuzzTest(f *testing.F) {
// now delete a layer and events that only exist in that layer should vanish // now delete a layer and events that only exist in that layer should vanish
layer := mmmm.layers[rnd.Int()%len(mmmm.layers)] layer := mmmm.layers[rnd.Int()%len(mmmm.layers)]
eventsThatShouldVanish := make([]nostr.ID, 0, nevents/2) eventsThatShouldVanish := make([]nostr.ID, 0, nevents/2)
for evt := range layer.QueryEvents(nostr.Filter{}, 500) { for evt := range layer.QueryEvents(nostr.Filter{}, 11000) {
if len(evt.Tags) == 1+len(deleted[evt.ID]) { if len(evt.Tags) == 1+len(deleted[evt.ID]) {
eventsThatShouldVanish = append(eventsThatShouldVanish, evt.ID) eventsThatShouldVanish = append(eventsThatShouldVanish, evt.ID)
} }

View File

@@ -42,8 +42,14 @@ func (il *IndexingLayer) SaveEvent(evt nostr.Event) error {
return err return err
} }
mmmtxn.Commit() if err := mmmtxn.Commit(); err != nil {
iltxn.Commit() return err
}
if err := iltxn.Commit(); err != nil {
return err
}
return nil return nil
} }
@@ -152,7 +158,7 @@ func (b *MultiMmapManager) storeOn(
val = binary.BigEndian.AppendUint16(val, il.id) val = binary.BigEndian.AppendUint16(val, il.id)
} }
// store the id index with the refcounts // store the id index with the layer references
if err := mmmtxn.Put(b.indexId, evt.ID[0:8], val, 0); err != nil { if err := mmmtxn.Put(b.indexId, evt.ID[0:8], val, 0); err != nil {
panic(fmt.Errorf("failed to store %x by id: %w", evt.ID[:], err)) panic(fmt.Errorf("failed to store %x by id: %w", evt.ID[:], err))
} }

View File

@@ -0,0 +1,5 @@
go test fuzz v1
int(-196)
uint(69)
uint(536)
uint(128)