diff options
-rw-r--r-- | INFO.yaml | 95 | ||||
-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 |
5 files changed, 153 insertions, 42 deletions
@@ -21,12 +21,12 @@ mailing_list: realtime_discussion: '' meetings: - type: 'zoom' - agenda: 'https://wiki.onap.org/pages/viewpage.action?pageId=6591499' - url: 'https://wiki.onap.org/pages/viewpage.action?pageId=6591499' - server: 'n/a' - channel: 'n/a' - repeats: 'weekly' - time: '13:00 UTC' + agenda: 'https://wiki.onap.org/pages/viewpage.action?pageId=6591499' + url: 'https://wiki.onap.org/pages/viewpage.action?pageId=6591499' + server: 'n/a' + channel: 'n/a' + repeats: 'weekly' + time: '13:00 UTC' repositories: - 'multicloud-framework' - 'multicloud-openstack' @@ -38,51 +38,62 @@ repositories: committers: - <<: *onap_multicloud_ptl - name: 'Anbing Zhang' - email: 'zhanganbing@chinamobile.com' - company: 'China Mobile' - id: 'zhangab' - timezone: '' + email: 'zhanganbing@chinamobile.com' + company: 'China Mobile' + id: 'zhangab' + timezone: 'Asia/Shanghai' - name: 'Xinhui Li' - email: 'lxinhui@vmware.com' - id: 'xinhuili' - company: 'VMware' - timezone: 'China/Beijing' + email: 'lxinhui@vmware.com' + id: 'xinhuili' + company: 'VMware' + timezone: 'Asia/Shanghai' - name: 'Bin Hu' - email: 'bh526r@att.com' - company: 'ATT' - id: 'bh526r' - timezone: 'America/Palo Alto' + email: 'bh526r@att.com' + company: 'ATT' + id: 'bh526r' + timezone: 'America/Los_Angeles' - name: 'Victor Morales' - email: 'victor.morales@intel.com' - company: 'Intel' - id: 'electrocucaracha' - timezone: '' + email: 'victor.morales@intel.com' + company: 'Intel' + id: 'electrocucaracha' + timezone: 'America/Los_Angeles' - name: 'Ethan Lynn' - email: 'ethanlynnl@vmware.com' - company: 'VMWare' - id: 'ethanlynnl' - timezone: '' + email: 'ethanlynnl@vmware.com' + company: 'VMWare' + id: 'ethanlynnl' + timezone: 'Asia/Shanghai' - name: 'Huang Haibin' - email: 'haibin.huang@intel.com' - company: 'Intel' - id: 'haibin' - timezone: '' + email: 'haibin.huang@intel.com' + company: 'Intel' + id: 'haibin' + timezone: 'Asia/Shanghai' - name: 'Sudhakar Reddy' - email: 'Sudhakar.Reddy@amdocs.com' - company: 'Amdocs' - id: 'SudhakarReddy' - timezone: '' + email: 'Sudhakar.Reddy@amdocs.com' + company: 'Amdocs' + id: 'SudhakarReddy' + timezone: 'Asia/Kolkata' + - name: 'Xiaohua Zhang' + email: 'Xiaohua.Zhang@windriver.com' + company: 'Wind River' + id: 'Xiaohua626' + timezone: 'Asia/Shanghai' tsc: approval: 'https://lists.onap.org/pipermail/onap-tsc' changes: - type: 'Addition' - name: 'yun huang' - name: 'Victor Morales' - name: 'Ethan Lynn' - name: 'Huang Haibin' - name: 'Sudhakar Reddy' + name: + - 'yun huang' + - 'Victor Morales' + - 'Ethan Lynn' + - 'Huang Haibin' + - 'Sudhakar Reddy' link: 'http://ircbot.wl.linuxfoundation.org/meetings/onap-meeting/2018/onap-meeting.2018-08-16-13.45.html' - type: 'Remove' - name: 'yun huang' - name: 'Ke Liang' - name: 'Andrew Philip' + name: + - 'yun huang' + - 'Ke Liang' + - 'Andrew Philip' + link: 'https://lists.onap.org/g/onap-tsc/message/4635' + - type: 'Addition' + name: 'Xiaohua Zhang' + link: 'https://lists.onap.org/g/onap-tsc/message/4772' 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 } |