Left: | ||
Right: |
OLD | NEW |
---|---|
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 Loading... | |
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 } | |
OLD | NEW |