Skip to content

Commit e248ab0

Browse files
Pavan Sokke Nagarajlaveryagarcialuis
authored
Fix strict flag mapping (#542)
* add func BoolOrDefaultFalse and Bool * use strict.BoolOrDefaultFalse * Update pkg/multitype/boolstring.go Co-authored-by: Andrew Lavery <[email protected]> * Update pkg/multitype/boolstring_test.go Co-authored-by: Andrew Lavery <[email protected]> * Update pkg/multitype/boolstring_test.go Co-authored-by: Andrew Lavery <[email protected]> * Update boolstring_test.go * remove duplicate test * Update pkg/multitype/boolstring_test.go Co-authored-by: garcialuis <[email protected]> Co-authored-by: Andrew Lavery <[email protected]> Co-authored-by: garcialuis <[email protected]>
1 parent 942234d commit e248ab0

File tree

3 files changed

+135
-24
lines changed

3 files changed

+135
-24
lines changed

pkg/analyze/analyzer.go

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ func Analyze(analyzer *troubleshootv1beta2.Analyze, getFile getCollectedFileCont
9595
if err != nil {
9696
return nil, err
9797
}
98-
result.Strict = analyzer.ClusterVersion.Strict.BoolVal
98+
result.Strict = analyzer.ClusterVersion.Strict.BoolOrDefaultFalse()
9999
return []*AnalyzeResult{result}, nil
100100
}
101101
if analyzer.StorageClass != nil {
@@ -110,7 +110,7 @@ func Analyze(analyzer *troubleshootv1beta2.Analyze, getFile getCollectedFileCont
110110
if err != nil {
111111
return nil, err
112112
}
113-
result.Strict = analyzer.StorageClass.Strict.BoolVal
113+
result.Strict = analyzer.StorageClass.Strict.BoolOrDefaultFalse()
114114
return []*AnalyzeResult{result}, nil
115115
}
116116
if analyzer.CustomResourceDefinition != nil {
@@ -125,7 +125,7 @@ func Analyze(analyzer *troubleshootv1beta2.Analyze, getFile getCollectedFileCont
125125
if err != nil {
126126
return nil, err
127127
}
128-
result.Strict = analyzer.CustomResourceDefinition.Strict.BoolVal
128+
result.Strict = analyzer.CustomResourceDefinition.Strict.BoolOrDefaultFalse()
129129
return []*AnalyzeResult{result}, nil
130130
}
131131
if analyzer.Ingress != nil {
@@ -140,7 +140,7 @@ func Analyze(analyzer *troubleshootv1beta2.Analyze, getFile getCollectedFileCont
140140
if err != nil {
141141
return nil, err
142142
}
143-
result.Strict = analyzer.Ingress.Strict.BoolVal
143+
result.Strict = analyzer.Ingress.Strict.BoolOrDefaultFalse()
144144
return []*AnalyzeResult{result}, nil
145145
}
146146
if analyzer.Secret != nil {
@@ -155,7 +155,7 @@ func Analyze(analyzer *troubleshootv1beta2.Analyze, getFile getCollectedFileCont
155155
if err != nil {
156156
return nil, err
157157
}
158-
result.Strict = analyzer.Secret.Strict.BoolVal
158+
result.Strict = analyzer.Secret.Strict.BoolOrDefaultFalse()
159159
return []*AnalyzeResult{result}, nil
160160
}
161161
if analyzer.ConfigMap != nil {
@@ -170,7 +170,7 @@ func Analyze(analyzer *troubleshootv1beta2.Analyze, getFile getCollectedFileCont
170170
if err != nil {
171171
return nil, err
172172
}
173-
result.Strict = analyzer.ConfigMap.Strict.BoolVal
173+
result.Strict = analyzer.ConfigMap.Strict.BoolOrDefaultFalse()
174174
return []*AnalyzeResult{result}, nil
175175
}
176176
if analyzer.ImagePullSecret != nil {
@@ -185,7 +185,7 @@ func Analyze(analyzer *troubleshootv1beta2.Analyze, getFile getCollectedFileCont
185185
if err != nil {
186186
return nil, err
187187
}
188-
result.Strict = analyzer.ImagePullSecret.Strict.BoolVal
188+
result.Strict = analyzer.ImagePullSecret.Strict.BoolOrDefaultFalse()
189189
return []*AnalyzeResult{result}, nil
190190
}
191191
if analyzer.DeploymentStatus != nil {
@@ -201,7 +201,7 @@ func Analyze(analyzer *troubleshootv1beta2.Analyze, getFile getCollectedFileCont
201201
return nil, err
202202
}
203203
for i := range results {
204-
results[i].Strict = analyzer.DeploymentStatus.Strict.BoolVal
204+
results[i].Strict = analyzer.DeploymentStatus.Strict.BoolOrDefaultFalse()
205205
}
206206
return results, nil
207207
}
@@ -218,7 +218,7 @@ func Analyze(analyzer *troubleshootv1beta2.Analyze, getFile getCollectedFileCont
218218
return nil, err
219219
}
220220
for i := range results {
221-
results[i].Strict = analyzer.StatefulsetStatus.Strict.BoolVal
221+
results[i].Strict = analyzer.StatefulsetStatus.Strict.BoolOrDefaultFalse()
222222
}
223223
return results, nil
224224
}
@@ -235,7 +235,7 @@ func Analyze(analyzer *troubleshootv1beta2.Analyze, getFile getCollectedFileCont
235235
return nil, err
236236
}
237237
for i := range results {
238-
results[i].Strict = analyzer.JobStatus.Strict.BoolVal
238+
results[i].Strict = analyzer.JobStatus.Strict.BoolOrDefaultFalse()
239239
}
240240
return results, nil
241241
}
@@ -252,7 +252,7 @@ func Analyze(analyzer *troubleshootv1beta2.Analyze, getFile getCollectedFileCont
252252
return nil, err
253253
}
254254
for i := range results {
255-
results[i].Strict = analyzer.ReplicaSetStatus.Strict.BoolVal
255+
results[i].Strict = analyzer.ReplicaSetStatus.Strict.BoolOrDefaultFalse()
256256
}
257257
return results, nil
258258
}
@@ -269,7 +269,7 @@ func Analyze(analyzer *troubleshootv1beta2.Analyze, getFile getCollectedFileCont
269269
return nil, err
270270
}
271271
for i := range results {
272-
results[i].Strict = analyzer.ClusterPodStatuses.Strict.BoolVal
272+
results[i].Strict = analyzer.ClusterPodStatuses.Strict.BoolOrDefaultFalse()
273273
}
274274
return results, nil
275275
}
@@ -285,7 +285,7 @@ func Analyze(analyzer *troubleshootv1beta2.Analyze, getFile getCollectedFileCont
285285
if err != nil {
286286
return nil, err
287287
}
288-
result.Strict = analyzer.ContainerRuntime.Strict.BoolVal
288+
result.Strict = analyzer.ContainerRuntime.Strict.BoolOrDefaultFalse()
289289
return []*AnalyzeResult{result}, nil
290290
}
291291
if analyzer.Distribution != nil {
@@ -300,7 +300,7 @@ func Analyze(analyzer *troubleshootv1beta2.Analyze, getFile getCollectedFileCont
300300
if err != nil {
301301
return nil, err
302302
}
303-
result.Strict = analyzer.Distribution.Strict.BoolVal
303+
result.Strict = analyzer.Distribution.Strict.BoolOrDefaultFalse()
304304
return []*AnalyzeResult{result}, nil
305305
}
306306
if analyzer.NodeResources != nil {
@@ -315,7 +315,7 @@ func Analyze(analyzer *troubleshootv1beta2.Analyze, getFile getCollectedFileCont
315315
if err != nil {
316316
return nil, err
317317
}
318-
result.Strict = analyzer.NodeResources.Strict.BoolVal
318+
result.Strict = analyzer.NodeResources.Strict.BoolOrDefaultFalse()
319319
return []*AnalyzeResult{result}, nil
320320
}
321321
if analyzer.TextAnalyze != nil {
@@ -331,7 +331,7 @@ func Analyze(analyzer *troubleshootv1beta2.Analyze, getFile getCollectedFileCont
331331
return nil, err
332332
}
333333
for i := range results {
334-
results[i].Strict = analyzer.TextAnalyze.Strict.BoolVal
334+
results[i].Strict = analyzer.TextAnalyze.Strict.BoolOrDefaultFalse()
335335
}
336336
return results, nil
337337
}
@@ -347,7 +347,7 @@ func Analyze(analyzer *troubleshootv1beta2.Analyze, getFile getCollectedFileCont
347347
if err != nil {
348348
return nil, err
349349
}
350-
result.Strict = analyzer.Postgres.Strict.BoolVal
350+
result.Strict = analyzer.Postgres.Strict.BoolOrDefaultFalse()
351351
return []*AnalyzeResult{result}, nil
352352
}
353353
if analyzer.Mysql != nil {
@@ -362,7 +362,7 @@ func Analyze(analyzer *troubleshootv1beta2.Analyze, getFile getCollectedFileCont
362362
if err != nil {
363363
return nil, err
364364
}
365-
result.Strict = analyzer.Mysql.Strict.BoolVal
365+
result.Strict = analyzer.Mysql.Strict.BoolOrDefaultFalse()
366366
return []*AnalyzeResult{result}, nil
367367
}
368368
if analyzer.Redis != nil {
@@ -377,7 +377,7 @@ func Analyze(analyzer *troubleshootv1beta2.Analyze, getFile getCollectedFileCont
377377
if err != nil {
378378
return nil, err
379379
}
380-
result.Strict = analyzer.Redis.Strict.BoolVal
380+
result.Strict = analyzer.Redis.Strict.BoolOrDefaultFalse()
381381
return []*AnalyzeResult{result}, nil
382382
}
383383
if analyzer.CephStatus != nil {
@@ -392,7 +392,7 @@ func Analyze(analyzer *troubleshootv1beta2.Analyze, getFile getCollectedFileCont
392392
if err != nil {
393393
return nil, err
394394
}
395-
result.Strict = analyzer.CephStatus.Strict.BoolVal
395+
result.Strict = analyzer.CephStatus.Strict.BoolOrDefaultFalse()
396396
return []*AnalyzeResult{result}, nil
397397
}
398398
if analyzer.Longhorn != nil {
@@ -408,7 +408,7 @@ func Analyze(analyzer *troubleshootv1beta2.Analyze, getFile getCollectedFileCont
408408
return nil, err
409409
}
410410
for i := range results {
411-
results[i].Strict = analyzer.Longhorn.Strict.BoolVal
411+
results[i].Strict = analyzer.Longhorn.Strict.BoolOrDefaultFalse()
412412
}
413413
return results, nil
414414
}
@@ -425,7 +425,7 @@ func Analyze(analyzer *troubleshootv1beta2.Analyze, getFile getCollectedFileCont
425425
if err != nil {
426426
return nil, err
427427
}
428-
result.Strict = analyzer.RegistryImages.Strict.BoolVal
428+
result.Strict = analyzer.RegistryImages.Strict.BoolOrDefaultFalse()
429429
return []*AnalyzeResult{result}, nil
430430
}
431431

@@ -442,7 +442,7 @@ func Analyze(analyzer *troubleshootv1beta2.Analyze, getFile getCollectedFileCont
442442
return nil, err
443443
}
444444
for i := range results {
445-
results[i].Strict = analyzer.WeaveReport.Strict.BoolVal
445+
results[i].Strict = analyzer.WeaveReport.Strict.BoolOrDefaultFalse()
446446
}
447447
return results, nil
448448
}
@@ -462,7 +462,7 @@ func Analyze(analyzer *troubleshootv1beta2.Analyze, getFile getCollectedFileCont
462462
if result == nil {
463463
return []*AnalyzeResult{}, nil
464464
}
465-
result.Strict = analyzer.Sysctl.Strict.BoolVal
465+
result.Strict = analyzer.Sysctl.Strict.BoolOrDefaultFalse()
466466
return []*AnalyzeResult{result}, nil
467467
}
468468

pkg/multitype/boolstring.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package multitype
55
import (
66
"encoding/json"
77
"fmt"
8+
"strconv"
89

910
fuzz "github.com/google/gofuzz"
1011
)
@@ -116,3 +117,24 @@ func (boolstr *BoolOrString) Fuzz(c fuzz.Continue) {
116117
c.Fuzz(&boolstr.StrVal)
117118
}
118119
}
120+
121+
// BoolOrDefaultFalse returns bool val, if strValu is parsed returns parsed value else false as default when parse error
122+
func (boolstr *BoolOrString) BoolOrDefaultFalse() bool {
123+
val, err := boolstr.Bool()
124+
if err != nil {
125+
return false
126+
}
127+
return val
128+
}
129+
130+
// Bool returns bool val, if strValu is parsed returns parsed value else false with parse error
131+
func (boolstr *BoolOrString) Bool() (bool, error) {
132+
if boolstr.Type == Bool {
133+
return boolstr.BoolVal, nil
134+
}
135+
parsed, err := strconv.ParseBool(boolstr.StrVal)
136+
if err != nil {
137+
return false, fmt.Errorf("failed to parse bool string(err: %v)", err)
138+
}
139+
return parsed, nil
140+
}

pkg/multitype/boolstring_test.go

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
// Based on https://github.com/kubernetes/apimachinery/blob/455a99f/pkg/util/intstr/intstr.go
2+
3+
package multitype
4+
5+
import (
6+
"testing"
7+
8+
"github.com/stretchr/testify/require"
9+
)
10+
11+
func TestBoolOrString_Bool(t *testing.T) {
12+
type fields struct {
13+
Type BoolOrStringType
14+
BoolVal bool
15+
StrVal string
16+
}
17+
tests := []struct {
18+
name string
19+
fields fields
20+
want bool
21+
wantErr bool
22+
}{
23+
{
24+
name: "expect true when BoolVal is true",
25+
fields: fields{Type: Bool, BoolVal: true},
26+
want: true,
27+
wantErr: false,
28+
}, {
29+
name: "expect false when BoolVal is false",
30+
fields: fields{Type: Bool, BoolVal: false},
31+
want: false,
32+
wantErr: false,
33+
}, {
34+
name: "expect false when StrVal is 'false'",
35+
fields: fields{Type: String, StrVal: "false"},
36+
want: false,
37+
wantErr: false,
38+
}, {
39+
name: "expect true when StrVal is 'true'",
40+
fields: fields{Type: String, StrVal: "true"},
41+
want: true,
42+
wantErr: false,
43+
}, {
44+
name: "expect false, error when StrVal is ''",
45+
fields: fields{Type: String, StrVal: "''"},
46+
want: false,
47+
wantErr: true,
48+
},
49+
{
50+
name: "expect false, error when StrVal is '123'",
51+
fields: fields{Type: String, StrVal: "123"},
52+
want: false,
53+
wantErr: true,
54+
}, {
55+
name: "expect true, nil when Type is not specified, StrVal is 'true'",
56+
fields: fields{StrVal: "true"},
57+
want: true,
58+
wantErr: false,
59+
}, {
60+
name: "expect false, nil when Type is not specified, StrVal is 'false'",
61+
fields: fields{StrVal: "false"},
62+
want: false,
63+
wantErr: false,
64+
}, {
65+
name: "expect false, nil when Type is not specified, StrVal is 'false' and BoolVal is true",
66+
fields: fields{StrVal: "false", BoolVal: true},
67+
want: false,
68+
wantErr: false,
69+
},
70+
}
71+
for _, tt := range tests {
72+
t.Run(tt.name, func(t *testing.T) {
73+
req := require.New(t)
74+
boolstr := &BoolOrString{
75+
Type: tt.fields.Type,
76+
BoolVal: tt.fields.BoolVal,
77+
StrVal: tt.fields.StrVal,
78+
}
79+
got, err := boolstr.Bool()
80+
req.Equal(tt.want, boolstr.BoolOrDefaultFalse())
81+
if tt.wantErr {
82+
req.Error(err)
83+
return
84+
}
85+
req.NoError(err)
86+
req.Equal(tt.want, got)
87+
})
88+
}
89+
}

0 commit comments

Comments
 (0)