ErrWorkerNotFound = errors.New("Worker is not present on the list")
// ErrInMaintenance is returned when SetFail has been called for Worker in MAINTENANCE state.
ErrInMaintenance = errors.New("It is forbidden to set FAIL state when Worker is in MAINTENANCE state")
+ // ErrNotInMaintenance is returned when Deregister is called for a worker not in MAINTENANCE state.
+ // Only workers in MAINTENANCE state can be removed from the list.
+ ErrNotInMaintenance = errors.New("Worker is not in MAINTENANCE state")
)
Expect(wl.workers[worker].State).To(Equal(MAINTENANCE))
})
})
+
+ Describe("Deregister", func() {
+ It("should fail to deregister nonexistent worker", func() {
+ uuid := randomUUID()
+ err := wl.Deregister(uuid)
+ Expect(err).To(Equal(ErrWorkerNotFound))
+ })
+
+ It("should work to deregister", func() {
+ err := wl.Deregister(worker)
+ Expect(err).ToNot(HaveOccurred())
+ Expect(wl.workers).ToNot(HaveKey(worker))
+ })
+
+ It("should fail to deregister same worker twice", func() {
+ err := wl.Deregister(worker)
+ Expect(err).ToNot(HaveOccurred())
+ Expect(wl.workers).ToNot(HaveKey(worker))
+
+ err = wl.Deregister(worker)
+ Expect(err).To(Equal(ErrWorkerNotFound))
+ })
+
+ It("should fail to deregister worker not in MAINTENANCE state", func() {
+ for _, state := range []WorkerState{IDLE, RUN, FAIL} {
+ wl.workers[worker].State = state
+ err := wl.Deregister(worker)
+ Expect(err).To(Equal(ErrNotInMaintenance))
+ Expect(wl.workers).To(HaveKey(worker))
+ }
+ })
+ })
})
})
// Deregister is an implementation of Deregister from Workers interface.
func (wl *WorkerList) Deregister(uuid WorkerUUID) error {
- return ErrNotImplemented
+ worker, ok := wl.workers[uuid]
+ if !ok {
+ return ErrWorkerNotFound
+ }
+ if worker.State != MAINTENANCE {
+ return ErrNotInMaintenance
+ }
+ delete(wl.workers, uuid)
+ return nil
}
// ListWorkers is an implementation of ListWorkers from Workers interface.
err = wl.SetGroups(uuid, groups)
Expect(err).To(Equal(ErrNotImplemented))
- By("Deregister")
- err = wl.Deregister(uuid)
- Expect(err).To(Equal(ErrNotImplemented))
-
By("ListWorkers")
_, err = wl.ListWorkers(groups, caps)
Expect(err).To(Equal(ErrNotImplemented))