Skip to content

Commit de3f5af

Browse files
Merge pull request #1069 from Checkmarx/bug/fix-ff-panic
Fix panic exit when containers ff could not be fetched (AST-86767)
2 parents 140e422 + 8535a17 commit de3f5af

File tree

4 files changed

+37
-3
lines changed

4 files changed

+37
-3
lines changed

internal/commands/root_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ func assertError(t *testing.T, err error, expectedMessage string) {
206206
func clearFlags() {
207207
mock.Flags = wrappers.FeatureFlagsResponseModel{}
208208
mock.Flag = wrappers.FeatureFlagResponseModel{}
209+
mock.FFErr = nil
209210
wrappers.ClearCache()
210211
}
211212

internal/commands/scan.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1132,7 +1132,7 @@ func validateScanTypes(cmd *cobra.Command, jwtWrapper wrappers.JWTWrapper, featu
11321132
var scanTypes []string
11331133
var SCSScanTypes []string
11341134

1135-
containerEngineCLIEnabled, _ := featureFlagsWrapper.GetSpecificFlag(wrappers.ContainerEngineCLIEnabled)
1135+
runContainerEngineCLI := isContainersEngineEnabled(featureFlagsWrapper)
11361136
allowedEngines, err := jwtWrapper.GetAllowedEngines(featureFlagsWrapper)
11371137
if err != nil {
11381138
err = errors.Errorf("Error validating scan types: %v", err)
@@ -1149,7 +1149,7 @@ func validateScanTypes(cmd *cobra.Command, jwtWrapper wrappers.JWTWrapper, featu
11491149

11501150
scanTypes = strings.Split(userScanTypes, ",")
11511151
for _, scanType := range scanTypes {
1152-
if !allowedEngines[scanType] || (scanType == commonParams.ContainersType && !(containerEngineCLIEnabled.Status)) {
1152+
if !allowedEngines[scanType] || (scanType == commonParams.ContainersType && !(runContainerEngineCLI)) {
11531153
keys := reflect.ValueOf(allowedEngines).MapKeys()
11541154
err = errors.Errorf(engineNotAllowed, scanType, scanType, keys)
11551155
return err
@@ -1165,7 +1165,7 @@ func validateScanTypes(cmd *cobra.Command, jwtWrapper wrappers.JWTWrapper, featu
11651165

11661166
} else {
11671167
for k := range allowedEngines {
1168-
if k == commonParams.ContainersType && !(containerEngineCLIEnabled.Status) {
1168+
if k == commonParams.ContainersType && !(runContainerEngineCLI) {
11691169
continue
11701170
}
11711171
scanTypes = append(scanTypes, k)
@@ -1178,6 +1178,16 @@ func validateScanTypes(cmd *cobra.Command, jwtWrapper wrappers.JWTWrapper, featu
11781178
return nil
11791179
}
11801180

1181+
func isContainersEngineEnabled(featureFlagsWrapper wrappers.FeatureFlagsWrapper) bool {
1182+
containerEngineCLIEnabled, err := featureFlagsWrapper.GetSpecificFlag(wrappers.ContainerEngineCLIEnabled)
1183+
if err != nil {
1184+
logger.PrintfIfVerbose("Failed to fetch CONTAINER_ENGINE_CLI_ENABLED FF, defaulting to `false`. Error: %s", err)
1185+
return false
1186+
}
1187+
1188+
return containerEngineCLIEnabled.Status
1189+
}
1190+
11811191
func scanTypeEnabled(scanType string) bool {
11821192
scanTypes := strings.Split(actualScanTypes, ",")
11831193
for _, a := range scanTypes {

internal/commands/scan_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1958,3 +1958,22 @@ func TestValidateScanTypes(t *testing.T) {
19581958
})
19591959
}
19601960
}
1961+
1962+
func TestIsContainersEngineEnabled_FlagEnabled(t *testing.T) {
1963+
clearFlags()
1964+
mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.ContainerEngineCLIEnabled, Status: true}
1965+
mock.FFErr = nil
1966+
1967+
result := isContainersEngineEnabled(mock.FeatureFlagsMockWrapper{})
1968+
assert.Assert(t, result, "expected result to be true")
1969+
}
1970+
1971+
func TestIsContainersEngineEnabled_FlagRetrievalFails(t *testing.T) {
1972+
clearFlags()
1973+
mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.ContainerEngineCLIEnabled, Status: false}
1974+
mock.FFErr = errors.New("something went wrong while fetching ff")
1975+
1976+
result := isContainersEngineEnabled(mock.FeatureFlagsMockWrapper{})
1977+
1978+
assert.Assert(t, !result, "expected result to be false")
1979+
}

internal/wrappers/mock/feature-flags-mock.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88

99
var Flags wrappers.FeatureFlagsResponseModel
1010
var Flag wrappers.FeatureFlagResponseModel
11+
var FFErr error
1112

1213
type FeatureFlagsMockWrapper struct {
1314
}
@@ -22,5 +23,8 @@ func (f FeatureFlagsMockWrapper) GetAll() (*wrappers.FeatureFlagsResponseModel,
2223

2324
func (f FeatureFlagsMockWrapper) GetSpecificFlag(specificFlag string) (*wrappers.FeatureFlagResponseModel, error) {
2425
fmt.Println("Called GetSpecificFlag in FeatureFlagsMockWrapper with flag:", specificFlag)
26+
if FFErr != nil {
27+
return nil, FFErr
28+
}
2529
return &Flag, nil
2630
}

0 commit comments

Comments
 (0)