func (s *openSuite) TestOpenAPINormal(c *C) { conf := agent.Conf{ APIInfo: s.APIInfo(c), } conf.OldPassword = "******" st, newPassword, err := conf.OpenAPI(api.DialOpts{}) c.Assert(err, IsNil) defer st.Close() c.Assert(newPassword, Equals, "") c.Assert(st, NotNil) }
func (s *openSuite) TestOpenAPINoPassword(c *C) { conf := agent.Conf{ APIInfo: s.APIInfo(c), } conf.OldPassword = conf.APIInfo.Password conf.APIInfo.Password = "" st, newPassword, err := conf.OpenAPI(api.DialOpts{}) c.Assert(err, IsNil) defer st.Close() c.Assert(newPassword, Matches, ".+") c.Assert(st, NotNil) p, err := utils.RandomPassword() c.Assert(err, IsNil) c.Assert(newPassword, HasLen, len(p)) c.Assert(conf.OldPassword, Equals, s.APIInfo(c).Password) }
func (s *openSuite) TestOpenAPIFallbackPassword(c *gc.C) { conf := agent.Conf{ APIInfo: s.APIInfo(c), } conf.OldPassword = conf.APIInfo.Password conf.APIInfo.Password = "******" st, newPassword, err := conf.OpenAPI(api.DialOpts{}) c.Assert(err, gc.IsNil) defer st.Close() c.Assert(newPassword, gc.Matches, ".+") c.Assert(st, gc.NotNil) p, err := utils.RandomPassword() c.Assert(err, gc.IsNil) c.Assert(newPassword, gc.HasLen, len(p)) c.Assert(conf.OldPassword, gc.Equals, s.APIInfo(c).Password) }
func openAPIState(c *agent.Conf, a Agent) (*api.State, AgentAPIState, error) { // We let the API dial fail immediately because the // runner's loop outside the caller of openAPIState will // keep on retrying. If we block for ages here, // then the worker that's calling this cannot // be interrupted. st, newPassword, err := c.OpenAPI(api.DialOpts{}) if err != nil { return nil, nil, err } entity, err := a.APIEntity(st) if params.ErrCode(err) == params.CodeNotFound || err == nil && entity.Life() == params.Dead { err = worker.ErrTerminateAgent } if err != nil { st.Close() return nil, nil, err } if newPassword == "" { return st, entity, nil } // Make a copy of the configuration so that if we fail // to write the configuration file, the configuration will // still be valid. c1 := *c stateInfo := *c.StateInfo c1.StateInfo = &stateInfo apiInfo := *c.APIInfo c1.APIInfo = &apiInfo c1.StateInfo.Password = newPassword c1.APIInfo.Password = newPassword if err := c1.Write(); err != nil { return nil, nil, err } *c = c1 if err := entity.SetPassword(newPassword); err != nil { return nil, nil, err } return st, entity, nil }