142
142
c.Check(buf[0], Equals, byte(expected))
145
type testSessionResourceManager struct {
149
func (r *testSessionResourceManager) ConsumeConn() {
153
// takeNext takes a string from given channel with a 5s timeout
154
func takeNext(ch <-chan string) string {
156
case <-time.After(5 * time.Second):
157
panic("test protocol exchange stuck: too long waiting")
145
163
func (s *listenerSuite) TestDeviceAcceptLoop(c *C) {
146
164
lst, err := DeviceListen(nil, &testDevListenerCfg{"127.0.0.1:0"})
147
165
c.Check(err, IsNil)
148
166
defer lst.Close()
149
167
errCh := make(chan error)
168
rEvent := make(chan string)
169
resource := &testSessionResourceManager{rEvent}
151
errCh <- lst.AcceptLoop(testSession, s.testlog)
171
errCh <- lst.AcceptLoop(testSession, resource, s.testlog)
153
173
listenerAddr := lst.Addr().String()
174
c.Check(takeNext(rEvent), Equals, "consume")
154
175
conn1, err := testTlsDial(listenerAddr)
155
176
c.Assert(err, IsNil)
177
c.Check(takeNext(rEvent), Equals, "consume")
156
178
defer conn1.Close()
157
179
testWriteByte(c, conn1, '1')
158
180
conn2, err := testTlsDial(listenerAddr)
159
181
c.Assert(err, IsNil)
182
c.Check(takeNext(rEvent), Equals, "consume")
160
183
defer conn2.Close()
161
184
testWriteByte(c, conn2, '2')
162
185
testReadByte(c, conn1, '1')
186
209
c.Check(err, IsNil)
187
210
defer lst.Close()
188
211
errCh := make(chan error)
212
resource := &NopSessionResourceManager{}
190
errCh <- lst.AcceptLoop(testSession, s.testlog)
214
errCh <- lst.AcceptLoop(testSession, resource, s.testlog)
192
216
listenerAddr := lst.Addr().String()
193
217
connectMany := helpers.ScriptAbsPath("connect-many.py")
210
234
c.Check(err, IsNil)
211
235
defer lst.Close()
212
236
errCh := make(chan error)
237
resource := &NopSessionResourceManager{}
214
239
errCh <- lst.AcceptLoop(func(conn net.Conn) error {
215
240
defer conn.Close()
216
241
panic("session crash")
242
}, resource, s.testlog)
219
244
listenerAddr := lst.Addr().String()
220
245
_, err = testTlsDial(listenerAddr)
231
256
c.Check(err, IsNil)
232
257
defer lst.Close()
233
258
errCh := make(chan error)
259
resource := &NopSessionResourceManager{}
235
errCh <- lst.AcceptLoop(testSession, s.testlog)
261
errCh <- lst.AcceptLoop(testSession, resource, s.testlog)
237
263
listenerAddr := lst.Addr().String()
238
264
c.Check(listenerAddr, Equals, foreignLst.Addr().String())