diff options
-rw-r--r-- | src/k8splugin/api/api.go | 3 | ||||
-rw-r--r-- | src/k8splugin/api/healthcheckhandler.go | 35 | ||||
-rw-r--r-- | src/k8splugin/api/healthcheckhandler_test.go | 58 | ||||
-rw-r--r-- | src/k8splugin/internal/db/testing.go | 4 |
4 files changed, 100 insertions, 0 deletions
diff --git a/src/k8splugin/api/api.go b/src/k8splugin/api/api.go index 741c0639..5fed28a0 100644 --- a/src/k8splugin/api/api.go +++ b/src/k8splugin/api/api.go @@ -101,5 +101,8 @@ func NewRouter(defClient rb.DefinitionManager, resRouter.HandleFunc("/definition/{rbname}/{rbversion}/profile/{prname}/config/rollback", configHandler.rollbackHandler).Methods("POST") resRouter.HandleFunc("/definition/{rbname}/{rbversion}/profile/{prname}/config/tagit", configHandler.tagitHandler).Methods("POST") + // Add healthcheck path + instRouter.HandleFunc("/healthcheck", healthCheckHandler).Methods("GET") + return router } diff --git a/src/k8splugin/api/healthcheckhandler.go b/src/k8splugin/api/healthcheckhandler.go new file mode 100644 index 00000000..79b7b7ef --- /dev/null +++ b/src/k8splugin/api/healthcheckhandler.go @@ -0,0 +1,35 @@ +/* + * Copyright 2018 Intel Corporation, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package api + +import ( + "net/http" + + "k8splugin/internal/db" +) + +// healthCheckHandler executes a db read to return health of k8splugin +// and its backing database +func healthCheckHandler(w http.ResponseWriter, r *http.Request) { + err := db.DBconn.HealthCheck() + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + w.WriteHeader(http.StatusOK) +} diff --git a/src/k8splugin/api/healthcheckhandler_test.go b/src/k8splugin/api/healthcheckhandler_test.go new file mode 100644 index 00000000..c2e1888e --- /dev/null +++ b/src/k8splugin/api/healthcheckhandler_test.go @@ -0,0 +1,58 @@ +/* + * Copyright 2018 Intel Corporation, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package api + +import ( + "net/http" + "net/http/httptest" + "testing" + + "k8splugin/internal/db" + + pkgerrors "github.com/pkg/errors" +) + +// healthCheckHandler executes a db read to return health of k8splugin +// and its backing database +func TestHealthCheckHandler(t *testing.T) { + + t.Run("OK HealthCheck", func(t *testing.T) { + db.DBconn = &db.MockDB{ + Err: nil, + } + request := httptest.NewRequest("GET", "/v1/healthcheck", nil) + resp := executeRequest(request, NewRouter(nil, nil, nil, nil, nil)) + + //Check returned code + if resp.StatusCode != http.StatusOK { + t.Fatalf("Expected %d; Got: %d", http.StatusOK, resp.StatusCode) + } + }) + + t.Run("FAILED HealthCheck", func(t *testing.T) { + db.DBconn = &db.MockDB{ + Err: pkgerrors.New("Runtime Error in DB"), + } + request := httptest.NewRequest("GET", "/v1/healthcheck", nil) + resp := executeRequest(request, NewRouter(nil, nil, nil, nil, nil)) + + //Check returned code + if resp.StatusCode != http.StatusInternalServerError { + t.Fatalf("Expected %d; Got: %d", http.StatusInternalServerError, resp.StatusCode) + } + }) +} diff --git a/src/k8splugin/internal/db/testing.go b/src/k8splugin/internal/db/testing.go index 1fefd63c..5f69dcb4 100644 --- a/src/k8splugin/internal/db/testing.go +++ b/src/k8splugin/internal/db/testing.go @@ -35,6 +35,10 @@ type MockDB struct { Err error } +func (m *MockDB) HealthCheck() error { + return m.Err +} + func (m *MockDB) Create(table string, key Key, tag string, data interface{}) error { return m.Err } |