gen.go raw
1 package filter
2
3 import (
4 "math"
5
6 "next.orly.dev/pkg/nostr/crypto/ec/schnorr"
7 "next.orly.dev/pkg/nostr/crypto/ec/secp256k1"
8 "next.orly.dev/pkg/nostr/encoders/hex"
9 "next.orly.dev/pkg/nostr/encoders/kind"
10 "next.orly.dev/pkg/nostr/encoders/tag"
11 "next.orly.dev/pkg/nostr/encoders/timestamp"
12 "next.orly.dev/pkg/nostr/utils/values"
13 "github.com/minio/sha256-simd"
14 "next.orly.dev/pkg/lol/chk"
15 "lukechampine.com/frand"
16 )
17
18 // GenFilter is a testing tool to create random arbitrary filters for tests.
19 func GenFilter() (f *F, err error) {
20 f = New()
21 n := frand.Intn(16)
22 for _ = range n {
23 id := make([]byte, sha256.Size)
24 frand.Read(id)
25 f.Ids.T = append(f.Ids.T, id)
26 // f.Ids.Field = append(f.Ids.Field, id)
27 }
28 n = frand.Intn(16)
29 for _ = range n {
30 f.Kinds.K = append(f.Kinds.K, kind.New(frand.Intn(math.MaxUint16)))
31 }
32 n = frand.Intn(16)
33 for _ = range n {
34 var sk *secp256k1.SecretKey
35 if sk, err = secp256k1.GenerateSecretKey(); chk.E(err) {
36 return
37 }
38 pk := sk.PubKey()
39 f.Authors.T = append(f.Authors.T, schnorr.SerializePubKey(pk))
40 // f.Authors.Field = append(f.Authors.Field, schnorr.SerializePubKey(pk))
41 }
42 a := frand.Intn(16)
43 if a < n {
44 n = a
45 }
46 for i := range n {
47 p := make([]byte, 0, schnorr.PubKeyBytesLen*2)
48 p = hex.EncAppend(p, f.Authors.T[i])
49 }
50 for b := 'a'; b <= 'z'; b++ {
51 l := frand.Intn(6)
52 var idb [][]byte
53 for range l {
54 bb := make([]byte, frand.Intn(31)+1)
55 frand.Read(bb)
56 id := make([]byte, 0, len(bb)*2)
57 id = hex.EncAppend(id, bb)
58 idb = append(idb, id)
59 }
60 idb = append([][]byte{{'#', byte(b)}}, idb...)
61 *f.Tags = append(*f.Tags, tag.NewFromBytesSlice(idb...))
62 // f.Tags.F = append(f.Tags.F, tag.FromBytesSlice(idb...))
63 }
64 tn := int(timestamp.Now().I64())
65 f.Since = ×tamp.T{int64(tn - frand.Intn(10000))}
66 f.Until = timestamp.Now()
67 if frand.Intn(10) > 5 {
68 f.Limit = values.ToUintPointer(uint(frand.Intn(1000)))
69 }
70 f.Search = []byte("token search text")
71 return
72 }
73
74 func GenFilters() (s S, err error) {
75 n := frand.Intn(5) + 1
76 for _ = range n {
77 var f *F
78 if f, err = GenFilter(); chk.E(err) {
79 }
80 s = append(s, f)
81 }
82 return
83 }
84