···220 return &header, &commit
221}
222000000000000000000000223// assertCARResponse validates CAR file response
224func assertCARResponse(t *testing.T, w *httptest.ResponseRecorder, expectedCode int) []byte {
225 t.Helper()
···2851 }
2852 defer conn.Close()
28530002854 // Should receive the 3 historical events
2855 for i := 0; i < 3; i++ {
2856 messageType, message, err := conn.ReadMessage()
···2889 t.Fatalf("Failed to connect to WebSocket: %v", err)
2890 }
2891 defer conn.Close()
00028922893 // Should only receive event 3 (after cursor=2)
2894 messageType, message, err := conn.ReadMessage()
···2926 }
2927 defer conn.Close()
29280002929 // Verify no historical events by broadcasting immediately and checking
2930 // that we only receive the new event (not historical ones)
2931 // Give subscriber time to register first
···2977 t.Fatalf("Failed to connect to WebSocket: %v", err)
2978 }
2979 defer conn.Close()
00029802981 // Read and discard the 4 historical events (seq 1-4)
2982 for i := 0; i < 4; i++ {
···220 return &header, &commit
221}
222223+// skipAccountEvent reads and discards the initial #account event that the
224+// EventBroadcaster sends to every new subscriber.
225+func skipAccountEvent(t *testing.T, conn *websocket.Conn) {
226+ t.Helper()
227+ msgType, message, err := conn.ReadMessage()
228+ if err != nil {
229+ t.Fatalf("Failed to read account event: %v", err)
230+ }
231+ if msgType != websocket.BinaryMessage {
232+ t.Fatalf("Expected binary message for account event, got type %d", msgType)
233+ }
234+ reader := bytes.NewReader(message)
235+ var header events.EventHeader
236+ if err := header.UnmarshalCBOR(reader); err != nil {
237+ t.Fatalf("Failed to decode account event header: %v", err)
238+ }
239+ if header.MsgType != "#account" {
240+ t.Fatalf("Expected #account event, got %s", header.MsgType)
241+ }
242+}
243+244// assertCARResponse validates CAR file response
245func assertCARResponse(t *testing.T, w *httptest.ResponseRecorder, expectedCode int) []byte {
246 t.Helper()
···2872 }
2873 defer conn.Close()
28742875+ // Skip the initial #account event
2876+ skipAccountEvent(t, conn)
2877+2878 // Should receive the 3 historical events
2879 for i := 0; i < 3; i++ {
2880 messageType, message, err := conn.ReadMessage()
···2913 t.Fatalf("Failed to connect to WebSocket: %v", err)
2914 }
2915 defer conn.Close()
2916+2917+ // Skip the initial #account event
2918+ skipAccountEvent(t, conn)
29192920 // Should only receive event 3 (after cursor=2)
2921 messageType, message, err := conn.ReadMessage()
···2953 }
2954 defer conn.Close()
29552956+ // Skip the initial #account event
2957+ skipAccountEvent(t, conn)
2958+2959 // Verify no historical events by broadcasting immediately and checking
2960 // that we only receive the new event (not historical ones)
2961 // Give subscriber time to register first
···3007 t.Fatalf("Failed to connect to WebSocket: %v", err)
3008 }
3009 defer conn.Close()
3010+3011+ // Skip the initial #account event
3012+ skipAccountEvent(t, conn)
30133014 // Read and discard the 4 historical events (seq 1-4)
3015 for i := 0; i < 4; i++ {