From f405c99e27e7556a31c5a347242e333878b6f10c Mon Sep 17 00:00:00 2001 From: Kiran Kamineni Date: Wed, 24 Apr 2019 17:23:22 -0700 Subject: Adding healthcheck for OOM testing Add a heathcheck endpoint for OOM testing Issue-ID: ONAPARC-363 Change-Id: Id5f77478d331fedb19ac162389d95852e10c5022 Signed-off-by: Kiran Kamineni --- src/k8splugin/api/api.go | 3 ++ src/k8splugin/api/healthcheckhandler.go | 35 +++++++++++++++++ src/k8splugin/api/healthcheckhandler_test.go | 58 ++++++++++++++++++++++++++++ src/k8splugin/internal/db/testing.go | 4 ++ 4 files changed, 100 insertions(+) create mode 100644 src/k8splugin/api/healthcheckhandler.go create mode 100644 src/k8splugin/api/healthcheckhandler_test.go 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 } -- cgit 1.2.3-korg