Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(701)

Side by Side Diff: state/apiserver/root_test.go

Issue 24040044: apiserver: analyzing ping timeouts
Patch Set: apiserver: analyzing ping timeouts Created 10 years, 4 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View unified diff | Download patch
« state/apiserver/root.go ('K') | « state/apiserver/root.go ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012, 2013 Canonical Ltd. 1 // Copyright 2012, 2013 Canonical Ltd.
2 // Licensed under the AGPLv3, see LICENCE file for details. 2 // Licensed under the AGPLv3, see LICENCE file for details.
3 3
4 package apiserver_test 4 package apiserver_test
5 5
6 import ( 6 import (
7 "time"
8
7 gc "launchpad.net/gocheck" 9 gc "launchpad.net/gocheck"
8 10
9 "launchpad.net/juju-core/rpc/rpcreflect" 11 "launchpad.net/juju-core/rpc/rpcreflect"
10 "launchpad.net/juju-core/state/apiserver" 12 "launchpad.net/juju-core/state/apiserver"
11 ) 13 )
12 14
13 type rootSuite struct{} 15 type rootSuite struct{}
14 16
15 var _ = gc.Suite(&rootSuite{}) 17 var _ = gc.Suite(&rootSuite{})
16 18
(...skipping 17 matching lines...) Expand all
34 m, err := t.Method(name) 36 m, err := t.Method(name)
35 c.Assert(err, gc.IsNil) 37 c.Assert(err, gc.IsNil)
36 // We must have some methods on every object returned 38 // We must have some methods on every object returned
37 // by a root-level method. 39 // by a root-level method.
38 c.Assert(m.ObjType.MethodNames(), gc.Not(gc.HasLen), 0) 40 c.Assert(m.ObjType.MethodNames(), gc.Not(gc.HasLen), 0)
39 // We don't allow any methods that don't implement 41 // We don't allow any methods that don't implement
40 // an RPC entry point. 42 // an RPC entry point.
41 c.Assert(m.ObjType.DiscardedMethods(), gc.HasLen, 0) 43 c.Assert(m.ObjType.DiscardedMethods(), gc.HasLen, 0)
42 } 44 }
43 } 45 }
46
47 func (r *rootSuite) TestPingTimeout(c *gc.C) {
48 closedc := make(chan time.Time, 1)
49 action := func() {
50 closedc <- time.Now()
51 }
52 timeout := apiserver.NewPingTimeout(action, 50*time.Millisecond)
53 for i := 0; i < 10; i++ {
rog 2013/11/19 14:44:08 s/10/2/ i don't think there's really any particul
mue 2013/11/19 15:52:37 Done.
54 time.Sleep(10 * time.Millisecond)
55 timeout.Ping()
56 }
57 // Expect action to be executed about 50ms after last ping.
58 broken := time.Now()
59 time.Sleep(100 * time.Millisecond)
60 closed := <-closedc
rog 2013/11/19 14:44:08 select { case closed = <-closed: case <-testing.Lo
mue 2013/11/19 15:52:37 Had luck so far, but that's better.
61 closeDiff := closed.Sub(broken).Nanoseconds() / 1000000
rog 2013/11/19 14:44:08 or: closeDiff := closed.Sub(broken) / time.Millise
mue 2013/11/19 15:52:37 Gnah! Sure. :)
62 c.Assert(closeDiff >= 50 && closeDiff <= 60, gc.Equals, true)
rog 2013/11/19 14:44:08 50 <= closeDiff && closeDiff <= 60 is a nice conv
mue 2013/11/19 15:52:37 Done.
63 }
OLDNEW
« state/apiserver/root.go ('K') | « state/apiserver/root.go ('k') | no next file » | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b