github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/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 "time" 8 9 gc "launchpad.net/gocheck" 10 11 "launchpad.net/juju-core/rpc/rpcreflect" 12 "launchpad.net/juju-core/state/apiserver" 13 "launchpad.net/juju-core/testing" 14 ) 15 16 type rootSuite struct{} 17 18 var _ = gc.Suite(&rootSuite{}) 19 20 var allowedDiscardedMethods = []string{ 21 "AuthClient", 22 "AuthEnvironManager", 23 "AuthMachineAgent", 24 "AuthOwner", 25 "AuthUnitAgent", 26 "GetAuthEntity", 27 "GetAuthTag", 28 } 29 30 func (*rootSuite) TestDiscardedAPIMethods(c *gc.C) { 31 t := rpcreflect.TypeOf(apiserver.RootType) 32 // We must have some root-level methods. 33 c.Assert(t.MethodNames(), gc.Not(gc.HasLen), 0) 34 c.Assert(t.DiscardedMethods(), gc.DeepEquals, allowedDiscardedMethods) 35 36 for _, name := range t.MethodNames() { 37 m, err := t.Method(name) 38 c.Assert(err, gc.IsNil) 39 // We must have some methods on every object returned 40 // by a root-level method. 41 c.Assert(m.ObjType.MethodNames(), gc.Not(gc.HasLen), 0) 42 // We don't allow any methods that don't implement 43 // an RPC entry point. 44 c.Assert(m.ObjType.DiscardedMethods(), gc.HasLen, 0) 45 } 46 } 47 48 func (r *rootSuite) TestPingTimeout(c *gc.C) { 49 closedc := make(chan time.Time, 1) 50 action := func() { 51 closedc <- time.Now() 52 } 53 timeout := apiserver.NewPingTimeout(action, 50*time.Millisecond) 54 for i := 0; i < 2; i++ { 55 time.Sleep(10 * time.Millisecond) 56 timeout.Ping() 57 } 58 // Expect action to be executed about 50ms after last ping. 59 broken := time.Now() 60 var closed time.Time 61 time.Sleep(100 * time.Millisecond) 62 select { 63 case closed = <-closedc: 64 case <-time.After(testing.LongWait): 65 c.Fatalf("action never executed") 66 } 67 closeDiff := closed.Sub(broken) / time.Millisecond 68 c.Assert(50 <= closeDiff && closeDiff <= 100, gc.Equals, true) 69 }