func (s *apiclientSuite) TestDialAPIToEnv(c *gc.C) { info := s.APIInfo(c) conn, _, err := api.DialAPI(info, api.DialOpts{}) c.Assert(err, jc.ErrorIsNil) defer conn.Close() assertConnAddrForModel(c, conn, info.Addrs[0], s.State.ModelUUID()) }
func (s *apiclientSuite) TestDialAPIToRoot(c *gc.C) { info := s.APIInfo(c) info.ModelTag = names.NewModelTag("") conn, _, err := api.DialAPI(info, api.DialOpts{}) c.Assert(err, jc.ErrorIsNil) defer conn.Close() assertConnAddrForRoot(c, conn, info.Addrs[0]) }
func (s *apiclientSuite) TestDialAPIMultiple(c *gc.C) { // Create a socket that proxies to the API server. info := s.APIInfo(c) serverAddr := info.Addrs[0] proxy := testing.NewTCPProxy(c, serverAddr) defer proxy.Close() // Check that we can use the proxy to connect. info.Addrs = []string{proxy.Addr()} conn, _, err := api.DialAPI(info, api.DialOpts{}) c.Assert(err, jc.ErrorIsNil) conn.Close() assertConnAddrForModel(c, conn, proxy.Addr(), s.State.ModelUUID()) // Now break Addrs[0], and ensure that Addrs[1] // is successfully connected to. proxy.Close() info.Addrs = []string{proxy.Addr(), serverAddr} conn, _, err = api.DialAPI(info, api.DialOpts{}) c.Assert(err, jc.ErrorIsNil) conn.Close() assertConnAddrForModel(c, conn, serverAddr, s.State.ModelUUID()) }
func (s *apiclientSuite) TestDialAPIMultipleError(c *gc.C) { listener, err := net.Listen("tcp", "127.0.0.1:0") c.Assert(err, jc.ErrorIsNil) defer listener.Close() // count holds the number of times we've accepted a connection. var count int32 go func() { for { client, err := listener.Accept() if err != nil { return } atomic.AddInt32(&count, 1) client.Close() } }() info := s.APIInfo(c) addr := listener.Addr().String() info.Addrs = []string{addr, addr, addr} _, _, err = api.DialAPI(info, api.DialOpts{}) c.Assert(err, gc.ErrorMatches, `unable to connect to API: websocket.Dial wss://.*/model/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}/api: .*`) c.Assert(atomic.LoadInt32(&count), gc.Equals, int32(3)) }