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) } } } }
// opRecvTimeout waits for any of the given kinds of operation to // be received from ops, and times out if not. func opRecvTimeout(c *gc.C, st *state.State, opc <-chan dummy.Operation, kinds ...dummy.Operation) dummy.Operation { st.StartSync() for { select { case op := <-opc: for _, k := range kinds { if reflect.TypeOf(op) == reflect.TypeOf(k) { return op } } c.Logf("discarding unknown event %#v", op) case <-time.After(testing.LongWait): c.Fatalf("time out wating for operation") } } }
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) } } } }