Skip to content

Commit d792c8a

Browse files
cx-sumit-morchhalecx-anurag-dalkecx-hitesh-madgulkar
authored
Support for SCA Delta Scans(AST-130110) (#1417)
* Set env variable for sca resolver for delta sca * fix unit test cases * add check for feature flag for setting auth * remove unnecessary changes --------- Co-authored-by: Anurag Dalke <[email protected]> Co-authored-by: Hitesh Madgulkar <[email protected]>
1 parent 697fc17 commit d792c8a

File tree

3 files changed

+58
-5
lines changed

3 files changed

+58
-5
lines changed

internal/commands/scan.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ const (
136136
BranchPrimaryPrefix = "--branch-primary="
137137
OverridePolicyManagement = "override-policy-management"
138138
defaultScanEnqueueRetryDelay = 5
139+
scaResolverCxOneAuthToken = "CXONE_AUTH_TOKEN"
139140
)
140141

141142
var (
@@ -1867,7 +1868,7 @@ func filterMatched(filters []string, fileName string) bool {
18671868
return matched
18681869
}
18691870

1870-
func runScaResolver(sourceDir, scaResolver, scaResolverParams, projectName string) error {
1871+
func runScaResolver(sourceDir, scaResolver, scaResolverParams, projectName string, featureFlagsWrapper wrappers.FeatureFlagsWrapper) error {
18711872
if scaResolver != "" {
18721873
scaFile, err := ioutil.TempFile("", "sca")
18731874
scaResolverResultsFile = scaFile.Name() + ".json"
@@ -1888,7 +1889,19 @@ func runScaResolver(sourceDir, scaResolver, scaResolverParams, projectName strin
18881889
args = append(args, parsedscaResolverParams...)
18891890
}
18901891
log.Println(fmt.Sprintf("Using SCA resolver: %s %v", scaResolver, args))
1891-
out, err := exec.Command(scaResolver, args...).Output()
1892+
cmd := exec.Command(scaResolver, args...)
1893+
scaDeltaScanEnabled, _ := wrappers.GetSpecificFeatureFlag(featureFlagsWrapper, wrappers.ScaDeltaScanEnabled)
1894+
if scaDeltaScanEnabled.Status {
1895+
accessToken, err := wrappers.GetAccessToken()
1896+
if err != nil {
1897+
return err
1898+
}
1899+
if accessToken != "" {
1900+
logger.PrintIfVerbose("Setting authorization token for SCA Delta Scan")
1901+
cmd.Env = append(os.Environ(), fmt.Sprintf("%s=%s", scaResolverCxOneAuthToken, accessToken))
1902+
}
1903+
}
1904+
out, err := cmd.Output()
18921905
logger.PrintIfVerbose(string(out))
18931906
if err != nil {
18941907
return errors.Errorf("%s", err)
@@ -2001,7 +2014,7 @@ func getUploadURLFromSource(cmd *cobra.Command, uploadsWrapper wrappers.UploadsW
20012014

20022015
// execute scaResolver only in sca type of scans
20032016
if strings.Contains(actualScanTypes, commonParams.ScaType) {
2004-
scaErr := runScaResolver(directoryPath, scaResolver, scaResolverParams, projectName)
2017+
scaErr := runScaResolver(directoryPath, scaResolver, scaResolverParams, projectName, featureFlagsWrapper)
20052018
if scaErr != nil {
20062019
if unzip {
20072020
_ = cleanTempUnzipDirectory(directoryPath)

internal/commands/scan_test.go

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"reflect"
1414
"strings"
1515
"testing"
16+
"time"
1617

1718
"github.com/checkmarx/ast-cli/internal/commands/util"
1819
errorConstants "github.com/checkmarx/ast-cli/internal/constants/errors"
@@ -315,7 +316,8 @@ func TestCreateScanWithScaResolverParamsWrong(t *testing.T) {
315316
for _, tt := range tests {
316317
tt := tt
317318
t.Run(tt.name, func(t *testing.T) {
318-
err := runScaResolver(tt.sourceDir, tt.scaResolver, tt.scaResolverParams, tt.projectName)
319+
featureFlagsWrapper := &mock.FeatureFlagsMockWrapper{}
320+
err := runScaResolver(tt.sourceDir, tt.scaResolver, tt.scaResolverParams, tt.projectName, featureFlagsWrapper)
319321
assert.Assert(t, strings.Contains(err.Error(), tt.expectedError), err.Error())
320322
})
321323
}
@@ -326,10 +328,32 @@ func TestCreateScanWithScaResolverNoScaResolver(t *testing.T) {
326328
var scaResolver = ""
327329
var scaResolverParams = "params"
328330
var projectName = "ProjectName"
329-
err := runScaResolver(sourceDir, scaResolver, scaResolverParams, projectName)
331+
featureFlagsWrapper := &mock.FeatureFlagsMockWrapper{}
332+
err := runScaResolver(sourceDir, scaResolver, scaResolverParams, projectName, featureFlagsWrapper)
330333
assert.Assert(t, err == nil)
331334
}
332335

336+
func TestScaResolverWithSCADeltaScanEnabled(t *testing.T) {
337+
setupMockAccessToken()
338+
defer cleanupMockAccessToken()
339+
340+
mock.Flag = wrappers.FeatureFlagResponseModel{
341+
Name: wrappers.ScaDeltaScanEnabled,
342+
Status: true,
343+
}
344+
defer func() {
345+
mock.Flag = wrappers.FeatureFlagResponseModel{}
346+
}()
347+
var sourceDir = "/sourceDir"
348+
var scaResolver = "./NonExistentScaResolver"
349+
var scaResolverParams = "params"
350+
var projectName = "ProjectName"
351+
featureFlagsWrapper := &mock.FeatureFlagsMockWrapper{}
352+
err := runScaResolver(sourceDir, scaResolver, scaResolverParams, projectName, featureFlagsWrapper)
353+
assert.Assert(t, err != nil, "Expected error when resolver doesn't exist")
354+
assert.Assert(t, strings.Contains(err.Error(), "ScaResolver"), "Error should mention ScaResolver: %v", err.Error())
355+
}
356+
333357
func TestCreateScanWithScanTypes(t *testing.T) {
334358
baseArgs := []string{"scan", "create", "--project-name", "MOCK", "-s", dummyRepo, "-b", "dummy_branch"}
335359
execCmdNilAssertion(t, append(baseArgs, "--scan-types", "sast")...)
@@ -4943,3 +4967,18 @@ func TestGetGitCommitHistoryValue_WithWarnings(t *testing.T) {
49434967
})
49444968
}
49454969
}
4970+
4971+
func setupMockAccessToken() {
4972+
wrappers.CachedAccessToken = "mock-token-for-testing"
4973+
wrappers.CachedAccessTime = time.Now()
4974+
viper.Set(commonParams.TokenExpirySecondsKey, 300)
4975+
}
4976+
4977+
func cleanupMockAccessToken() {
4978+
wrappers.CachedAccessToken = ""
4979+
wrappers.CachedAccessTime = time.Time{}
4980+
4981+
wrappers.ClearCache()
4982+
// Reset to default value (300 seconds as per params/binds.go)
4983+
viper.Set(commonParams.TokenExpirySecondsKey, 300)
4984+
}

internal/wrappers/feature-flags.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ const SscsCommitHistoryEnabled = "SSCS_COMMIT_HISTORY_ENABLED"
1919
const DirectAssociationEnabled = "DIRECT_APP_ASSOCIATION_ENABLED"
2020
const maxRetries = 3
2121
const IncreaseFileUploadLimit = "INCREASE_FILE_UPLOAD_LIMIT"
22+
const ScaDeltaScanEnabled = "SCA_DELTASCAN_ENABLED"
2223

2324
var DefaultFFLoad bool = false
2425

0 commit comments

Comments
 (0)