MCPcopy
hub / github.com/wavetermdev/waveterm / TestFlowControl

Function TestFlowControl

pkg/streamclient/stream_test.go:110–162  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

108}
109
110func TestFlowControl(t *testing.T) {
111 smallWindow := int64(10)
112 transport := newFakeTransport()
113
114 reader := NewReader("1", smallWindow, transport)
115 writer := NewWriter("1", smallWindow, transport)
116
117 go func() {
118 for dataPk := range transport.dataChan {
119 reader.RecvData(dataPk)
120 }
121 }()
122
123 go func() {
124 for ackPk := range transport.ackChan {
125 writer.RecvAck(ackPk)
126 }
127 }()
128
129 largeData := make([]byte, 100)
130 for i := range largeData {
131 largeData[i] = byte(i)
132 }
133
134 writeDone := make(chan error)
135 go func() {
136 _, err := writer.Write(largeData)
137 writeDone <- err
138 }()
139
140 received := make([]byte, 0, 100)
141 buf := make([]byte, 20)
142 for len(received) < len(largeData) {
143 n, err := reader.Read(buf)
144 if err != nil {
145 t.Fatalf("Read failed: %v", err)
146 }
147 received = append(received, buf[:n]...)
148 }
149
150 select {
151 case err := <-writeDone:
152 if err != nil {
153 t.Fatalf("Write failed: %v", err)
154 }
155 case <-time.After(2 * time.Second):
156 t.Fatal("Write didn't complete in time")
157 }
158
159 if !bytes.Equal(received, largeData) {
160 t.Fatal("Received data doesn't match sent data")
161 }
162}
163
164func TestError(t *testing.T) {
165 transport := newFakeTransport()

Callers

nothing calls this directly

Calls 7

RecvDataMethod · 0.95
RecvAckMethod · 0.95
WriteMethod · 0.95
ReadMethod · 0.95
newFakeTransportFunction · 0.85
NewReaderFunction · 0.85
NewWriterFunction · 0.85

Tested by

no test coverage detected