Skip to content

Commit 28b72b7

Browse files
rohanKanojiaanjannath
authored andcommitted
fix (machine) : crc daemon /status api should return correct preset value for okd cluster (#4478)
+ Refactor `Status()` method to move ClusterStatusResult object creation logic to a separate method for easier testing + Add case for OKD preset while setting preset value in cluster preset Signed-off-by: Rohan Kumar <[email protected]>
1 parent 602c1f4 commit 28b72b7

File tree

2 files changed

+283
-23
lines changed

2 files changed

+283
-23
lines changed

pkg/crc/machine/status.go

+31-23
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import (
1515
"github.com/pkg/errors"
1616
)
1717

18+
type openShiftStatusSupplierFunc func(context.Context, string) types.OpenshiftStatus
19+
1820
func (client *client) Status() (*types.ClusterStatusResult, error) {
1921
vm, err := loadVirtualMachine(client.name, client.useVSock())
2022
if err != nil {
@@ -33,45 +35,51 @@ func (client *client) Status() (*types.ClusterStatusResult, error) {
3335
return nil, errors.Wrap(err, "Cannot get machine state")
3436
}
3537

38+
ip, err := vm.IP()
39+
if err != nil {
40+
return nil, errors.Wrap(err, "Error getting ip")
41+
}
42+
ramSize, ramUse := client.getRAMStatus(vm)
43+
diskSize, diskUse := client.getDiskDetails(vm)
44+
pvSize, pvUse := client.getPVCSize(vm)
45+
var openShiftStatusSupplier = getOpenShiftStatus
46+
if vm.bundle.IsMicroshift() {
47+
openShiftStatusSupplier = getMicroShiftStatus
48+
}
49+
50+
return createClusterStatusResult(vmStatus, vm.bundle.GetBundleType(), vm.bundle.GetVersion(), ip, ramSize, ramUse, diskSize, diskUse, pvSize, pvUse, openShiftStatusSupplier)
51+
}
52+
53+
func createClusterStatusResult(vmStatus state.State, bundleType preset.Preset, vmBundleVersion, vmIP string, diskSize, diskUse, ramSize, ramUse int64, pvUse, pvSize int, openShiftStatusSupplier openShiftStatusSupplierFunc) (*types.ClusterStatusResult, error) {
3654
clusterStatusResult := &types.ClusterStatusResult{
37-
CrcStatus: vmStatus,
55+
CrcStatus: vmStatus,
56+
OpenshiftVersion: vmBundleVersion,
57+
OpenshiftStatus: types.OpenshiftStopped,
3858
}
39-
switch {
40-
case vm.bundle.IsMicroshift():
41-
clusterStatusResult.OpenshiftStatus = types.OpenshiftStopped
42-
clusterStatusResult.OpenshiftVersion = vm.bundle.GetVersion()
59+
switch bundleType {
60+
case preset.Microshift:
4361
clusterStatusResult.Preset = preset.Microshift
62+
case preset.OKD:
63+
clusterStatusResult.Preset = preset.OKD
4464
default:
45-
clusterStatusResult.OpenshiftStatus = types.OpenshiftStopped
46-
clusterStatusResult.OpenshiftVersion = vm.bundle.GetVersion()
4765
clusterStatusResult.Preset = preset.OpenShift
4866
}
4967

5068
if vmStatus != state.Running {
5169
return clusterStatusResult, nil
5270
}
5371

54-
ip, err := vm.IP()
55-
if err != nil {
56-
return nil, errors.Wrap(err, "Error getting ip")
57-
}
58-
59-
diskSize, diskUse := client.getDiskDetails(vm)
6072
clusterStatusResult.CrcStatus = state.Running
6173
clusterStatusResult.DiskUse = diskUse
6274
clusterStatusResult.DiskSize = diskSize
63-
64-
switch {
65-
case vm.bundle.IsMicroshift():
66-
clusterStatusResult.OpenshiftStatus = getMicroShiftStatus(context.Background(), ip)
67-
clusterStatusResult.PersistentVolumeUse, clusterStatusResult.PersistentVolumeSize = client.getPVCSize(vm)
68-
case vm.bundle.IsOpenShift():
69-
clusterStatusResult.OpenshiftStatus = getOpenShiftStatus(context.Background(), ip)
70-
}
71-
72-
ramSize, ramUse := client.getRAMStatus(vm)
7375
clusterStatusResult.RAMSize = ramSize
7476
clusterStatusResult.RAMUse = ramUse
77+
clusterStatusResult.OpenshiftStatus = openShiftStatusSupplier(context.Background(), vmIP)
78+
79+
if bundleType == preset.Microshift {
80+
clusterStatusResult.PersistentVolumeUse = pvUse
81+
clusterStatusResult.PersistentVolumeSize = pvSize
82+
}
7583

7684
return clusterStatusResult, nil
7785
}

pkg/crc/machine/status_test.go

+252
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,252 @@
1+
package machine
2+
3+
import (
4+
"context"
5+
"testing"
6+
7+
"github.com/crc-org/crc/v2/pkg/crc/machine/state"
8+
"github.com/crc-org/crc/v2/pkg/crc/machine/types"
9+
"github.com/crc-org/crc/v2/pkg/crc/preset"
10+
"github.com/stretchr/testify/assert"
11+
)
12+
13+
func TestCreateClusterStatusResultShouldSetOpenShiftStatusAsExpected(t *testing.T) {
14+
tests := []struct {
15+
name string
16+
vmStatus state.State
17+
vmBundleType preset.Preset
18+
expectedClusterStatus types.ClusterStatusResult
19+
}{
20+
{
21+
"MicroShift cluster running", state.Running, preset.Microshift, types.ClusterStatusResult{
22+
CrcStatus: "Running",
23+
OpenshiftStatus: "Running",
24+
OpenshiftVersion: "v4.5.1",
25+
DiskUse: int64(16),
26+
DiskSize: int64(32),
27+
RAMUse: int64(8),
28+
RAMSize: int64(12),
29+
PersistentVolumeUse: 16,
30+
PersistentVolumeSize: 32,
31+
Preset: preset.Microshift,
32+
},
33+
},
34+
{
35+
"MicroShift cluster stopped", state.Stopped, preset.Microshift, types.ClusterStatusResult{
36+
CrcStatus: "Stopped",
37+
OpenshiftStatus: "Stopped",
38+
OpenshiftVersion: "v4.5.1",
39+
Preset: preset.Microshift,
40+
DiskUse: int64(0),
41+
DiskSize: int64(0),
42+
RAMUse: int64(0),
43+
RAMSize: int64(0),
44+
PersistentVolumeUse: 0,
45+
PersistentVolumeSize: 0,
46+
},
47+
},
48+
{
49+
"MicroShift cluster error state", state.Error, preset.Microshift, types.ClusterStatusResult{
50+
CrcStatus: "Error",
51+
OpenshiftStatus: "Stopped",
52+
OpenshiftVersion: "v4.5.1",
53+
Preset: preset.Microshift,
54+
DiskUse: int64(0),
55+
DiskSize: int64(0),
56+
RAMUse: int64(0),
57+
RAMSize: int64(0),
58+
PersistentVolumeUse: 0,
59+
PersistentVolumeSize: 0,
60+
},
61+
},
62+
{
63+
"MicroShift cluster stopping state", state.Stopping, preset.Microshift, types.ClusterStatusResult{
64+
CrcStatus: "Stopping",
65+
OpenshiftStatus: "Stopped",
66+
OpenshiftVersion: "v4.5.1",
67+
Preset: preset.Microshift,
68+
DiskUse: int64(0),
69+
DiskSize: int64(0),
70+
RAMUse: int64(0),
71+
RAMSize: int64(0),
72+
PersistentVolumeUse: 0,
73+
PersistentVolumeSize: 0,
74+
},
75+
},
76+
{
77+
"MicroShift cluster starting state", state.Starting, preset.Microshift, types.ClusterStatusResult{
78+
CrcStatus: "Starting",
79+
OpenshiftStatus: "Stopped",
80+
OpenshiftVersion: "v4.5.1",
81+
Preset: preset.Microshift,
82+
DiskUse: int64(0),
83+
DiskSize: int64(0),
84+
RAMUse: int64(0),
85+
RAMSize: int64(0),
86+
PersistentVolumeUse: 0,
87+
PersistentVolumeSize: 0,
88+
},
89+
},
90+
{
91+
"OpenShift cluster running", state.Running, preset.OpenShift, types.ClusterStatusResult{
92+
CrcStatus: "Running",
93+
OpenshiftStatus: "Running",
94+
OpenshiftVersion: "v4.5.1",
95+
Preset: preset.OpenShift,
96+
DiskUse: int64(16),
97+
DiskSize: int64(32),
98+
RAMUse: int64(8),
99+
RAMSize: int64(12),
100+
PersistentVolumeUse: 0,
101+
PersistentVolumeSize: 0,
102+
},
103+
},
104+
{
105+
"OpenShift cluster stopped", state.Stopped, preset.OpenShift, types.ClusterStatusResult{
106+
CrcStatus: "Stopped",
107+
OpenshiftStatus: "Stopped",
108+
OpenshiftVersion: "v4.5.1",
109+
Preset: preset.OpenShift,
110+
DiskUse: int64(0),
111+
DiskSize: int64(0),
112+
RAMUse: int64(0),
113+
RAMSize: int64(0),
114+
PersistentVolumeUse: 0,
115+
PersistentVolumeSize: 0,
116+
},
117+
},
118+
{
119+
"OpenShift cluster errored", state.Error, preset.OpenShift, types.ClusterStatusResult{
120+
CrcStatus: "Error",
121+
OpenshiftStatus: "Stopped",
122+
OpenshiftVersion: "v4.5.1",
123+
Preset: preset.OpenShift,
124+
DiskUse: int64(0),
125+
DiskSize: int64(0),
126+
RAMUse: int64(0),
127+
RAMSize: int64(0),
128+
PersistentVolumeUse: 0,
129+
PersistentVolumeSize: 0,
130+
},
131+
},
132+
{
133+
"OpenShift cluster stopping state", state.Stopping, preset.OpenShift, types.ClusterStatusResult{
134+
CrcStatus: "Stopping",
135+
OpenshiftStatus: "Stopped",
136+
OpenshiftVersion: "v4.5.1",
137+
Preset: preset.OpenShift,
138+
DiskUse: int64(0),
139+
DiskSize: int64(0),
140+
RAMUse: int64(0),
141+
RAMSize: int64(0),
142+
PersistentVolumeUse: 0,
143+
PersistentVolumeSize: 0,
144+
},
145+
},
146+
{
147+
"OpenShift cluster starting state", state.Starting, preset.OpenShift, types.ClusterStatusResult{
148+
CrcStatus: "Starting",
149+
OpenshiftStatus: "Stopped",
150+
OpenshiftVersion: "v4.5.1",
151+
Preset: preset.OpenShift,
152+
DiskUse: int64(0),
153+
DiskSize: int64(0),
154+
RAMUse: int64(0),
155+
RAMSize: int64(0),
156+
PersistentVolumeUse: 0,
157+
PersistentVolumeSize: 0,
158+
},
159+
},
160+
{
161+
"OpenShift/OKD cluster running", state.Running, preset.OKD, types.ClusterStatusResult{
162+
CrcStatus: "Running",
163+
OpenshiftStatus: "Running",
164+
OpenshiftVersion: "v4.5.1",
165+
Preset: preset.OKD,
166+
DiskUse: int64(16),
167+
DiskSize: int64(32),
168+
RAMUse: int64(8),
169+
RAMSize: int64(12),
170+
PersistentVolumeUse: 0,
171+
PersistentVolumeSize: 0,
172+
},
173+
},
174+
{
175+
"OpenShift/OKD cluster stopped", state.Stopped, preset.OKD, types.ClusterStatusResult{
176+
CrcStatus: "Stopped",
177+
OpenshiftStatus: "Stopped",
178+
OpenshiftVersion: "v4.5.1",
179+
Preset: preset.OKD,
180+
DiskUse: int64(0),
181+
DiskSize: int64(0),
182+
RAMUse: int64(0),
183+
RAMSize: int64(0),
184+
PersistentVolumeUse: 0,
185+
PersistentVolumeSize: 0,
186+
},
187+
},
188+
{
189+
"OpenShift/OKD cluster errored", state.Error, preset.OKD, types.ClusterStatusResult{
190+
CrcStatus: "Error",
191+
OpenshiftStatus: "Stopped",
192+
OpenshiftVersion: "v4.5.1",
193+
Preset: preset.OKD,
194+
DiskUse: int64(0),
195+
DiskSize: int64(0),
196+
RAMUse: int64(0),
197+
RAMSize: int64(0),
198+
PersistentVolumeUse: 0,
199+
PersistentVolumeSize: 0,
200+
},
201+
},
202+
{
203+
"OpenShift/OKD cluster stopping state", state.Stopping, preset.OKD, types.ClusterStatusResult{
204+
CrcStatus: "Stopping",
205+
OpenshiftStatus: "Stopped",
206+
OpenshiftVersion: "v4.5.1",
207+
Preset: preset.OKD,
208+
DiskUse: int64(0),
209+
DiskSize: int64(0),
210+
RAMUse: int64(0),
211+
RAMSize: int64(0),
212+
PersistentVolumeUse: 0,
213+
PersistentVolumeSize: 0,
214+
},
215+
},
216+
{
217+
"OpenShift/OKD cluster starting state", state.Starting, preset.OKD, types.ClusterStatusResult{
218+
CrcStatus: "Starting",
219+
OpenshiftStatus: "Stopped",
220+
OpenshiftVersion: "v4.5.1",
221+
Preset: preset.OKD,
222+
DiskUse: int64(0),
223+
DiskSize: int64(0),
224+
RAMUse: int64(0),
225+
RAMSize: int64(0),
226+
PersistentVolumeUse: 0,
227+
PersistentVolumeSize: 0,
228+
},
229+
},
230+
}
231+
232+
for _, tt := range tests {
233+
t.Run(tt.name, func(t *testing.T) {
234+
// Given
235+
// When
236+
actualClusterStatusResult, err := createClusterStatusResult(tt.vmStatus, tt.vmBundleType, "v4.5.1", "127.0.0.1", 32, 16, 12, 8, 16, 32, func(context.Context, string) types.OpenshiftStatus { return types.OpenshiftRunning })
237+
238+
// Then
239+
assert.NoError(t, err)
240+
assert.Equal(t, tt.expectedClusterStatus.CrcStatus, actualClusterStatusResult.CrcStatus)
241+
assert.Equal(t, tt.expectedClusterStatus.OpenshiftStatus, actualClusterStatusResult.OpenshiftStatus)
242+
assert.Equal(t, tt.expectedClusterStatus.Preset, actualClusterStatusResult.Preset)
243+
assert.Equal(t, tt.expectedClusterStatus.OpenshiftVersion, actualClusterStatusResult.OpenshiftVersion)
244+
assert.Equal(t, tt.expectedClusterStatus.RAMSize, actualClusterStatusResult.RAMSize)
245+
assert.Equal(t, tt.expectedClusterStatus.RAMUse, actualClusterStatusResult.RAMUse)
246+
assert.Equal(t, tt.expectedClusterStatus.DiskSize, actualClusterStatusResult.DiskSize)
247+
assert.Equal(t, tt.expectedClusterStatus.DiskUse, actualClusterStatusResult.DiskUse)
248+
assert.Equal(t, tt.expectedClusterStatus.PersistentVolumeSize, actualClusterStatusResult.PersistentVolumeSize)
249+
assert.Equal(t, tt.expectedClusterStatus.PersistentVolumeUse, actualClusterStatusResult.PersistentVolumeUse)
250+
})
251+
}
252+
}

0 commit comments

Comments
 (0)