func (s *UnitSuite) TestOpenAPIStateWithDeadEntityTerminates(c *gc.C) { _, unit, conf, _ := s.primeAgent(c) err := unit.EnsureDead() c.Assert(err, jc.ErrorIsNil) _, _, err = apicaller.OpenAPIState(fakeConfAgent{conf: conf}) c.Assert(err, gc.Equals, worker.ErrTerminateAgent) }
func (s *UnitSuite) TestOpenAPIState(c *gc.C) { _, unit, conf, _ := s.primeAgent(c) configPath := agent.ConfigPath(conf.DataDir(), conf.Tag()) // Set an invalid password (but the old initial password will still work). // This test is a sort of unsophisticated simulation of what might happen // if a previous cycle had picked, and locally recorded, a new password; // but failed to set it on the state server. Would be better to test that // code path explicitly in future, but this suffices for now. confW, err := agent.ReadConfig(configPath) c.Assert(err, gc.IsNil) confW.SetPassword("nonsense-borken") err = confW.Write() c.Assert(err, jc.ErrorIsNil) // Check that it successfully connects (with the conf's old password). assertOpen := func() { agent := NewAgentConf(conf.DataDir()) err := agent.ReadConfig(conf.Tag().String()) c.Assert(err, jc.ErrorIsNil) st, gotEntity, err := apicaller.OpenAPIState(agent) c.Assert(err, jc.ErrorIsNil) c.Assert(st, gc.NotNil) st.Close() c.Assert(gotEntity.Tag(), gc.Equals, unit.Tag().String()) } assertOpen() // Check that the old password has been invalidated. assertPassword := func(password string, valid bool) { err := unit.Refresh() c.Assert(err, jc.ErrorIsNil) c.Check(unit.PasswordValid(password), gc.Equals, valid) } assertPassword(initialUnitPassword, false) // Read the stored password and check it's valid. confR, err := agent.ReadConfig(configPath) c.Assert(err, gc.IsNil) apiInfo, ok := confR.APIInfo() c.Assert(ok, jc.IsTrue) newPassword := apiInfo.Password assertPassword(newPassword, true) // Double-check that we can open a fresh connection with the stored // conf ... and that the password hasn't been changed again. assertOpen() assertPassword(newPassword, true) }
func (s *UnitSuite) TestOpenAPIStateWithBadCredsTerminates(c *gc.C) { conf, _ := s.PrimeAgent(c, names.NewUnitTag("missing/0"), "no-password") _, err := apicaller.OpenAPIState(fakeConfAgent{conf: conf}) c.Assert(err, gc.Equals, worker.ErrTerminateAgent) }