(desiredState services.State)
| 160 | } |
| 161 | |
| 162 | func (s *mockService) switchState(desiredState services.State) { |
| 163 | // Simulate all the states between the current state and the desired one. |
| 164 | orderedStates := []services.State{services.New, services.Starting, services.Running, services.Failed, services.Stopping, services.Terminated} |
| 165 | simulationStarted := false |
| 166 | |
| 167 | for _, orderedState := range orderedStates { |
| 168 | // Skip until we reach the current state. |
| 169 | if !simulationStarted && orderedState != s.state { |
| 170 | continue |
| 171 | } |
| 172 | |
| 173 | // Start the simulation once we reach the current state. |
| 174 | if orderedState == s.state { |
| 175 | simulationStarted = true |
| 176 | continue |
| 177 | } |
| 178 | |
| 179 | // Skip the failed state, unless it's the desired one. |
| 180 | if orderedState == services.Failed && desiredState != services.Failed { |
| 181 | continue |
| 182 | } |
| 183 | |
| 184 | s.state = orderedState |
| 185 | |
| 186 | // Synchronously call listeners to avoid flaky tests. |
| 187 | for _, listener := range s.listeners { |
| 188 | switch orderedState { |
| 189 | case services.Starting: |
| 190 | listener.Starting() |
| 191 | case services.Running: |
| 192 | listener.Running() |
| 193 | case services.Stopping: |
| 194 | listener.Stopping(services.Running) |
| 195 | case services.Failed: |
| 196 | listener.Failed(services.Running, errors.New("mocked error")) |
| 197 | case services.Terminated: |
| 198 | listener.Terminated(services.Stopping) |
| 199 | } |
| 200 | } |
| 201 | |
| 202 | if orderedState == desiredState { |
| 203 | break |
| 204 | } |
| 205 | } |
| 206 | } |
| 207 | |
| 208 | func (s *mockService) State() services.State { |
| 209 | return s.state |
no test coverage detected