172
type clientSessionSuite struct {
172
type ConcreteSessionSuite struct {
173
173
log *helpers.TestLogger
174
174
lvls func() (seenstate.SeenState, error)
177
func (cs *clientSessionSuite) SetUpTest(c *C) {
177
func (cs *ConcreteSessionSuite) SetUpTest(c *C) {
178
178
cs.log = helpers.NewTestLogger(c, "debug")
181
181
// in-memory level map testing
182
var _ = Suite(&clientSessionSuite{lvls: seenstate.NewSeenState})
182
var _ = Suite(&ConcreteSessionSuite{lvls: seenstate.NewSeenState})
184
184
// sqlite level map testing
185
type clientSqlevelsSessionSuite struct{ clientSessionSuite }
185
type clientSqlevelsSessionSuite struct{ ConcreteSessionSuite }
187
187
var _ = Suite(&clientSqlevelsSessionSuite{})
194
194
parseServerAddrSpec() tests
195
195
****************************************************************/
197
func (cs *clientSessionSuite) TestParseServerAddrSpec(c *C) {
197
func (cs *ConcreteSessionSuite) TestParseServerAddrSpec(c *C) {
198
198
hEp, fallbackHosts := parseServerAddrSpec("http://foo/hosts")
199
199
c.Check(hEp, Equals, "http://foo/hosts")
200
200
c.Check(fallbackHosts, IsNil)
211
211
/****************************************************************
213
213
****************************************************************/
215
215
var dummyConf = ClientSessionConfig{}
217
func (cs *clientSessionSuite) TestNewSessionPlainWorks(c *C) {
218
sess, err := NewSession("foo:443", dummyConf, "", cs.lvls, cs.log)
217
func (cs *ConcreteSessionSuite) TestnewSessionPlainWorks(c *C) {
218
sess, err := newSession("foo:443", dummyConf, "", cs.lvls, cs.log)
219
219
c.Check(sess, NotNil)
220
220
c.Check(err, IsNil)
221
221
c.Check(sess.fallbackHosts, DeepEquals, []string{"foo:443"})
228
228
c.Check(sess.State(), Equals, Disconnected)
231
func (cs *clientSessionSuite) TestNewSessionHostEndpointWorks(c *C) {
232
sess, err := NewSession("http://foo/hosts", dummyConf, "wah", cs.lvls, cs.log)
231
func (cs *ConcreteSessionSuite) TestnewSessionHostEndpointWorks(c *C) {
232
sess, err := newSession("http://foo/hosts", dummyConf, "wah", cs.lvls, cs.log)
233
233
c.Assert(err, IsNil)
234
234
c.Check(sess.getHost, NotNil)
237
237
var certfile string = helpers.SourceRelative("../../server/acceptance/ssl/testing.cert")
238
238
var pem, _ = ioutil.ReadFile(certfile)
240
func (cs *clientSessionSuite) TestNewSessionPEMWorks(c *C) {
240
func (cs *ConcreteSessionSuite) TestnewSessionPEMWorks(c *C) {
241
241
conf := ClientSessionConfig{PEM: pem}
242
sess, err := NewSession("", conf, "wah", cs.lvls, cs.log)
242
sess, err := newSession("", conf, "wah", cs.lvls, cs.log)
243
243
c.Check(sess, NotNil)
244
244
c.Assert(err, IsNil)
245
245
c.Check(sess.TLS.RootCAs, NotNil)
248
func (cs *clientSessionSuite) TestNewSessionBadPEMFileContentFails(c *C) {
248
func (cs *ConcreteSessionSuite) TestnewSessionBadPEMFileContentFails(c *C) {
249
249
badpem := []byte("This is not the PEM you're looking for.")
250
250
conf := ClientSessionConfig{PEM: badpem}
251
sess, err := NewSession("", conf, "wah", cs.lvls, cs.log)
251
sess, err := newSession("", conf, "wah", cs.lvls, cs.log)
252
252
c.Check(sess, IsNil)
253
253
c.Check(err, NotNil)
256
func (cs *clientSessionSuite) TestNewSessionBadSeenStateFails(c *C) {
256
func (cs *ConcreteSessionSuite) TestnewSessionBadSeenStateFails(c *C) {
257
257
ferr := func() (seenstate.SeenState, error) { return nil, errors.New("Busted.") }
258
sess, err := NewSession("", dummyConf, "wah", ferr, cs.log)
258
sess, err := newSession("", dummyConf, "wah", ferr, cs.log)
259
259
c.Check(sess, IsNil)
260
260
c.Assert(err, NotNil)
265
265
****************************************************************/
267
func (cs *clientSessionSuite) TestGetHostsFallback(c *C) {
267
func (cs *ConcreteSessionSuite) TestGetHostsFallback(c *C) {
268
268
fallback := []string{"foo:443", "bar:443"}
269
sess := &ClientSession{fallbackHosts: fallback}
269
sess := &ConcreteSession{fallbackHosts: fallback}
270
270
err := sess.getHosts()
271
271
c.Assert(err, IsNil)
272
272
c.Check(sess.deliveryHosts, DeepEquals, fallback)
282
282
return &gethosts.Host{thg.domain, thg.hosts}, thg.err
285
func (cs *clientSessionSuite) TestGetHostsRemote(c *C) {
285
func (cs *ConcreteSessionSuite) TestGetHostsRemote(c *C) {
286
286
hostGetter := &testHostGetter{"example.com", []string{"foo:443", "bar:443"}, nil}
287
sess := &ClientSession{getHost: hostGetter, timeSince: time.Since}
287
sess := &ConcreteSession{getHost: hostGetter, timeSince: time.Since}
288
288
err := sess.getHosts()
289
289
c.Assert(err, IsNil)
290
290
c.Check(sess.deliveryHosts, DeepEquals, []string{"foo:443", "bar:443"})
293
func (cs *clientSessionSuite) TestGetHostsRemoteError(c *C) {
294
sess, err := NewSession("", dummyConf, "", cs.lvls, cs.log)
293
func (cs *ConcreteSessionSuite) TestGetHostsRemoteError(c *C) {
294
sess, err := newSession("", dummyConf, "", cs.lvls, cs.log)
295
295
c.Assert(err, IsNil)
296
296
hostsErr := errors.New("failed")
297
297
hostGetter := &testHostGetter{"", nil, hostsErr}
302
302
c.Check(sess.State(), Equals, Error)
305
func (cs *clientSessionSuite) TestGetHostsRemoteCaching(c *C) {
305
func (cs *ConcreteSessionSuite) TestGetHostsRemoteCaching(c *C) {
306
306
hostGetter := &testHostGetter{"example.com", []string{"foo:443", "bar:443"}, nil}
307
sess := &ClientSession{
307
sess := &ConcreteSession{
308
308
getHost: hostGetter,
309
309
ClientSessionConfig: ClientSessionConfig{
310
310
HostsCachingExpiryTime: 2 * time.Hour,
327
327
c.Check(sess.deliveryHosts, DeepEquals, []string{"baz:443"})
330
func (cs *clientSessionSuite) TestGetHostsRemoteCachingReset(c *C) {
330
func (cs *ConcreteSessionSuite) TestGetHostsRemoteCachingReset(c *C) {
331
331
hostGetter := &testHostGetter{"example.com", []string{"foo:443", "bar:443"}, nil}
332
sess := &ClientSession{
332
sess := &ConcreteSession{
333
333
getHost: hostGetter,
334
334
ClientSessionConfig: ClientSessionConfig{
335
335
HostsCachingExpiryTime: 2 * time.Hour,
354
354
addAuthorization() tests
355
355
****************************************************************/
357
func (cs *clientSessionSuite) TestAddAuthorizationAddsAuthorization(c *C) {
357
func (cs *ConcreteSessionSuite) TestAddAuthorizationAddsAuthorization(c *C) {
358
358
url := "xyzzy://"
359
sess := &ClientSession{Log: cs.log}
359
sess := &ConcreteSession{Log: cs.log}
360
360
sess.AuthGetter = func(url string) string { return url + " auth'ed" }
361
361
sess.AuthURL = url
362
362
c.Assert(sess.auth, Equals, "")
365
365
c.Check(sess.auth, Equals, "xyzzy:// auth'ed")
368
func (cs *clientSessionSuite) TestAddAuthorizationSkipsIfUnset(c *C) {
369
sess := &ClientSession{Log: cs.log}
368
func (cs *ConcreteSessionSuite) TestAddAuthorizationSkipsIfUnset(c *C) {
369
sess := &ConcreteSession{Log: cs.log}
370
370
sess.AuthGetter = nil
371
371
c.Assert(sess.auth, Equals, "")
372
372
err := sess.addAuthorization()
378
378
startConnectionAttempt()/nextHostToTry()/started tests
379
379
****************************************************************/
381
func (cs *clientSessionSuite) TestStartConnectionAttempt(c *C) {
381
func (cs *ConcreteSessionSuite) TestStartConnectionAttempt(c *C) {
382
382
since := time.Since(time.Time{})
383
sess := &ClientSession{
383
sess := &ConcreteSession{
384
384
ClientSessionConfig: ClientSessionConfig{
385
385
ExpectAllRepairedTime: 10 * time.Second,
405
func (cs *clientSessionSuite) TestStartConnectionAttemptNoHostsPanic(c *C) {
405
func (cs *ConcreteSessionSuite) TestStartConnectionAttemptNoHostsPanic(c *C) {
406
406
since := time.Since(time.Time{})
407
sess := &ClientSession{
407
sess := &ConcreteSession{
408
408
ClientSessionConfig: ClientSessionConfig{
409
409
ExpectAllRepairedTime: 10 * time.Second,
415
415
c.Check(sess.startConnectionAttempt, PanicMatches, "should have got hosts from config or remote at this point")
418
func (cs *clientSessionSuite) TestNextHostToTry(c *C) {
419
sess := &ClientSession{
418
func (cs *ConcreteSessionSuite) TestNextHostToTry(c *C) {
419
sess := &ConcreteSession{
420
420
deliveryHosts: []string{"foo:443", "bar:443", "baz:443"},
438
438
c.Check(sess.tryHost, Equals, 1)
441
func (cs *clientSessionSuite) TestStarted(c *C) {
442
sess, err := NewSession("", dummyConf, "", cs.lvls, cs.log)
441
func (cs *ConcreteSessionSuite) TestStarted(c *C) {
442
sess, err := newSession("", dummyConf, "", cs.lvls, cs.log)
443
443
c.Assert(err, IsNil)
445
445
sess.deliveryHosts = []string{"foo:443", "bar:443", "baz:443"}
458
458
****************************************************************/
460
func (cs *clientSessionSuite) TestConnectFailsWithNoAddress(c *C) {
461
sess, err := NewSession("", dummyConf, "wah", cs.lvls, cs.log)
460
func (cs *ConcreteSessionSuite) TestConnectFailsWithNoAddress(c *C) {
461
sess, err := newSession("", dummyConf, "wah", cs.lvls, cs.log)
462
462
c.Assert(err, IsNil)
463
463
sess.deliveryHosts = []string{"nowhere"}
464
464
sess.clearShouldDelay()
468
468
c.Check(sess.State(), Equals, Error)
471
func (cs *clientSessionSuite) TestConnectConnects(c *C) {
471
func (cs *ConcreteSessionSuite) TestConnectConnects(c *C) {
472
472
srv, err := net.Listen("tcp", "localhost:0")
473
473
c.Assert(err, IsNil)
474
474
defer srv.Close()
475
sess, err := NewSession("", dummyConf, "wah", cs.lvls, cs.log)
475
sess, err := newSession("", dummyConf, "wah", cs.lvls, cs.log)
476
476
c.Assert(err, IsNil)
477
477
sess.deliveryHosts = []string{srv.Addr().String()}
478
478
sess.clearShouldDelay()
483
483
c.Check(sess.State(), Equals, Connected)
486
func (cs *clientSessionSuite) TestConnectSecondConnects(c *C) {
486
func (cs *ConcreteSessionSuite) TestConnectSecondConnects(c *C) {
487
487
srv, err := net.Listen("tcp", "localhost:0")
488
488
c.Assert(err, IsNil)
489
489
defer srv.Close()
490
sess, err := NewSession("", dummyConf, "wah", cs.lvls, cs.log)
490
sess, err := newSession("", dummyConf, "wah", cs.lvls, cs.log)
491
491
c.Assert(err, IsNil)
492
492
sess.deliveryHosts = []string{"nowhere", srv.Addr().String()}
493
493
sess.clearShouldDelay()
499
499
c.Check(sess.tryHost, Equals, 0)
502
func (cs *clientSessionSuite) TestConnectConnectFail(c *C) {
502
func (cs *ConcreteSessionSuite) TestConnectConnectFail(c *C) {
503
503
srv, err := net.Listen("tcp", "localhost:0")
504
504
c.Assert(err, IsNil)
505
sess, err := NewSession(srv.Addr().String(), dummyConf, "wah", cs.lvls, cs.log)
505
sess, err := newSession(srv.Addr().String(), dummyConf, "wah", cs.lvls, cs.log)
507
507
c.Assert(err, IsNil)
508
508
sess.deliveryHosts = []string{srv.Addr().String()}
518
518
****************************************************************/
520
func (cs *clientSessionSuite) TestClose(c *C) {
521
sess, err := NewSession("", dummyConf, "wah", cs.lvls, cs.log)
520
func (cs *ConcreteSessionSuite) TestClose(c *C) {
521
sess, err := newSession("", dummyConf, "wah", cs.lvls, cs.log)
522
522
c.Assert(err, IsNil)
523
523
sess.Connection = &testConn{Name: "TestClose"}
526
526
c.Check(sess.State(), Equals, Disconnected)
529
func (cs *clientSessionSuite) TestCloseTwice(c *C) {
530
sess, err := NewSession("", dummyConf, "wah", cs.lvls, cs.log)
529
func (cs *ConcreteSessionSuite) TestCloseTwice(c *C) {
530
sess, err := newSession("", dummyConf, "wah", cs.lvls, cs.log)
531
531
c.Assert(err, IsNil)
532
532
sess.Connection = &testConn{Name: "TestCloseTwice"}
537
537
c.Check(sess.State(), Equals, Disconnected)
540
func (cs *clientSessionSuite) TestCloseFails(c *C) {
541
sess, err := NewSession("", dummyConf, "wah", cs.lvls, cs.log)
540
func (cs *ConcreteSessionSuite) TestCloseFails(c *C) {
541
sess, err := newSession("", dummyConf, "wah", cs.lvls, cs.log)
542
542
c.Assert(err, IsNil)
543
543
sess.Connection = &testConn{Name: "TestCloseFails", CloseCondition: condition.Work(false)}
551
551
func (*derp) Redial() uint32 { return 0 }
552
552
func (d *derp) Stop() { d.stopped = true }
554
func (cs *clientSessionSuite) TestCloseStopsRetrier(c *C) {
555
sess, err := NewSession("", dummyConf, "wah", cs.lvls, cs.log)
554
func (cs *ConcreteSessionSuite) TestCloseStopsRetrier(c *C) {
555
sess, err := newSession("", dummyConf, "wah", cs.lvls, cs.log)
556
556
c.Assert(err, IsNil)
558
558
sess.retrier = ar
567
567
AutoRedial() tests
568
568
****************************************************************/
570
func (cs *clientSessionSuite) TestAutoRedialWorks(c *C) {
570
func (cs *ConcreteSessionSuite) TestAutoRedialWorks(c *C) {
571
571
// checks that AutoRedial sets up a retrier and tries redialing it
572
sess, err := NewSession("", dummyConf, "wah", cs.lvls, cs.log)
572
sess, err := newSession("", dummyConf, "wah", cs.lvls, cs.log)
573
573
c.Assert(err, IsNil)
575
575
sess.retrier = ar
578
578
c.Check(ar.stopped, Equals, true)
581
func (cs *clientSessionSuite) TestAutoRedialStopsRetrier(c *C) {
581
func (cs *ConcreteSessionSuite) TestAutoRedialStopsRetrier(c *C) {
582
582
// checks that AutoRedial stops the previous retrier
583
sess, err := NewSession("", dummyConf, "wah", cs.lvls, cs.log)
583
sess, err := newSession("", dummyConf, "wah", cs.lvls, cs.log)
584
584
c.Assert(err, IsNil)
585
585
ch := make(chan uint32)
586
586
c.Check(sess.retrier, IsNil)
590
590
c.Check(<-ch, Not(Equals), 0)
593
func (cs *clientSessionSuite) TestAutoRedialCallsRedialDelay(c *C) {
594
sess, err := NewSession("", dummyConf, "wah", cs.lvls, cs.log)
593
func (cs *ConcreteSessionSuite) TestAutoRedialCallsRedialDelay(c *C) {
594
sess, err := newSession("", dummyConf, "wah", cs.lvls, cs.log)
595
595
c.Assert(err, IsNil)
597
sess.redialDelay = func(sess *ClientSession) time.Duration { flag = true; return 0 }
597
sess.redialDelay = func(sess *ConcreteSession) time.Duration { flag = true; return 0 }
598
598
sess.AutoRedial(nil)
599
599
c.Check(flag, Equals, true)
602
func (cs *clientSessionSuite) TestAutoRedialSetsRedialDelayIfTooQuick(c *C) {
603
sess, err := NewSession("", dummyConf, "wah", cs.lvls, cs.log)
602
func (cs *ConcreteSessionSuite) TestAutoRedialSetsRedialDelayIfTooQuick(c *C) {
603
sess, err := newSession("", dummyConf, "wah", cs.lvls, cs.log)
604
604
c.Assert(err, IsNil)
605
sess.redialDelay = func(sess *ClientSession) time.Duration { return 0 }
605
sess.redialDelay = func(sess *ConcreteSession) time.Duration { return 0 }
606
606
sess.AutoRedial(nil)
607
607
c.Check(sess.ShouldDelay(), Equals, false)
608
608
sess.stopRedial()
629
629
conf := ClientSessionConfig{
630
630
ExchangeTimeout: time.Millisecond,
632
s.sess, err = NewSession("", conf, "wah", seenstate.NewSeenState, helpers.NewTestLogger(c, "debug"))
632
s.sess, err = newSession("", conf, "wah", seenstate.NewSeenState, helpers.NewTestLogger(c, "debug"))
633
633
c.Assert(err, IsNil)
634
634
s.sess.Connection = &testConn{Name: "TestHandle*"}
635
635
s.errCh = make(chan error, 1)
1167
1167
/****************************************************************
1169
1169
****************************************************************/
1170
func (cs *clientSessionSuite) TestStartFailsIfSetDeadlineFails(c *C) {
1171
sess, err := NewSession("", dummyConf, "wah", cs.lvls, cs.log)
1170
func (cs *ConcreteSessionSuite) TestStartFailsIfSetDeadlineFails(c *C) {
1171
sess, err := newSession("", dummyConf, "wah", cs.lvls, cs.log)
1172
1172
c.Assert(err, IsNil)
1173
1173
sess.Connection = &testConn{Name: "TestStartFailsIfSetDeadlineFails",
1174
1174
DeadlineCondition: condition.Work(false)} // setdeadline will fail
1177
1177
c.Check(sess.State(), Equals, Error)
1180
func (cs *clientSessionSuite) TestStartFailsIfWriteFails(c *C) {
1181
sess, err := NewSession("", dummyConf, "wah", cs.lvls, cs.log)
1180
func (cs *ConcreteSessionSuite) TestStartFailsIfWriteFails(c *C) {
1181
sess, err := newSession("", dummyConf, "wah", cs.lvls, cs.log)
1182
1182
c.Assert(err, IsNil)
1183
1183
sess.Connection = &testConn{Name: "TestStartFailsIfWriteFails",
1184
1184
WriteCondition: condition.Work(false)} // write will fail
1187
1187
c.Check(sess.State(), Equals, Error)
1190
func (cs *clientSessionSuite) TestStartFailsIfGetLevelsFails(c *C) {
1191
sess, err := NewSession("", dummyConf, "wah", cs.lvls, cs.log)
1190
func (cs *ConcreteSessionSuite) TestStartFailsIfGetLevelsFails(c *C) {
1191
sess, err := newSession("", dummyConf, "wah", cs.lvls, cs.log)
1192
1192
c.Assert(err, IsNil)
1193
1193
sess.SeenState = &brokenSeenState{}
1194
1194
sess.Connection = &testConn{Name: "TestStartConnectMessageFails"}
1207
1207
c.Check(err, ErrorMatches, "broken.")
1210
func (cs *clientSessionSuite) TestStartConnectMessageFails(c *C) {
1211
sess, err := NewSession("", dummyConf, "wah", cs.lvls, cs.log)
1210
func (cs *ConcreteSessionSuite) TestStartConnectMessageFails(c *C) {
1211
sess, err := newSession("", dummyConf, "wah", cs.lvls, cs.log)
1212
1212
c.Assert(err, IsNil)
1213
1213
sess.Connection = &testConn{Name: "TestStartConnectMessageFails"}
1214
1214
errCh := make(chan error, 1)
1234
1234
c.Check(sess.State(), Equals, Error)
1237
func (cs *clientSessionSuite) TestStartConnackReadError(c *C) {
1238
sess, err := NewSession("", dummyConf, "wah", cs.lvls, cs.log)
1237
func (cs *ConcreteSessionSuite) TestStartConnackReadError(c *C) {
1238
sess, err := newSession("", dummyConf, "wah", cs.lvls, cs.log)
1239
1239
c.Assert(err, IsNil)
1240
1240
sess.Connection = &testConn{Name: "TestStartConnackReadError"}
1241
1241
errCh := make(chan error, 1)
1258
1258
c.Check(sess.State(), Equals, Error)
1261
func (cs *clientSessionSuite) TestStartBadConnack(c *C) {
1262
sess, err := NewSession("", dummyConf, "wah", cs.lvls, cs.log)
1261
func (cs *ConcreteSessionSuite) TestStartBadConnack(c *C) {
1262
sess, err := newSession("", dummyConf, "wah", cs.lvls, cs.log)
1263
1263
c.Assert(err, IsNil)
1264
1264
sess.Connection = &testConn{Name: "TestStartBadConnack"}
1265
1265
errCh := make(chan error, 1)
1282
1282
c.Check(sess.State(), Equals, Error)
1285
func (cs *clientSessionSuite) TestStartNotConnack(c *C) {
1286
sess, err := NewSession("", dummyConf, "wah", cs.lvls, cs.log)
1285
func (cs *ConcreteSessionSuite) TestStartNotConnack(c *C) {
1286
sess, err := newSession("", dummyConf, "wah", cs.lvls, cs.log)
1287
1287
c.Assert(err, IsNil)
1288
1288
sess.Connection = &testConn{Name: "TestStartBadConnack"}
1289
1289
errCh := make(chan error, 1)
1306
1306
c.Check(sess.State(), Equals, Error)
1309
func (cs *clientSessionSuite) TestStartWorks(c *C) {
1309
func (cs *ConcreteSessionSuite) TestStartWorks(c *C) {
1310
1310
info := map[string]interface{}{
1314
1314
conf := ClientSessionConfig{
1317
sess, err := NewSession("", conf, "wah", cs.lvls, cs.log)
1317
sess, err := newSession("", conf, "wah", cs.lvls, cs.log)
1318
1318
c.Assert(err, IsNil)
1319
1319
sess.Connection = &testConn{Name: "TestStartWorks"}
1320
1320
sess.setCookie("COOKIE")
1351
1351
****************************************************************/
1353
func (cs *clientSessionSuite) TestRunBailsIfAuthCheckFails(c *C) {
1354
sess, err := NewSession("", dummyConf, "wah", cs.lvls, cs.log)
1353
func (cs *ConcreteSessionSuite) TestRunBailsIfAuthCheckFails(c *C) {
1354
sess, err := newSession("", dummyConf, "wah", cs.lvls, cs.log)
1355
1355
c.Assert(err, IsNil)
1356
1356
failure := errors.New("TestRunBailsIfAuthCheckFails")
1357
1357
has_closed := false
1366
1366
c.Check(has_closed, Equals, true)
1369
func (cs *clientSessionSuite) TestRunBailsIfHostGetterFails(c *C) {
1370
sess, err := NewSession("", dummyConf, "wah", cs.lvls, cs.log)
1369
func (cs *ConcreteSessionSuite) TestRunBailsIfHostGetterFails(c *C) {
1370
sess, err := newSession("", dummyConf, "wah", cs.lvls, cs.log)
1371
1371
c.Assert(err, IsNil)
1372
1372
failure := errors.New("TestRunBailsIfHostGetterFails")
1373
1373
has_closed := false
1382
1382
c.Check(has_closed, Equals, true)
1385
func (cs *clientSessionSuite) TestRunBailsIfConnectFails(c *C) {
1386
sess, err := NewSession("", dummyConf, "wah", cs.lvls, cs.log)
1385
func (cs *ConcreteSessionSuite) TestRunBailsIfConnectFails(c *C) {
1386
sess, err := newSession("", dummyConf, "wah", cs.lvls, cs.log)
1387
1387
c.Assert(err, IsNil)
1388
1388
failure := errors.New("TestRunBailsIfConnectFails")
1389
1389
err = sess.run(
1396
1396
c.Check(err, Equals, failure)
1399
func (cs *clientSessionSuite) TestRunBailsIfStartFails(c *C) {
1400
sess, err := NewSession("", dummyConf, "wah", cs.lvls, cs.log)
1399
func (cs *ConcreteSessionSuite) TestRunBailsIfStartFails(c *C) {
1400
sess, err := newSession("", dummyConf, "wah", cs.lvls, cs.log)
1401
1401
c.Assert(err, IsNil)
1402
1402
failure := errors.New("TestRunBailsIfStartFails")
1403
1403
err = sess.run(
1410
1410
c.Check(err, Equals, failure)
1413
func (cs *clientSessionSuite) TestRunRunsEvenIfLoopFails(c *C) {
1414
sess, err := NewSession("", dummyConf, "wah", cs.lvls, cs.log)
1413
func (cs *ConcreteSessionSuite) TestRunRunsEvenIfLoopFails(c *C) {
1414
sess, err := newSession("", dummyConf, "wah", cs.lvls, cs.log)
1415
1415
c.Assert(err, IsNil)
1416
1416
// just to make a point: until here we haven't set ErrCh & BroadcastCh (no
1417
1417
// biggie if this stops being true)
1442
1442
****************************************************************/
1444
func (cs *clientSessionSuite) TestJitter(c *C) {
1445
sess, err := NewSession("", dummyConf, "wah", cs.lvls, cs.log)
1444
func (cs *ConcreteSessionSuite) TestJitter(c *C) {
1445
sess, err := newSession("", dummyConf, "wah", cs.lvls, cs.log)
1446
1446
c.Assert(err, IsNil)
1447
1447
num_tries := 20 // should do the math
1448
1448
spread := time.Second //
1473
1473
****************************************************************/
1475
func (cs *clientSessionSuite) TestDialPanics(c *C) {
1475
func (cs *ConcreteSessionSuite) TestDialPanics(c *C) {
1476
1476
// one last unhappy test
1477
sess, err := NewSession("", dummyConf, "wah", cs.lvls, cs.log)
1477
sess, err := newSession("", dummyConf, "wah", cs.lvls, cs.log)
1478
1478
c.Assert(err, IsNil)
1479
1479
sess.Protocolator = nil
1480
1480
c.Check(sess.Dial, PanicMatches, ".*protocol constructor.")
1491
func (cs *clientSessionSuite) TestDialBadServerName(c *C) {
1491
func (cs *ConcreteSessionSuite) TestDialBadServerName(c *C) {
1492
1492
// a borked server name
1493
1493
lst, err := tls.Listen("tcp", "localhost:0", helpers.TestTLSServerConfig)
1494
1494
c.Assert(err, IsNil)
1507
1507
defer ts.Close()
1509
sess, err := NewSession(ts.URL, dialTestConf, "wah", cs.lvls, cs.log)
1509
sess, err := newSession(ts.URL, dialTestConf, "wah", cs.lvls, cs.log)
1510
1510
c.Assert(err, IsNil)
1511
1511
tconn := &testConn{}
1512
1512
sess.Connection = tconn
1533
1533
c.Check(sess.State(), Equals, Error)
1536
func (cs *clientSessionSuite) TestDialWorks(c *C) {
1536
func (cs *ConcreteSessionSuite) TestDialWorks(c *C) {
1537
1537
// happy path thoughts
1538
1538
lst, err := tls.Listen("tcp", "localhost:0", helpers.TestTLSServerConfig)
1539
1539
c.Assert(err, IsNil)
1552
1552
defer ts.Close()
1554
sess, err := NewSession(ts.URL, dialTestConf, "wah", cs.lvls, cs.log)
1554
sess, err := newSession(ts.URL, dialTestConf, "wah", cs.lvls, cs.log)
1555
1555
c.Assert(err, IsNil)
1556
1556
tconn := &testConn{CloseCondition: condition.Fail2Work(10)}
1557
1557
sess.Connection = tconn
1634
1634
c.Check(<-sess.ErrCh, Equals, failure)
1637
func (cs *clientSessionSuite) TestDialWorksDirect(c *C) {
1637
func (cs *ConcreteSessionSuite) TestDialWorksDirect(c *C) {
1638
1638
// happy path thoughts
1639
1639
lst, err := tls.Listen("tcp", "localhost:0", helpers.TestTLSServerConfig)
1640
1640
c.Assert(err, IsNil)
1641
sess, err := NewSession(lst.Addr().String(), dialTestConf, "wah", cs.lvls, cs.log)
1641
sess, err := newSession(lst.Addr().String(), dialTestConf, "wah", cs.lvls, cs.log)
1642
1642
c.Assert(err, IsNil)
1643
1643
defer sess.Close()
1658
1658
redialDelay() tests
1659
1659
****************************************************************/
1661
func (cs *clientSessionSuite) TestShouldDelay(c *C) {
1662
sess, err := NewSession("foo:443", dummyConf, "", cs.lvls, cs.log)
1661
func (cs *ConcreteSessionSuite) TestShouldDelay(c *C) {
1662
sess, err := newSession("foo:443", dummyConf, "", cs.lvls, cs.log)
1663
1663
c.Assert(err, IsNil)
1664
1664
c.Check(sess.ShouldDelay(), Equals, false)
1665
1665
sess.setShouldDelay()
1668
1668
c.Check(sess.ShouldDelay(), Equals, false)
1671
func (cs *clientSessionSuite) TestRedialDelay(c *C) {
1672
sess, err := NewSession("foo:443", dummyConf, "", cs.lvls, cs.log)
1671
func (cs *ConcreteSessionSuite) TestRedialDelay(c *C) {
1672
sess, err := newSession("foo:443", dummyConf, "", cs.lvls, cs.log)
1673
1673
c.Assert(err, IsNil)
1674
1674
sess.redialDelays = []time.Duration{17, 42}
1693
1693
ClearCookie() tests
1694
1694
****************************************************************/
1696
func (cs *clientSessionSuite) TestClearCookie(c *C) {
1697
sess, err := NewSession("foo:443", dummyConf, "", cs.lvls, cs.log)
1696
func (cs *ConcreteSessionSuite) TestClearCookie(c *C) {
1697
sess, err := newSession("foo:443", dummyConf, "", cs.lvls, cs.log)
1698
1698
c.Assert(err, IsNil)
1699
1699
c.Check(sess.getCookie(), Equals, "")
1700
1700
sess.setCookie("COOKIE")