X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=internal%2Fcli%2Fhealthcheck_test.go;h=858385bbfc91b080354e429b6bf918eb12957b24;hb=b1cc9affa891649332fb034f648e44514624a956;hp=be98aed22d9011dc5ef80d03d8094dd304a6d65b;hpb=977a55ca96d5dba1c7f9273671747eaf9cd6f894;p=ric-plt%2Fsdlgo.git diff --git a/internal/cli/healthcheck_test.go b/internal/cli/healthcheck_test.go index be98aed..858385b 100644 --- a/internal/cli/healthcheck_test.go +++ b/internal/cli/healthcheck_test.go @@ -40,7 +40,7 @@ type healthCheckMocks struct { dbState sdlgoredis.DbState } -func setupHcMockMasterDb(ip, port string, replicas uint32) { +func setupHcMockMasterDb(ip, port string) { hcMocks = new(healthCheckMocks) hcMocks.dbState.MasterDbState.Fields.Role = "master" hcMocks.dbState.MasterDbState.Fields.Ip = ip @@ -48,7 +48,7 @@ func setupHcMockMasterDb(ip, port string, replicas uint32) { hcMocks.dbState.MasterDbState.Fields.Flags = "master" } -func setupHcMockReplicaDb() { +func setupHcMockReplicaDb(ip, port string) { hcMocks = new(healthCheckMocks) hcMocks.dbState.ReplicasDbState = new(sdlgoredis.ReplicasDbState) hcMocks.dbState.ReplicasDbState.States = []*sdlgoredis.ReplicaDbState{ @@ -60,6 +60,19 @@ func setupHcMockReplicaDb() { } } +func setupHcMockSentinelDb(ip, port string) { + hcMocks = new(healthCheckMocks) + hcMocks.dbState.SentinelsDbState = new(sdlgoredis.SentinelsDbState) + hcMocks.dbState.SentinelsDbState.States = []*sdlgoredis.SentinelDbState{ + &sdlgoredis.SentinelDbState{ + Fields: sdlgoredis.SentinelDbStateFields{ + Ip: ip, + Port: port, + }, + }, + } +} + func addHcMockReplicaDbState(ip, port, masterLinkOk string) { if hcMocks.dbState.ReplicasDbState == nil { hcMocks.dbState.ReplicasDbState = new(sdlgoredis.ReplicasDbState) @@ -77,6 +90,21 @@ func addHcMockReplicaDbState(ip, port, masterLinkOk string) { ) } +func addHcMockSentinelDbState(ip, port, flags string) { + if hcMocks.dbState.SentinelsDbState == nil { + hcMocks.dbState.SentinelsDbState = new(sdlgoredis.SentinelsDbState) + } + hcMocks.dbState.SentinelsDbState.States = append(hcMocks.dbState.SentinelsDbState.States, + &sdlgoredis.SentinelDbState{ + Fields: sdlgoredis.SentinelDbStateFields{ + Ip: ip, + Port: port, + Flags: flags, + }, + }, + ) +} + func newMockDatabase() *cli.Database { db := &cli.Database{} hcMocks.dbIface = new(mocks.MockDB) @@ -87,7 +115,7 @@ func newMockDatabase() *cli.Database { func runHcCli() (string, error) { buf := new(bytes.Buffer) - cmd := cli.NewHealthCheckCmdForTest(newMockDatabase) + cmd := cli.NewHealthCheckCmd(newMockDatabase) cmd.SetOut(buf) err := cmd.Execute() @@ -99,6 +127,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 @@ -107,11 +136,12 @@ 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 { buf := new(bytes.Buffer) - cmd := cli.NewHealthCheckCmd() + cmd := cli.NewHealthCheckCmd(newMockDatabase) cmd.SetOut(buf) cmd.SetArgs([]string{test.args}) @@ -124,9 +154,11 @@ func TestCliHealthCheckCanShowHelp(t *testing.T) { } func TestCliHealthCheckCanShowHaDeploymentOkStatusCorrectly(t *testing.T) { - setupHcMockMasterDb("10.20.30.40", "6379", 2) + setupHcMockMasterDb("10.20.30.40", "6379") addHcMockReplicaDbState("1.2.3.4", "6379", "ok") addHcMockReplicaDbState("5.6.7.8", "6379", "ok") + addHcMockSentinelDbState("1.2.3.4", "26379", "sentinel") + addHcMockSentinelDbState("5.6.7.8", "26379", "sentinel") stdout, err := runHcCli() @@ -139,9 +171,11 @@ func TestCliHealthCheckCanShowHaDeploymentOkStatusCorrectly(t *testing.T) { } func TestCliHealthCheckCanShowHaDeploymentStatusCorrectlyWhenOneReplicaStateNotUp(t *testing.T) { - setupHcMockMasterDb("10.20.30.40", "6379", 2) + setupHcMockMasterDb("10.20.30.40", "6379") addHcMockReplicaDbState("1.2.3.4", "6379", "ok") addHcMockReplicaDbState("5.6.7.8", "6379", "nok") + addHcMockSentinelDbState("1.2.3.4", "26379", "sentinel") + addHcMockSentinelDbState("5.6.7.8", "26379", "sentinel") stdout, err := runHcCli() @@ -151,24 +185,50 @@ func TestCliHealthCheckCanShowHaDeploymentStatusCorrectlyWhenOneReplicaStateNotU assert.Contains(t, stdout, "Replica link to the master is down") } +func TestCliHealthCheckCanShowHaDeploymentStatusCorrectlyWhenOneSentinelStateNotUp(t *testing.T) { + setupHcMockMasterDb("10.20.30.40", "6379") + addHcMockReplicaDbState("1.2.3.4", "6379", "ok") + addHcMockReplicaDbState("5.6.7.8", "6379", "ok") + addHcMockSentinelDbState("1.2.3.4", "26379", "some-failure") + addHcMockSentinelDbState("5.6.7.8", "26379", "sentinel") + + 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'") +} + func TestCliHealthCheckCanShowHaDeploymentStatusCorrectlyWhenDbStateQueryFails(t *testing.T) { - setupHcMockMasterDb("10.20.30.40", "6379", 0) + setupHcMockMasterDb("10.20.30.40", "6379") hcMocks.dbErr = errors.New("Some error") - expCliErr := errors.New("SDL CLI error: Some error") buf := new(bytes.Buffer) - cmd := cli.NewHealthCheckCmdForTest(newMockDatabase) + cmd := cli.NewHealthCheckCmd(newMockDatabase) cmd.SetErr(buf) 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: "+hcMocks.dbErr.Error()) +} + +func TestCliHealthCheckCanShowHaDeploymentOkStatusCorrectlyWhenDbStateIsFromReplicaOnly(t *testing.T) { + setupHcMockReplicaDb("1.2.3.4", "6379") + + stdout, err := runHcCli() + + assert.Nil(t, err) + assert.Contains(t, stdout, "Overall status: NOK") + assert.Contains(t, stdout, "Master (): NOK") } -func TestCliHealthCheckCanShowHaDeploymentOkStatusCorrectlyWhenDbStateIsFromReplicaServer(t *testing.T) { - setupHcMockReplicaDb() +func TestCliHealthCheckCanShowHaDeploymentOkStatusCorrectlyWhenDbStateIsFromSentinelOnly(t *testing.T) { + setupHcMockSentinelDb("1.2.3.4", "26379") stdout, err := runHcCli() @@ -178,7 +238,7 @@ func TestCliHealthCheckCanShowHaDeploymentOkStatusCorrectlyWhenDbStateIsFromRepl } func TestCliHealthCheckCanShowStandaloneDeploymentOkStatusCorrectly(t *testing.T) { - setupHcMockMasterDb("10.20.30.40", "6379", 0) + setupHcMockMasterDb("10.20.30.40", "6379") stdout, err := runHcCli()