fork of indigo with slightly nicer lexgen
1package testing
2
3import (
4 "context"
5 "encoding/json"
6 "fmt"
7 "os"
8 "testing"
9
10 comatproto "github.com/bluesky-social/indigo/api/atproto"
11 "github.com/bluesky-social/indigo/atproto/syntax"
12 "github.com/bluesky-social/indigo/cmd/relay/stream"
13
14 "github.com/stretchr/testify/assert"
15)
16
17// meta test for the testing framework itself. simply connects the consumer to the producer
18func TestFramework(t *testing.T) {
19 assert := assert.New(t)
20 ctx := context.Background()
21
22 p := NewProducer()
23 port := p.ListenRandom()
24 defer p.Shutdown()
25
26 c := NewConsumer(fmt.Sprintf("ws://localhost:%d", port))
27 err := c.Connect(ctx, -1)
28 if err != nil {
29 t.Fatal(err)
30 }
31 defer c.Shutdown()
32
33 h := "example.atbin.dev"
34 e1 := stream.XRPCStreamEvent{
35 RepoIdentity: &comatproto.SyncSubscribeRepos_Identity{
36 Did: "did:web:example.atbin.dev",
37 Handle: &h,
38 Seq: 1234,
39 Time: syntax.DatetimeNow().String(),
40 },
41 }
42 if err := p.Emit(&e1); err != nil {
43 t.Fatal(err)
44 }
45
46 evts, err := c.ConsumeEvents(1)
47 if err != nil {
48 t.Fatal(err)
49 }
50 assert.Equal(1, len(evts))
51 assert.Equal(e1.RepoIdentity, evts[0].RepoIdentity)
52}
53
54// simply loads a scenario from JSON and checks data looks right
55func TestScenarioLoad(t *testing.T) {
56 assert := assert.New(t)
57
58 fixBytes, err := os.ReadFile("testdata/legacy.json")
59 if err != nil {
60 t.Fatal(err)
61 }
62
63 var s Scenario
64 if err = json.Unmarshal(fixBytes, &s); err != nil {
65 t.Fatal(err)
66 }
67 assert.Equal(1, len(s.Accounts))
68 assert.Equal("active", s.Accounts[0].Status)
69 assert.Equal("https://morel.us-east.host.bsky.network", s.Accounts[0].Identity.PDSEndpoint())
70 _, err = s.Accounts[0].Identity.PublicKey()
71 assert.NoError(err)
72 assert.Equal(3, len(s.Messages))
73 msg, err := s.Messages[2].Frame.XRPCStreamEvent()
74 if err != nil {
75 t.Fatal(err)
76 }
77 assert.Equal(int64(7278969010), msg.RepoCommit.Seq)
78 assert.Equal(4945, len(msg.RepoCommit.Blocks))
79 assert.Equal(1, len(msg.RepoCommit.Ops))
80}
81
82func TestBasicScenario(t *testing.T) {
83 ctx := context.Background()
84
85 err := LoadAndRunScenario(ctx, "testdata/legacy.json")
86 if err != nil {
87 t.Fatal(err)
88 }
89}