transport_replay_test.go RawHistoryFolder
1package sshstdio
2
3import (
4 "io"
5 "sync"
6 "testing"
7
8 "github.com/bnema/vev/internal/protocol/wire"
9 "github.com/bnema/vev/internal/testutil/replaytest"
10)
11
12func TestTransportReplay(t *testing.T) {
13 replaytest.Run(t, func(t *testing.T, envelopes []wire.Envelope) []wire.Envelope {
14 clientRead, serverWrite := io.Pipe()
15 serverRead, clientWrite := io.Pipe()
16 sender := NewTransport(clientRead, clientWrite, func() error { return clientWrite.Close() })
17 receiver := NewTransport(serverRead, serverWrite, func() error { return serverRead.Close() })
18 t.Cleanup(func() { _ = sender.Close(); _ = receiver.Close() })
19
20 var wg sync.WaitGroup
21 wg.Go(func() {
22 for _, frame := range envelopes {
23 if err := sender.Send(frame); err != nil {
24 t.Errorf("Send: %v", err)
25 return
26 }
27 }
28 })
29 got := make([]wire.Envelope, 0, len(envelopes))
30 for range envelopes {
31 frame, err := receiver.Recv()
32 if err != nil {
33 t.Errorf("Recv: %v", err)
34 _ = receiver.Close()
35 break
36 }
37 got = append(got, frame)
38 }
39 wg.Wait()
40 return got
41 })
42}