X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=internal%2Fcli%2Fhealthcheck_test.go;h=f3cf65fa029f3cdd26559527abf07776a8b1a3ac;hb=refs%2Fchanges%2F00%2F11900%2F1;hp=2cc06190336e3a3bc31a097ee835318defd571a3;hpb=273d032db02901dba8deeb692f92ed2366dc6ee5;p=ric-plt%2Fsdlgo.git diff --git a/internal/cli/healthcheck_test.go b/internal/cli/healthcheck_test.go index 2cc0619..f3cf65f 100644 --- a/internal/cli/healthcheck_test.go +++ b/internal/cli/healthcheck_test.go @@ -40,51 +40,47 @@ type healthCheckMocks struct { dbState sdlgoredis.DbState } -func setupHcMockMasterDb(ip, port string) { +func setupHcMockPrimaryDb(ip, port string, nodes int) { hcMocks = new(healthCheckMocks) - hcMocks.dbState.MasterDbState.Fields.Role = "master" - hcMocks.dbState.MasterDbState.Fields.Ip = ip - hcMocks.dbState.MasterDbState.Fields.Port = port - hcMocks.dbState.MasterDbState.Fields.Flags = "master" + hcMocks.dbState.ConfigNodeCnt = nodes + hcMocks.dbState.PrimaryDbState.Fields.Role = "master" + hcMocks.dbState.PrimaryDbState.Fields.Ip = ip + hcMocks.dbState.PrimaryDbState.Fields.Port = port + hcMocks.dbState.PrimaryDbState.Fields.Flags = "master" + hcMocks.dbState.ReplicasDbState = new(sdlgoredis.ReplicasDbState) + hcMocks.dbState.ReplicasDbState.States = []*sdlgoredis.ReplicaDbState{} + hcMocks.dbState.SentinelsDbState = new(sdlgoredis.SentinelsDbState) + hcMocks.dbState.SentinelsDbState.States = []*sdlgoredis.SentinelDbState{} } -func setupHcMockReplicaDb(ip, port string) { +func setupHcMockReplicaDb(nodes int) { hcMocks = new(healthCheckMocks) + hcMocks.dbState.ConfigNodeCnt = nodes hcMocks.dbState.ReplicasDbState = new(sdlgoredis.ReplicasDbState) - hcMocks.dbState.ReplicasDbState.States = []*sdlgoredis.ReplicaDbState{ - &sdlgoredis.ReplicaDbState{ - Fields: sdlgoredis.ReplicaDbStateFields{ - Role: "slave", - }, - }, - } + hcMocks.dbState.ReplicasDbState.States = []*sdlgoredis.ReplicaDbState{} + hcMocks.dbState.SentinelsDbState = new(sdlgoredis.SentinelsDbState) + hcMocks.dbState.SentinelsDbState.States = []*sdlgoredis.SentinelDbState{} } -func setupHcMockSentinelDb(ip, port string) { +func setupHcMockSentinelDb(ip, port string, nodes int) { hcMocks = new(healthCheckMocks) + hcMocks.dbState.ConfigNodeCnt = nodes hcMocks.dbState.SentinelsDbState = new(sdlgoredis.SentinelsDbState) - hcMocks.dbState.SentinelsDbState.States = []*sdlgoredis.SentinelDbState{ - &sdlgoredis.SentinelDbState{ - Fields: sdlgoredis.SentinelDbStateFields{ - Ip: ip, - Port: port, - }, - }, - } + hcMocks.dbState.SentinelsDbState.States = []*sdlgoredis.SentinelDbState{} } -func addHcMockReplicaDbState(ip, port, masterLinkOk string) { +func addHcMockReplicaDbState(ip, port, primaryLinkOk string) { if hcMocks.dbState.ReplicasDbState == nil { hcMocks.dbState.ReplicasDbState = new(sdlgoredis.ReplicasDbState) } hcMocks.dbState.ReplicasDbState.States = append(hcMocks.dbState.ReplicasDbState.States, &sdlgoredis.ReplicaDbState{ Fields: sdlgoredis.ReplicaDbStateFields{ - Role: "slave", - Ip: ip, - Port: port, - MasterLinkStatus: masterLinkOk, - Flags: "slave", + Role: "slave", + Ip: ip, + Port: port, + PrimaryLinkStatus: primaryLinkOk, + Flags: "slave", }, }, ) @@ -127,6 +123,7 @@ func TestCliHealthCheckCanShowHelp(t *testing.T) { var expOkErr error expHelp := "Usage:\n " + "healthcheck [flags]" expNokErr := errors.New("unknown flag: --some-unknown-flag") + expArgCntErr := errors.New("accepts 0 arg(s), received 1") tests := []struct { args string expErr error @@ -135,6 +132,7 @@ func TestCliHealthCheckCanShowHelp(t *testing.T) { {args: "-h", expErr: expOkErr, expOutput: expHelp}, {args: "--help", expErr: expOkErr, expOutput: expHelp}, {args: "--some-unknown-flag", expErr: expNokErr, expOutput: expHelp}, + {args: "some-extra-argument", expErr: expArgCntErr, expOutput: expHelp}, } for _, test := range tests { @@ -152,7 +150,13 @@ func TestCliHealthCheckCanShowHelp(t *testing.T) { } func TestCliHealthCheckCanShowHaDeploymentOkStatusCorrectly(t *testing.T) { - setupHcMockMasterDb("10.20.30.40", "6379") + expOut := + "Overall status: OK\n\n" + + "CLUSTER ROLE ADDRESS STATUS ERROR \n" + + "0 primary 10.20.30.40:6379 OK \n" + + "0 replica 1.2.3.4:6379 OK \n" + + "0 replica 5.6.7.8:6379 OK \n" + setupHcMockPrimaryDb("10.20.30.40", "6379", 3) addHcMockReplicaDbState("1.2.3.4", "6379", "ok") addHcMockReplicaDbState("5.6.7.8", "6379", "ok") addHcMockSentinelDbState("1.2.3.4", "26379", "sentinel") @@ -161,15 +165,17 @@ func TestCliHealthCheckCanShowHaDeploymentOkStatusCorrectly(t *testing.T) { stdout, err := runHcCli() assert.Nil(t, err) - assert.Contains(t, stdout, "Overall status: OK") - assert.Contains(t, stdout, "Master (10.20.30.40:6379): OK") - assert.Contains(t, stdout, "Replica #1 (1.2.3.4:6379): OK") - assert.Contains(t, stdout, "Replica #2 (5.6.7.8:6379): OK") - + assert.Equal(t, expOut, stdout) } func TestCliHealthCheckCanShowHaDeploymentStatusCorrectlyWhenOneReplicaStateNotUp(t *testing.T) { - setupHcMockMasterDb("10.20.30.40", "6379") + expOut := + "Overall status: NOK\n\n" + + "CLUSTER ROLE ADDRESS STATUS ERROR \n" + + "0 primary 10.20.30.40:6379 OK \n" + + "0 replica 1.2.3.4:6379 OK \n" + + "0 replica 5.6.7.8:6379 NOK Replica link to the primary is down \n" + setupHcMockPrimaryDb("10.20.30.40", "6379", 3) addHcMockReplicaDbState("1.2.3.4", "6379", "ok") addHcMockReplicaDbState("5.6.7.8", "6379", "nok") addHcMockSentinelDbState("1.2.3.4", "26379", "sentinel") @@ -178,13 +184,18 @@ func TestCliHealthCheckCanShowHaDeploymentStatusCorrectlyWhenOneReplicaStateNotU stdout, err := runHcCli() assert.Nil(t, err) - assert.Contains(t, stdout, "Overall status: NOK") - assert.Contains(t, stdout, "Replica #2 (5.6.7.8:6379): NOK") - assert.Contains(t, stdout, "Replica link to the master is down") + assert.Equal(t, expOut, stdout) } func TestCliHealthCheckCanShowHaDeploymentStatusCorrectlyWhenOneSentinelStateNotUp(t *testing.T) { - setupHcMockMasterDb("10.20.30.40", "6379") + expOut := + "Overall status: NOK\n\n" + + "CLUSTER ROLE ADDRESS STATUS ERROR \n" + + "0 primary 10.20.30.40:6379 OK \n" + + "0 replica 1.2.3.4:6379 OK \n" + + "0 replica 5.6.7.8:6379 OK \n" + + "0 sentinel 1.2.3.4:26379 NOK Sentinel flags are 'some-failure', expected 'sentinel' \n" + setupHcMockPrimaryDb("10.20.30.40", "6379", 3) addHcMockReplicaDbState("1.2.3.4", "6379", "ok") addHcMockReplicaDbState("5.6.7.8", "6379", "ok") addHcMockSentinelDbState("1.2.3.4", "26379", "some-failure") @@ -193,17 +204,28 @@ func TestCliHealthCheckCanShowHaDeploymentStatusCorrectlyWhenOneSentinelStateNot stdout, err := runHcCli() assert.Nil(t, err) - assert.Contains(t, stdout, "Overall status: NOK") - assert.Contains(t, stdout, "Replica #1 (1.2.3.4:6379): OK") - assert.Contains(t, stdout, "Replica #2 (5.6.7.8:6379): OK") - assert.Contains(t, stdout, "Sentinel #1 (1.2.3.4:26379): NOK") - assert.Contains(t, stdout, "Sentinel flags are 'some-failure', expected 'sentinel'") + assert.Equal(t, expOut, stdout) +} + +func TestCliHealthCheckCanShowHaDeploymentStatusCorrectlyWhenNoReplicas(t *testing.T) { + expOut := + "Overall status: NOK\n\n" + + "CLUSTER ROLE ADDRESS STATUS ERROR \n" + + "0 primary 10.20.30.40:6379 OK \n" + + "0 replica NOK Configured DBAAS nodes 3 but only 1 primary and 0 replicas \n" + setupHcMockPrimaryDb("10.20.30.40", "6379", 3) + addHcMockSentinelDbState("1.2.3.4", "26379", "sentinel") + addHcMockSentinelDbState("5.6.7.8", "26379", "sentinel") + + stdout, err := runHcCli() + + assert.Nil(t, err) + assert.Equal(t, expOut, stdout) } func TestCliHealthCheckCanShowHaDeploymentStatusCorrectlyWhenDbStateQueryFails(t *testing.T) { - setupHcMockMasterDb("10.20.30.40", "6379") + setupHcMockPrimaryDb("10.20.30.40", "6379", 3) hcMocks.dbErr = errors.New("Some error") - expCliErr := errors.New("SDL CLI error: Some error") buf := new(bytes.Buffer) cmd := cli.NewHealthCheckCmd(newMockDatabase) @@ -212,36 +234,49 @@ func TestCliHealthCheckCanShowHaDeploymentStatusCorrectlyWhenDbStateQueryFails(t err := cmd.Execute() stderr := buf.String() - assert.Equal(t, expCliErr, err) - assert.Contains(t, stderr, "Error: "+expCliErr.Error()) + assert.Equal(t, hcMocks.dbErr, err) + assert.Contains(t, stderr, "Error: Some error") } func TestCliHealthCheckCanShowHaDeploymentOkStatusCorrectlyWhenDbStateIsFromReplicaOnly(t *testing.T) { - setupHcMockReplicaDb("1.2.3.4", "6379") + expOut := + "Overall status: NOK\n\n" + + "CLUSTER ROLE ADDRESS STATUS ERROR \n" + + "0 primary NOK No primary DB, current role '' \n" + + "0 replica 1.2.3.4:6379 NOK Replica link to the primary is down \n" + + "0 replica 5.6.7.8:6379 NOK Replica link to the primary is down \n" + setupHcMockReplicaDb(3) + addHcMockReplicaDbState("1.2.3.4", "6379", "nok") + addHcMockReplicaDbState("5.6.7.8", "6379", "nok") stdout, err := runHcCli() assert.Nil(t, err) - assert.Contains(t, stdout, "Overall status: NOK") - assert.Contains(t, stdout, "Master (): NOK") + assert.Equal(t, expOut, stdout) } func TestCliHealthCheckCanShowHaDeploymentOkStatusCorrectlyWhenDbStateIsFromSentinelOnly(t *testing.T) { - setupHcMockSentinelDb("1.2.3.4", "26379") + expOut := + "Overall status: NOK\n\n" + + "CLUSTER ROLE ADDRESS STATUS ERROR \n" + + "0 primary NOK No primary DB, current role '' \n" + setupHcMockSentinelDb("1.2.3.4", "26379", 3) stdout, err := runHcCli() assert.Nil(t, err) - assert.Contains(t, stdout, "Overall status: NOK") - assert.Contains(t, stdout, "Master (): NOK") + assert.Equal(t, expOut, stdout) } func TestCliHealthCheckCanShowStandaloneDeploymentOkStatusCorrectly(t *testing.T) { - setupHcMockMasterDb("10.20.30.40", "6379") + expOut := + "Overall status: OK\n\n" + + "CLUSTER ROLE ADDRESS STATUS ERROR \n" + + "0 primary 10.20.30.40:6379 OK \n" + setupHcMockPrimaryDb("10.20.30.40", "6379", 1) stdout, err := runHcCli() assert.Nil(t, err) - assert.Contains(t, stdout, "Overall status: OK") - assert.Contains(t, stdout, "Master (10.20.30.40:6379): OK") + assert.Equal(t, expOut, stdout) }