mirror of
https://github.com/nbd-wtf/go-nostr.git
synced 2025-05-05 00:00:14 +02:00
135 lines
3.8 KiB
Go
135 lines
3.8 KiB
Go
package sdk
|
|
|
|
import (
|
|
"sync"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/nbd-wtf/go-nostr"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestLoadWoT(t *testing.T) {
|
|
sys := NewSystem()
|
|
ctx := t.Context()
|
|
|
|
// test with fiatjaf's pubkey
|
|
wotch, err := sys.loadWoT(ctx, "3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d")
|
|
require.NoError(t, err)
|
|
|
|
wot := make([]string, 0, 100000)
|
|
wotch2 := make(chan string)
|
|
|
|
var filter WotXorFilter
|
|
done := make(chan struct{})
|
|
go func() {
|
|
// test that we can get a filter from the WoT
|
|
filter = makeWoTFilter(wotch2)
|
|
close(done)
|
|
}()
|
|
|
|
for pk := range wotch {
|
|
wot = append(wot, pk)
|
|
wotch2 <- pk
|
|
}
|
|
close(wotch2)
|
|
|
|
// we should get a decent number of pubkeys in the WoT
|
|
require.Greater(t, len(wot), 10000, "should have more than 10000 pubkeys in WoT")
|
|
|
|
// test that the filter contains some known pubkeys from the WoT
|
|
<-done
|
|
for _, pk := range wot {
|
|
require.True(t, filter.Contains(pk), "filter should contain all WoT pubkeys")
|
|
}
|
|
}
|
|
|
|
func TestLoadWoTManyPeople(t *testing.T) {
|
|
sys := NewSystem()
|
|
ctx := t.Context()
|
|
|
|
wg := sync.WaitGroup{}
|
|
wg.Add(3 + 2 + 2)
|
|
|
|
diffs := make([]nostr.Timestamp, 5)
|
|
var rabble1 WotXorFilter
|
|
var rabble2 WotXorFilter
|
|
var rabble3 WotXorFilter
|
|
var alex1 WotXorFilter
|
|
var alex2 WotXorFilter
|
|
|
|
// these are the same pubkey
|
|
go func() {
|
|
rabble, err := sys.LoadWoTFilter(ctx, "76c71aae3a491f1d9eec47cba17e229cda4113a0bbb6e6ae1776d7643e29cafa")
|
|
require.NoError(t, err)
|
|
diffs[0] = nostr.Now()
|
|
rabble1 = rabble
|
|
wg.Done()
|
|
}()
|
|
|
|
time.Sleep(time.Millisecond * 20)
|
|
go func() {
|
|
rabble, err := sys.LoadWoTFilter(ctx, "76c71aae3a491f1d9eec47cba17e229cda4113a0bbb6e6ae1776d7643e29cafa")
|
|
require.NoError(t, err)
|
|
diffs[1] = nostr.Now()
|
|
rabble2 = rabble
|
|
wg.Done()
|
|
}()
|
|
|
|
time.Sleep(time.Millisecond * 20)
|
|
go func() {
|
|
rabble, err := sys.LoadWoTFilter(ctx, "76c71aae3a491f1d9eec47cba17e229cda4113a0bbb6e6ae1776d7643e29cafa")
|
|
require.NoError(t, err)
|
|
diffs[2] = nostr.Now()
|
|
rabble3 = rabble
|
|
wg.Done()
|
|
}()
|
|
|
|
// these should map to the same pos
|
|
time.Sleep(time.Millisecond * 20)
|
|
go func() {
|
|
alex, err := sys.LoadWoTFilter(ctx, "9ce71f1506ccf4b99f234af49bd6202be883a80f95a155c6e9a1c36fd7e780c7")
|
|
require.NoError(t, err)
|
|
diffs[3] = nostr.Now()
|
|
alex1 = alex
|
|
wg.Done()
|
|
}()
|
|
|
|
time.Sleep(time.Millisecond * 20)
|
|
go func() {
|
|
alex, err := sys.LoadWoTFilter(ctx, "9ce71f1506ccf4b99f234af49bd6202be883a80f95a155c6e9a1c36fd7e780c7")
|
|
require.NoError(t, err)
|
|
diffs[4] = nostr.Now()
|
|
alex2 = alex
|
|
wg.Done()
|
|
}()
|
|
|
|
// these are independent
|
|
go func() {
|
|
hodlbod, err := sys.LoadWoTFilter(ctx, "97c70a44366a6535c145b333f973ea86dfdc2d7a99da618c40c64705ad98e322")
|
|
require.NoError(t, err)
|
|
require.True(t, hodlbod.Contains("ee11a5dff40c19a555f41fe42b48f00e618c91225622ae37b6c2bb67b76c4e49"))
|
|
require.True(t, hodlbod.Contains("76c71aae3a491f1d9eec47cba17e229cda4113a0bbb6e6ae1776d7643e29cafa"))
|
|
require.True(t, hodlbod.Contains("3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d"))
|
|
wg.Done()
|
|
}()
|
|
go func() {
|
|
mikedilger, err := sys.LoadWoTFilter(ctx, "ee11a5dff40c19a555f41fe42b48f00e618c91225622ae37b6c2bb67b76c4e49")
|
|
require.NoError(t, err)
|
|
require.True(t, mikedilger.Contains("97c70a44366a6535c145b333f973ea86dfdc2d7a99da618c40c64705ad98e322"))
|
|
require.True(t, mikedilger.Contains("3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d"))
|
|
wg.Done()
|
|
}()
|
|
|
|
wg.Wait()
|
|
|
|
require.Equal(t, rabble1, rabble2)
|
|
require.Equal(t, rabble2, rabble3)
|
|
require.Equal(t, alex1, alex2)
|
|
|
|
require.Less(t, int(diffs[1]-diffs[0]), 1, "second duplicated call should resolve immediately")
|
|
require.Less(t, int(diffs[2]-diffs[1]), 1, "third duplicated call should resolve immediately")
|
|
require.Greater(t, int(diffs[3]-diffs[2]), 10, "the next call should take a long time")
|
|
require.Less(t, int(diffs[4]-diffs[3]), 1, "and then a duplicated call should resolve immediately")
|
|
}
|