Skip to content

Commit 3697a93

Browse files
guillaumerosepraveenkumar
authored andcommitted
Add function to check single operator status
1 parent a5b15d9 commit 3697a93

File tree

4 files changed

+69
-24
lines changed

4 files changed

+69
-24
lines changed

pkg/crc/cluster/clusteroperator.go

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package cluster
22

33
import (
44
"encoding/json"
5+
"errors"
56
"fmt"
67
"time"
78

@@ -35,24 +36,38 @@ type ClusterStatus struct {
3536
Disabled bool
3637
}
3738

38-
func GetClusterOperatorStatus(ocConfig oc.OcConfig) (*ClusterStatus, error) {
39-
cs := &ClusterStatus{}
39+
func GetClusterOperatorStatus(ocConfig oc.OcConfig, operator string) (*ClusterStatus, error) {
40+
return getStatus(ocConfig, []string{operator})
41+
}
42+
43+
func GetClusterOperatorsStatus(ocConfig oc.OcConfig) (*ClusterStatus, error) {
44+
return getStatus(ocConfig, []string{})
45+
}
46+
47+
func getStatus(ocConfig oc.OcConfig, selector []string) (*ClusterStatus, error) {
48+
cs := &ClusterStatus{
49+
Available: true,
50+
}
51+
4052
data, stderr, err := ocConfig.RunOcCommand("get", "co", "-ojson")
4153
if err != nil {
4254
return cs, fmt.Errorf("%s", stderr)
4355
}
4456

4557
var co K8sResource
46-
47-
err = json.Unmarshal([]byte(data), &co)
48-
if err != nil {
58+
if err := json.Unmarshal([]byte(data), &co); err != nil {
4959
return cs, err
5060
}
51-
cs.Available = true
61+
62+
found := false
5263
for _, c := range co.Items {
5364
if contains(c.Metadata.Name, ignoreClusterOperators) {
5465
continue
5566
}
67+
if len(selector) > 0 && !contains(c.Metadata.Name, selector) {
68+
continue
69+
}
70+
found = true
5671
for _, con := range c.Status.Conditions {
5772
switch con.Type {
5873
case "Available":
@@ -82,6 +97,9 @@ func GetClusterOperatorStatus(ocConfig oc.OcConfig) (*ClusterStatus, error) {
8297
}
8398
}
8499
}
100+
if !found {
101+
return nil, errors.New("no cluster operator found")
102+
}
85103
return cs, nil
86104
}
87105

pkg/crc/cluster/clusteroperator_test.go

Lines changed: 43 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,30 +5,57 @@ import (
55
"path/filepath"
66
"testing"
77

8-
"github.com/code-ready/crc/pkg/crc/errors"
98
"github.com/code-ready/crc/pkg/crc/oc"
9+
10+
"github.com/code-ready/crc/pkg/crc/errors"
1011
"github.com/stretchr/testify/assert"
1112
)
1213

13-
func TestGetClusterOperatorStatus(t *testing.T) {
14-
status, err := GetClusterOperatorStatus(oc.OcConfig{
15-
Runner: &mockRunner{file: filepath.Join("testdata", "co.json")},
16-
})
17-
assert.NoError(t, err)
18-
assert.Equal(t, &ClusterStatus{
14+
var (
15+
available = &ClusterStatus{
1916
Available: true,
20-
}, status)
17+
}
18+
progressing = &ClusterStatus{
19+
Available: true,
20+
Progressing: true,
21+
}
22+
)
23+
24+
func TestGetClusterOperatorsStatus(t *testing.T) {
25+
status, err := GetClusterOperatorsStatus(ocConfig("co.json"))
26+
assert.NoError(t, err)
27+
assert.Equal(t, available, status)
2128
}
2229

23-
func TestGetClusterOperatorStatusProgressing(t *testing.T) {
24-
status, err := GetClusterOperatorStatus(oc.OcConfig{
25-
Runner: &mockRunner{file: filepath.Join("testdata", "co-progressing.json")},
26-
})
30+
func TestGetClusterOperatorsStatusProgressing(t *testing.T) {
31+
status, err := GetClusterOperatorsStatus(ocConfig("co-progressing.json"))
2732
assert.NoError(t, err)
28-
assert.Equal(t, &ClusterStatus{
29-
Available: true,
30-
Progressing: true,
31-
}, status)
33+
assert.Equal(t, progressing, status)
34+
}
35+
36+
func TestGetClusterOperatorStatus(t *testing.T) {
37+
status, err := GetClusterOperatorStatus(ocConfig("co.json"), "authentication")
38+
assert.NoError(t, err)
39+
assert.Equal(t, available, status)
40+
41+
status, err = GetClusterOperatorStatus(ocConfig("co-progressing.json"), "authentication")
42+
assert.NoError(t, err)
43+
assert.Equal(t, progressing, status)
44+
45+
status, err = GetClusterOperatorStatus(ocConfig("co-progressing.json"), "cloud-credential")
46+
assert.NoError(t, err)
47+
assert.Equal(t, available, status)
48+
}
49+
50+
func TestGetClusterOperatorStatusNotFound(t *testing.T) {
51+
_, err := GetClusterOperatorStatus(ocConfig("co-progressing.json"), "not-found")
52+
assert.EqualError(t, err, "no cluster operator found")
53+
}
54+
55+
func ocConfig(s string) oc.OcConfig {
56+
return oc.OcConfig{
57+
Runner: &mockRunner{file: filepath.Join("testdata", s)},
58+
}
3259
}
3360

3461
type mockRunner struct {

pkg/crc/machine/machine.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -602,7 +602,7 @@ func Status(statusConfig ClusterStatusConfig) (ClusterStatusResult, error) {
602602

603603
// check if all the clusteroperators are running
604604
ocConfig := oc.UseOCWithConfig(statusConfig.Name)
605-
operatorsStatus, err := cluster.GetClusterOperatorStatus(ocConfig)
605+
operatorsStatus, err := cluster.GetClusterOperatorsStatus(ocConfig)
606606
if err != nil {
607607
openshiftStatus = "Not Reachable"
608608
logging.Debug(err.Error())

test/integration/crcsuite/crcsuite.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ func CheckClusterOperatorsWithRetry(retryCount int, retryWait string) error {
184184

185185
ocConfig := oc.UseOCWithConfig("crc")
186186
for i := 0; i < retryCount; i++ {
187-
s, err := cluster.GetClusterOperatorStatus(ocConfig)
187+
s, err := cluster.GetClusterOperatorsStatus(ocConfig)
188188
if err != nil {
189189
return err
190190
}

0 commit comments

Comments
 (0)