HTTP API: Implement worker deregistration
authorMaciej Wereski <m.wereski@partner.samsung.com>
Tue, 17 Oct 2017 09:49:19 +0000 (11:49 +0200)
committerMaciej Wereski <m.wereski@partner.samsung.com>
Tue, 5 Jun 2018 10:48:28 +0000 (12:48 +0200)
Change-Id: Ie0eeb5b8958111f980230eb186e44a1a14663b7a
Signed-off-by: Maciej Wereski <m.wereski@partner.samsung.com>
server/api/v1/handlers.go
server/api/v1/handlers_test.go
server/api/v1/testdata/worker-deregister-POST.json [deleted file]
server/api/v1/testdata/worker-deregister-bad-uuid-POST.json [new file with mode: 0644]
server/api/v1/testdata/worker-deregister-missing-POST.json [new file with mode: 0644]
server/api/v1/testdata/worker-deregister-valid-POST.json [new file with mode: 0644]

index c1fdf5d..850c009 100644 (file)
@@ -226,5 +226,11 @@ func (api *API) setWorkerGroupsHandler(r *http.Request, ps map[string]string) re
 // workerDeregister parses HTTP workers for deregistering worker state and calls
 // workers.Deregister().
 func (api *API) workerDeregister(r *http.Request, ps map[string]string) responseData {
-       return newServerError(ErrNotImplemented, "deregister worker")
+       defer r.Body.Close()
+
+       if !isValidUUID(ps["id"]) {
+               return newServerError(ErrBadUUID)
+       }
+
+       return newServerError(api.workers.Deregister(WorkerUUID(ps["id"])))
 }
index 01e3cb4..6fba4eb 100644 (file)
@@ -547,15 +547,33 @@ func TestDeregisterWorkerHandler(t *testing.T) {
        assert, m, api := initTest(t)
        defer m.finish()
 
+       prefix := "worker-deregister-"
+       methods := []string{http.MethodPost}
+       pathfmt := "/api/v1/workers/%s/deregister"
+
+       notFoundTest := testFromTempl(notFoundTestTempl, prefix, fmt.Sprintf(pathfmt, missingUUID), methods...)
+
+       m.wm.EXPECT().Deregister(WorkerUUID(validUUID)).Return(nil)
+       m.wm.EXPECT().Deregister(WorkerUUID(missingUUID)).Return(NotFoundError("Worker"))
+
        tests := []requestTest{
                {
-                       name:        "worker-deregister",
-                       path:        "/api/v1/workers/8/deregister",
-                       methods:     []string{http.MethodPost},
+                       name:        prefix + "valid",
+                       path:        fmt.Sprintf(pathfmt, validUUID),
+                       methods:     methods,
                        json:        ``,
                        contentType: contentTypeJSON,
-                       status:      http.StatusNotImplemented,
+                       status:      http.StatusNoContent,
                },
+               {
+                       name:        prefix + "bad-uuid",
+                       path:        fmt.Sprintf(pathfmt, invalidID),
+                       methods:     methods,
+                       json:        ``,
+                       contentType: contentTypeJSON,
+                       status:      http.StatusBadRequest,
+               },
+               notFoundTest,
        }
 
        runTests(assert, api, tests)
diff --git a/server/api/v1/testdata/worker-deregister-POST.json b/server/api/v1/testdata/worker-deregister-POST.json
deleted file mode 100644 (file)
index daf5a87..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"error":"not implemented yet: deregister worker"}
\ No newline at end of file
diff --git a/server/api/v1/testdata/worker-deregister-bad-uuid-POST.json b/server/api/v1/testdata/worker-deregister-bad-uuid-POST.json
new file mode 100644 (file)
index 0000000..4145754
--- /dev/null
@@ -0,0 +1 @@
+{"error":"invalid request: ID provided in URL isn't valid UUID"}
\ No newline at end of file
diff --git a/server/api/v1/testdata/worker-deregister-missing-POST.json b/server/api/v1/testdata/worker-deregister-missing-POST.json
new file mode 100644 (file)
index 0000000..533be90
--- /dev/null
@@ -0,0 +1 @@
+{"error":"Worker not found"}
\ No newline at end of file
diff --git a/server/api/v1/testdata/worker-deregister-valid-POST.json b/server/api/v1/testdata/worker-deregister-valid-POST.json
new file mode 100644 (file)
index 0000000..e69de29