~chipaca/ubuntu-push/session-refactor-002

« back to all changes in this revision

Viewing changes to client/session/session_test.go

  • Committer: John R. Lenton
  • Date: 2015-02-06 10:26:55 UTC
  • Revision ID: jlenton@gmail.com-20150206102655-elaqux14ezyvidr3
first step

Show diffs side-by-side

added added

removed removed

Lines of Context:
169
169
 
170
170
/////
171
171
 
172
 
type clientSessionSuite struct {
 
172
type ConcreteSessionSuite struct {
173
173
        log  *helpers.TestLogger
174
174
        lvls func() (seenstate.SeenState, error)
175
175
}
176
176
 
177
 
func (cs *clientSessionSuite) SetUpTest(c *C) {
 
177
func (cs *ConcreteSessionSuite) SetUpTest(c *C) {
178
178
        cs.log = helpers.NewTestLogger(c, "debug")
179
179
}
180
180
 
181
181
// in-memory level map testing
182
 
var _ = Suite(&clientSessionSuite{lvls: seenstate.NewSeenState})
 
182
var _ = Suite(&ConcreteSessionSuite{lvls: seenstate.NewSeenState})
183
183
 
184
184
// sqlite level map testing
185
 
type clientSqlevelsSessionSuite struct{ clientSessionSuite }
 
185
type clientSqlevelsSessionSuite struct{ ConcreteSessionSuite }
186
186
 
187
187
var _ = Suite(&clientSqlevelsSessionSuite{})
188
188
 
194
194
  parseServerAddrSpec() tests
195
195
****************************************************************/
196
196
 
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)
209
209
}
210
210
 
211
211
/****************************************************************
212
 
  NewSession() tests
 
212
  newSession() tests
213
213
****************************************************************/
214
214
 
215
215
var dummyConf = ClientSessionConfig{}
216
216
 
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)
229
229
}
230
230
 
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)
235
235
}
237
237
var certfile string = helpers.SourceRelative("../../server/acceptance/ssl/testing.cert")
238
238
var pem, _ = ioutil.ReadFile(certfile)
239
239
 
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)
246
246
}
247
247
 
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)
254
254
}
255
255
 
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)
261
261
}
264
264
  getHosts() tests
265
265
****************************************************************/
266
266
 
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
283
283
}
284
284
 
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"})
291
291
}
292
292
 
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)
303
303
}
304
304
 
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"})
328
328
}
329
329
 
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
****************************************************************/
356
356
 
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")
366
366
}
367
367
 
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
****************************************************************/
380
380
 
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,
386
386
                },
402
402
        sess.tryHost = 2
403
403
}
404
404
 
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,
410
410
                },
415
415
        c.Check(sess.startConnectionAttempt, PanicMatches, "should have got hosts from config or remote at this point")
416
416
}
417
417
 
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"},
421
421
                tryHost:       0,
422
422
                leftToTry:     3,
438
438
        c.Check(sess.tryHost, Equals, 1)
439
439
}
440
440
 
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)
444
444
 
445
445
        sess.deliveryHosts = []string{"foo:443", "bar:443", "baz:443"}
457
457
  connect() tests
458
458
****************************************************************/
459
459
 
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)
469
469
}
470
470
 
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)
484
484
}
485
485
 
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)
500
500
}
501
501
 
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)
506
506
        srv.Close()
507
507
        c.Assert(err, IsNil)
508
508
        sess.deliveryHosts = []string{srv.Addr().String()}
517
517
  Close() tests
518
518
****************************************************************/
519
519
 
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"}
524
524
        sess.Close()
526
526
        c.Check(sess.State(), Equals, Disconnected)
527
527
}
528
528
 
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"}
533
533
        sess.Close()
537
537
        c.Check(sess.State(), Equals, Disconnected)
538
538
}
539
539
 
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)}
544
544
        sess.Close()
551
551
func (*derp) Redial() uint32 { return 0 }
552
552
func (d *derp) Stop()        { d.stopped = true }
553
553
 
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)
557
557
        ar := new(derp)
558
558
        sess.retrier = ar
567
567
  AutoRedial() tests
568
568
****************************************************************/
569
569
 
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)
574
574
        ar := new(derp)
575
575
        sess.retrier = ar
578
578
        c.Check(ar.stopped, Equals, true)
579
579
}
580
580
 
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)
591
591
}
592
592
 
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)
596
596
        flag := false
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)
600
600
}
601
601
 
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()
616
616
****************************************************************/
617
617
 
618
618
type msgSuite struct {
619
 
        sess   *ClientSession
 
619
        sess   *ConcreteSession
620
620
        upCh   chan interface{}
621
621
        downCh chan interface{}
622
622
        errCh  chan error
629
629
        conf := ClientSessionConfig{
630
630
                ExchangeTimeout: time.Millisecond,
631
631
        }
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
/****************************************************************
1168
1168
  start() tests
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)
1178
1178
}
1179
1179
 
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)
1188
1188
}
1189
1189
 
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.")
1208
1208
}
1209
1209
 
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)
1235
1235
}
1236
1236
 
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)
1259
1259
}
1260
1260
 
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)
1283
1283
}
1284
1284
 
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)
1307
1307
}
1308
1308
 
1309
 
func (cs *clientSessionSuite) TestStartWorks(c *C) {
 
1309
func (cs *ConcreteSessionSuite) TestStartWorks(c *C) {
1310
1310
        info := map[string]interface{}{
1311
1311
                "foo": 1,
1312
1312
                "bar": "baz",
1314
1314
        conf := ClientSessionConfig{
1315
1315
                Info: info,
1316
1316
        }
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")
1350
1350
  run() tests
1351
1351
****************************************************************/
1352
1352
 
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)
1367
1367
}
1368
1368
 
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)
1383
1383
}
1384
1384
 
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)
1397
1397
}
1398
1398
 
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)
1411
1411
}
1412
1412
 
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)
1441
1441
  Jitter() tests
1442
1442
****************************************************************/
1443
1443
 
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 //
1472
1472
  Dial() tests
1473
1473
****************************************************************/
1474
1474
 
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.")
1488
1488
        }
1489
1489
)
1490
1490
 
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)
1506
1506
        }))
1507
1507
        defer ts.Close()
1508
1508
 
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)
1534
1534
}
1535
1535
 
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)
1551
1551
        }))
1552
1552
        defer ts.Close()
1553
1553
 
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)
1635
1635
}
1636
1636
 
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()
1644
1644
 
1658
1658
  redialDelay() tests
1659
1659
****************************************************************/
1660
1660
 
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)
1669
1669
}
1670
1670
 
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}
1675
1675
        n := 0
1693
1693
  ClearCookie() tests
1694
1694
****************************************************************/
1695
1695
 
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")