reqenvelope_test.go raw
1 package reqenvelope
2
3 import (
4 "testing"
5
6 "next.orly.dev/pkg/nostr/encoders/envelopes"
7 "next.orly.dev/pkg/nostr/encoders/filter"
8 "next.orly.dev/pkg/nostr/utils"
9 "next.orly.dev/pkg/nostr/utils/bufpool"
10 "next.orly.dev/pkg/lol/chk"
11 )
12
13 func TestMarshalUnmarshal(t *testing.T) {
14 var err error
15 for i := range 1000 {
16 rb, rb1, rb2 := bufpool.Get(), bufpool.Get(), bufpool.Get()
17 var f filter.S
18 if f, err = filter.GenFilters(); chk.E(err) {
19 t.Fatal(err)
20 }
21 s := utils.NewSubscription(i)
22 req := NewFrom(s, &f)
23 rb = req.Marshal(rb)
24 rb1 = append(rb1, rb...)
25 var rem []byte
26 var l string
27 if l, rb, err = envelopes.Identify(rb); chk.E(err) {
28 t.Fatal(err)
29 }
30 if l != L {
31 t.Fatalf("invalid sentinel %s, expect %s", l, L)
32 }
33 req2 := New()
34 if rem, err = req2.Unmarshal(rb); chk.E(err) {
35 t.Fatal(err)
36 }
37 if len(rem) > 0 {
38 t.Fatalf(
39 "unmarshal failed, remainder\n%d %s",
40 len(rem), rem,
41 )
42 }
43 rb2 = req2.Marshal(rb2)
44 if !utils.FastEqual(rb1, rb2) {
45 if len(rb1) != len(rb2) {
46 t.Fatalf(
47 "unmarshal failed, different lengths\n%d %s\n%d %s\n",
48 len(rb1), rb1, len(rb2), rb2,
49 )
50 }
51 for i := range rb1 {
52 if rb1[i] != rb2[i] {
53 t.Fatalf(
54 "unmarshal failed, difference at position %d\n%d %s\n%s\n%d %s\n%s\n",
55 i, len(rb1), rb1[:i], rb1[i:], len(rb2), rb2[:i],
56 rb2[i:],
57 )
58 }
59 }
60 t.Fatalf(
61 "unmarshal failed\n%d %s\n%d %s\n",
62 len(rb1), rb1, len(rb2), rb2,
63 )
64 }
65 bufpool.Put(rb1)
66 bufpool.Put(rb2)
67 bufpool.Put(rb)
68 }
69 }
70