This is an automated email from the ASF dual-hosted git repository.

pbacsko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/yunikorn-core.git


The following commit(s) were added to refs/heads/master by this push:
     new 2291cea0 [YUNIKORN-2162] Add unit test for checkHealthStatus (#743)
2291cea0 is described below

commit 2291cea0d7dbcc80a03b8ccc24d62863b2069d91
Author: Kuan-Po Tseng <[email protected]>
AuthorDate: Thu Nov 30 21:30:04 2023 +0100

    [YUNIKORN-2162] Add unit test for checkHealthStatus (#743)
    
    Closes: #743
    
    Signed-off-by: Peter Bacsko <[email protected]>
---
 .../{scheduler-health.go => scheduler_health.go}   | 14 -----
 pkg/webservice/handlers.go                         |  4 +-
 pkg/webservice/handlers_test.go                    | 64 ++++++++++++++++++++++
 3 files changed, 66 insertions(+), 16 deletions(-)

diff --git a/pkg/webservice/dao/scheduler-health.go 
b/pkg/webservice/dao/scheduler_health.go
similarity index 75%
rename from pkg/webservice/dao/scheduler-health.go
rename to pkg/webservice/dao/scheduler_health.go
index 020b8d63..d2736736 100644
--- a/pkg/webservice/dao/scheduler-health.go
+++ b/pkg/webservice/dao/scheduler_health.go
@@ -29,17 +29,3 @@ type HealthCheckInfo struct {
        Description      string `json:",omitempty"`
        DiagnosisMessage string `json:",omitempty"`
 }
-
-func (s *SchedulerHealthDAOInfo) SetHealthStatus() {
-       s.Healthy = len(s.HealthChecks) == 0
-}
-
-func (s *SchedulerHealthDAOInfo) AddHealthCheckInfo(succeeded bool, name, 
description, diagnosis string) {
-       info := HealthCheckInfo{
-               Name:             name,
-               Succeeded:        succeeded,
-               Description:      description,
-               DiagnosisMessage: diagnosis,
-       }
-       s.HealthChecks = append(s.HealthChecks, info)
-}
diff --git a/pkg/webservice/handlers.go b/pkg/webservice/handlers.go
index 3647e879..72ba5149 100644
--- a/pkg/webservice/handlers.go
+++ b/pkg/webservice/handlers.go
@@ -503,8 +503,8 @@ func checkHealthStatus(w http.ResponseWriter, r 
*http.Request) {
                        }
                }
        } else {
-               log.Log(log.SchedHealth).Info("The healthy status of scheduler 
is not found", zap.Any("health check info", ""))
-               buildJSONErrorResponse(w, "The healthy status of scheduler is 
not found", http.StatusNotFound)
+               log.Log(log.SchedHealth).Info("Health check is not available")
+               buildJSONErrorResponse(w, "Health check is not available", 
http.StatusNotFound)
        }
 }
 
diff --git a/pkg/webservice/handlers_test.go b/pkg/webservice/handlers_test.go
index e6e70ea4..cc669958 100644
--- a/pkg/webservice/handlers_test.go
+++ b/pkg/webservice/handlers_test.go
@@ -1719,3 +1719,67 @@ func verifyStateDumpJSON(t *testing.T, aggregated 
*AggregatedStateInfo) {
        assert.Check(t, len(aggregated.Config.SchedulerConfig.Partitions) > 0)
        assert.Check(t, len(aggregated.Config.Extra) > 0)
 }
+
+func TestCheckHealthStatusNotFound(t *testing.T) {
+       NewWebApp(&scheduler.ClusterContext{}, nil)
+       req, err := http.NewRequest("GET", "/ws/v1/scheduler/healthcheck", 
strings.NewReader(""))
+       assert.NilError(t, err, "Error while creating the healthcheck request")
+       resp := &MockResponseWriter{}
+       checkHealthStatus(resp, req)
+
+       var errInfo dao.YAPIError
+       err = json.Unmarshal(resp.outputBytes, &errInfo)
+       assert.NilError(t, err, unmarshalError)
+       assert.Equal(t, http.StatusNotFound, errInfo.StatusCode, 
statusCodeError)
+       assert.Equal(t, "Health check is not available", errInfo.Message, 
jsonMessageError)
+}
+
+func TestCheckHealthStatus(t *testing.T) {
+       runHealthCheckTest(t, &dao.SchedulerHealthDAOInfo{
+               Healthy: true,
+               HealthChecks: []dao.HealthCheckInfo{
+                       {
+                               Name:             "Scheduling errors",
+                               Succeeded:        true,
+                               Description:      "Check for scheduling error 
entries in metrics",
+                               DiagnosisMessage: "There were 0 scheduling 
errors logged in the metrics",
+                       },
+               },
+       })
+
+       runHealthCheckTest(t, &dao.SchedulerHealthDAOInfo{
+               Healthy: false,
+               HealthChecks: []dao.HealthCheckInfo{
+                       {
+                               Name:             "Failed nodes",
+                               Succeeded:        false,
+                               Description:      "Check for failed nodes 
entries in metrics",
+                               DiagnosisMessage: "There were 1 failed nodes 
logged in the metrics",
+                       },
+               },
+       })
+}
+
+func runHealthCheckTest(t *testing.T, expected *dao.SchedulerHealthDAOInfo) {
+       schedulerContext := &scheduler.ClusterContext{}
+       schedulerContext.SetLastHealthCheckResult(expected)
+       NewWebApp(schedulerContext, nil)
+
+       req, err := http.NewRequest("GET", "/ws/v1/scheduler/healthcheck", 
strings.NewReader(""))
+       assert.NilError(t, err, "Error while creating the healthcheck request")
+       resp := &MockResponseWriter{}
+       checkHealthStatus(resp, req)
+
+       var actual dao.SchedulerHealthDAOInfo
+       err = json.Unmarshal(resp.outputBytes, &actual)
+       assert.NilError(t, err, unmarshalError)
+       assert.Equal(t, expected.Healthy, actual.Healthy)
+       assert.Equal(t, len(expected.HealthChecks), len(actual.HealthChecks))
+       for i, expectedHealthCheck := range expected.HealthChecks {
+               actualHealthCheck := actual.HealthChecks[i]
+               assert.Equal(t, expectedHealthCheck.Name, 
actualHealthCheck.Name)
+               assert.Equal(t, expectedHealthCheck.Succeeded, 
actualHealthCheck.Succeeded)
+               assert.Equal(t, expectedHealthCheck.Description, 
actualHealthCheck.Description)
+               assert.Equal(t, expectedHealthCheck.DiagnosisMessage, 
actualHealthCheck.DiagnosisMessage)
+       }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to