93 lines
2.3 KiB
Go
93 lines
2.3 KiB
Go
package mmm
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
|
|
"fiatjaf.com/nostr"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestComputeStats(t *testing.T) {
|
|
tmpDir, err := os.MkdirTemp("", "mmm_stats_test")
|
|
require.NoError(t, err)
|
|
defer os.RemoveAll(tmpDir)
|
|
mmmm := &MultiMmapManager{
|
|
Dir: tmpDir,
|
|
}
|
|
err = mmmm.Init()
|
|
require.NoError(t, err)
|
|
defer mmmm.Close()
|
|
il, err := mmmm.EnsureLayer("testlayer")
|
|
require.NoError(t, err)
|
|
|
|
// generate 5 random keys
|
|
keys := make([]nostr.SecretKey, 5)
|
|
pubkeys := make([]nostr.PubKey, 5)
|
|
for i := 0; i < 5; i++ {
|
|
privkey := nostr.Generate()
|
|
keys[i] = privkey
|
|
pubkeys[i] = privkey.Public()
|
|
}
|
|
|
|
// add 10 events from each key, alternating between kinds 1 and 11
|
|
for i := 0; i < 5; i++ {
|
|
for j := 0; j < 10; j++ {
|
|
kind := nostr.Kind(1)
|
|
if j%2 == 1 {
|
|
kind = 11
|
|
}
|
|
|
|
evt := nostr.Event{
|
|
PubKey: pubkeys[i],
|
|
CreatedAt: nostr.Now() - nostr.Timestamp(j)*3600, // j hours ago
|
|
Kind: kind,
|
|
Tags: nil,
|
|
Content: "test event",
|
|
}
|
|
err := evt.Sign(keys[i])
|
|
require.NoError(t, err)
|
|
|
|
// save event
|
|
err = il.SaveEvent(evt)
|
|
require.NoError(t, err)
|
|
}
|
|
}
|
|
|
|
// test ComputeStats with no options
|
|
stats, err := il.ComputeStats(StatsOptions{})
|
|
require.NoError(t, err)
|
|
|
|
// verify total count
|
|
require.Equal(t, uint(50), stats.Total)
|
|
|
|
// verify we have stats for all 5 pubkeys
|
|
require.Len(t, stats.PerPubKey, 5)
|
|
|
|
// verify each pubkey has 10 events
|
|
for _, pubkey := range pubkeys {
|
|
pkStats, _ := stats.PerPubKey[pubkey]
|
|
require.Equal(t, uint(10), pkStats.Total)
|
|
}
|
|
|
|
// verify we have stats for both kinds
|
|
require.Len(t, stats.PerKind, 2)
|
|
|
|
// verify kind counts (should be 25 each for kinds 1 and 11)
|
|
kindStats1, exists := stats.PerKind[1]
|
|
require.True(t, exists, "missing stats for kind 1")
|
|
require.Equal(t, uint(25), kindStats1.Total, "expected 25 events for kind 1, got %d", kindStats1.Total)
|
|
|
|
kindStats11, exists := stats.PerKind[11]
|
|
require.True(t, exists, "missing stats for kind 11")
|
|
require.Equal(t, uint(25), kindStats11.Total, "expected 25 events for kind 11, got %d", kindStats11.Total)
|
|
|
|
// test ComputeStats with OnlyPubKey option
|
|
firstPubkey := pubkeys[0]
|
|
stats, err = il.ComputeStats(StatsOptions{OnlyPubKey: firstPubkey})
|
|
require.NoError(t, err, "failed to compute stats with OnlyPubKey: %v", err)
|
|
|
|
require.Equal(t, uint(10), stats.Total)
|
|
require.Len(t, stats.PerPubKey, 1)
|
|
}
|