launchpad.net/~rogpeppe/juju-core/500-errgo-fix@v0.0.0-20140213181702-000000002356/state/apiserver/root_test.go (about) 1 // Copyright 2012, 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package apiserver_test 5 6 import ( 7 gc "launchpad.net/gocheck" 8 "time" 9 10 "launchpad.net/juju-core/rpc/rpcreflect" 11 "launchpad.net/juju-core/state/apiserver" 12 "launchpad.net/juju-core/testing" 13 ) 14 15 type rootSuite struct{} 16 17 var _ = gc.Suite(&rootSuite{}) 18 19 var allowedDiscardedMethods = []string{ 20 "AuthClient", 21 "AuthEnvironManager", 22 "AuthMachineAgent", 23 "AuthOwner", 24 "AuthUnitAgent", 25 "GetAuthEntity", 26 "GetAuthTag", 27 } 28 29 func (*rootSuite) TestDiscardedAPIMethods(c *gc.C) { 30 t := rpcreflect.TypeOf(apiserver.RootType) 31 // We must have some root-level methods. 32 c.Assert(t.MethodNames(), gc.Not(gc.HasLen), 0) 33 c.Assert(t.DiscardedMethods(), gc.DeepEquals, allowedDiscardedMethods) 34 35 for _, name := range t.MethodNames() { 36 m, err := t.Method(name) 37 c.Assert(err, gc.IsNil) 38 // We must have some methods on every object returned 39 // by a root-level method. 40 c.Assert(m.ObjType.MethodNames(), gc.Not(gc.HasLen), 0) 41 // We don't allow any methods that don't implement 42 // an RPC entry point. 43 c.Assert(m.ObjType.DiscardedMethods(), gc.HasLen, 0) 44 } 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 < 2; i++ { 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 var closed time.Time 60 time.Sleep(100 * time.Millisecond) 61 select { 62 case closed = <-closedc: 63 case <-time.After(testing.LongWait): 64 c.Fatalf("action never executed") 65 } 66 closeDiff := closed.Sub(broken) / time.Millisecond 67 c.Assert(50 <= closeDiff && closeDiff <= 100, gc.Equals, true) 68 }