diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 81249fe53..eef5632d9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -65,7 +65,7 @@ jobs: PR_GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} PR_GITHUB_NAMESPACE: "checkmarx" PR_GITHUB_REPO_NAME: "ast-cli" - PR_GITHUB_NUMBER: 43 + PR_GITHUB_NUMBER: 983 PR_GITLAB_TOKEN : ${{ secrets.PR_GITLAB_TOKEN }} PR_GITLAB_NAMESPACE: ${{ secrets.PR_GITLAB_NAMESPACE }} PR_GITLAB_REPO_NAME: ${{ secrets.PR_GITLAB_REPO_NAME }} diff --git a/internal/commands/scan.go b/internal/commands/scan.go index 583bfef79..70e8c6654 100644 --- a/internal/commands/scan.go +++ b/internal/commands/scan.go @@ -1086,6 +1086,7 @@ func compressFolder(sourceDir, filter, userIncludeFilter, scaResolver string) (s if err != nil { return "", errors.Wrapf(err, "Cannot source code temp file.") } + defer outputFile.Close() zipWriter := zip.NewWriter(outputFile) err = addDirFiles(zipWriter, "", sourceDir, getExcludeFilters(filter), getIncludeFilters(userIncludeFilter)) if err != nil { @@ -1462,6 +1463,9 @@ func uploadZip(uploadsWrapper wrappers.UploadsWrapper, zipFilePath string, unzip var preSignedURL *string preSignedURL, zipFilePathErr = uploadsWrapper.UploadFile(zipFilePath, featureFlagsWrapper) if zipFilePathErr != nil { + if unzip || !userProvidedZip { + return "", zipFilePath, errors.Wrapf(zipFilePathErr, "%s: Failed to upload sources file\n", failedCreating) + } return "", "", errors.Wrapf(zipFilePathErr, "%s: Failed to upload sources file\n", failedCreating) } if unzip || !userProvidedZip { @@ -1616,6 +1620,7 @@ func runCreateScanCommand( featureFlagsWrapper, jwtWrapper, ) + defer cleanUpTempZip(zipFilePath) if err != nil { return errors.Errorf("%s", err) } @@ -1681,7 +1686,6 @@ func runCreateScanCommand( } } - defer cleanUpTempZip(zipFilePath) // verify break build from policy if policyResponseModel != nil && len(policyResponseModel.Policies) > 0 && policyResponseModel.BreakBuild { logger.PrintIfVerbose("Breaking the build due to policy violation") diff --git a/internal/commands/scan_test.go b/internal/commands/scan_test.go index c213904f2..6d299d035 100644 --- a/internal/commands/scan_test.go +++ b/internal/commands/scan_test.go @@ -1353,3 +1353,37 @@ func TestResubmitConfig_ProjectDoesNotExist_ReturnedEmptyConfig(t *testing.T) { assert.NilError(t, err) assert.Equal(t, len(config), 0) } + +func TestUploadZip_whenUserProvideZip_shouldReturnEmptyZipFilePathInSuccessCase(t *testing.T) { + uploadWrapper := mock.UploadsMockWrapper{} + featureFlagsWrapper := &mock.FeatureFlagsMockWrapper{} + _, zipPath, err := uploadZip(&uploadWrapper, "test.zip", false, true, featureFlagsWrapper) + assert.NilError(t, err) + assert.Equal(t, zipPath, "") +} + +func TestUploadZip_whenUserProvideZip_shouldReturnEmptyZipFilePathInFailureCase(t *testing.T) { + uploadWrapper := mock.UploadsMockWrapper{} + featureFlagsWrapper := &mock.FeatureFlagsMockWrapper{} + _, zipPath, err := uploadZip(&uploadWrapper, "failureCase.zip", false, true, featureFlagsWrapper) + assert.Assert(t, err != nil) + assert.Assert(t, strings.Contains(err.Error(), "error from UploadFile"), err.Error()) + assert.Equal(t, zipPath, "") +} + +func TestUploadZip_whenUserNotProvideZip_shouldReturnZipFilePathInSuccessCase(t *testing.T) { + uploadWrapper := mock.UploadsMockWrapper{} + featureFlagsWrapper := &mock.FeatureFlagsMockWrapper{} + _, zipPath, err := uploadZip(&uploadWrapper, "test.zip", false, false, featureFlagsWrapper) + assert.NilError(t, err) + assert.Equal(t, zipPath, "test.zip") +} + +func TestUploadZip_whenUserNotProvideZip_shouldReturnZipFilePathInFailureCase(t *testing.T) { + uploadWrapper := mock.UploadsMockWrapper{} + featureFlagsWrapper := &mock.FeatureFlagsMockWrapper{} + _, zipPath, err := uploadZip(&uploadWrapper, "failureCase.zip", false, false, featureFlagsWrapper) + assert.Assert(t, err != nil) + assert.Assert(t, strings.Contains(err.Error(), "error from UploadFile"), err.Error()) + assert.Equal(t, zipPath, "failureCase.zip") +} diff --git a/internal/wrappers/mock/uploads-mock.go b/internal/wrappers/mock/uploads-mock.go index 73d515fc8..0683e4408 100644 --- a/internal/wrappers/mock/uploads-mock.go +++ b/internal/wrappers/mock/uploads-mock.go @@ -2,6 +2,7 @@ package mock import ( "fmt" + "github.com/pkg/errors" "github.com/checkmarx/ast-cli/internal/wrappers" ) @@ -9,8 +10,11 @@ import ( type UploadsMockWrapper struct { } -func (u *UploadsMockWrapper) UploadFile(_ string, featureFlagsWrapper wrappers.FeatureFlagsWrapper) (*string, error) { +func (u *UploadsMockWrapper) UploadFile(filePath string, featureFlagsWrapper wrappers.FeatureFlagsWrapper) (*string, error) { fmt.Println("Called Create in UploadsMockWrapper") + if filePath == "failureCase.zip" { + return nil, errors.New("error from UploadFile") + } url := "/path/to/nowhere" return &url, nil }