func unitStatus(u *state.Unit, statusInfo status.StatusInfo) func(*gc.C) bool { return func(c *gc.C) bool { sInfo, err := u.Status() c.Assert(err, jc.ErrorIsNil) return sInfo.Status == statusInfo.Status && sInfo.Message == statusInfo.Message } }
func waitForUnitStarted(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, gc.IsNil) st, info, data, err := unit.Status() c.Assert(err, gc.IsNil) switch st { case params.StatusPending, params.StatusInstalled: c.Logf("waiting...") continue case params.StatusStarted: c.Logf("started!") return case params.StatusDown: stateConn.StartSync() c.Logf("unit is still down") default: c.Fatalf("unexpected status %s %s %v", st, info, data) } } } }
func unitMatchWorkloadStatus(u *state.Unit, patterns []string) (bool, bool, error) { workloadStatusInfo, err := u.Status() if err != nil { return false, false, err } agentStatusInfo, err := u.AgentStatus() if err != nil { return false, false, err } return matchWorkloadStatus(patterns, workloadStatusInfo.Status, agentStatusInfo.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) } } } }