func unitMatchAgentStatus(u *state.Unit, patterns []string) (bool, bool, error) { statusInfo, err := u.AgentStatus() if err != nil { return false, false, err } return matchAgentStatus(patterns, statusInfo.Status) }
func waitForUnitActive(stateConn *state.State, unit *state.Unit, c *gc.C) { timeout := time.After(5 * time.Second) for { select { case <-timeout: c.Fatalf("no activity detected") case <-time.After(coretesting.ShortWait): err := unit.Refresh() c.Assert(err, jc.ErrorIsNil) statusInfo, err := unit.Status() c.Assert(err, jc.ErrorIsNil) switch statusInfo.Status { case state.StatusMaintenance, state.StatusWaiting, state.StatusBlocked: c.Logf("waiting...") continue case state.StatusActive: c.Logf("active!") return case state.StatusUnknown: // Active units may have a status of unknown if they have // started but not run status-set. c.Logf("unknown but active!") return default: c.Fatalf("unexpected status %s %s %v", statusInfo.Status, statusInfo.Message, statusInfo.Data) } statusInfo, err = unit.AgentStatus() c.Assert(err, jc.ErrorIsNil) switch statusInfo.Status { case state.StatusAllocating, state.StatusExecuting, state.StatusRebooting, state.StatusIdle: c.Logf("waiting...") continue case state.StatusError: stateConn.StartSync() c.Logf("unit is still down") default: c.Fatalf("unexpected status %s %s %v", statusInfo.Status, statusInfo.Message, statusInfo.Data) } } } }