From e70e40477a7e604da7df6b5505249fc7f80a7e24 Mon Sep 17 00:00:00 2001 From: matheusalcantarazup <84723211+matheusalcantarazup@users.noreply.github.com> Date: Mon, 22 Nov 2021 14:00:51 -0300 Subject: [PATCH] tests:chore - move Mock implementations to testutil pkg (#753) Previously each mock implementation of structs that is used by tests was implemented on your own package, which add some unnecessary testing dependencies on main packages. This commit move all mocks implementation to testutil package and change their references. Note that the `internal/utils/mock` package was also removed and their code was moved to testutil package to centralize all testing stuffs only on testutil package. Signed-off-by: Matheus Alcantara --- cmd/app/start/start_test.go | 142 +++++++++--------- config/mocks/system_calls_mock.go | 108 ------------- go.mod | 1 - go.sum | 1 - horusec-config.json | 2 +- .../controllers/analyzer/analyzer_test.go | 31 ++-- .../printresults/print_results_test.go | 19 ++- .../docker/client/docker_config_mock.go | 83 ---------- .../docker/client/docker_config_test.go | 19 +-- internal/services/docker/docker_api_mock.go | 40 ----- internal/services/docker/docker_api_test.go | 25 +-- .../formatters/c/flawfinder/formatter_test.go | 10 +- .../csharp/dotnet_cli/formatter_test.go | 12 +- .../formatters/csharp/scs/formatter_test.go | 14 +- .../default_engine_formatter_test.go | 7 +- .../elixir/mixaudit/formatter_test.go | 10 +- .../elixir/sobelow/formatter_test.go | 10 +- .../dependency_check/formatter_test.go | 12 +- .../generic/semgrep/formatter_test.go | 14 +- .../generic/trivy/formatter_test.go | 8 +- .../formatters/go/gosec/formatter_test.go | 12 +- .../formatters/go/nancy/formatter_test.go | 12 +- .../formatters/hcl/checkov/formatter_test.go | 10 +- .../formatters/hcl/tfsec/formatter_test.go | 10 +- .../javascript/npmaudit/formatter_test.go | 18 +-- .../javascript/yarnaudit/formatter_test.go | 16 +- .../leaks/gitleaks/formatter_test.go | 12 +- .../formatters/php/phpcs/formatter_test.go | 10 +- .../python/bandit/formatter_test.go | 14 +- .../python/safety/formatter_test.go | 12 +- .../ruby/brakeman/formatter_test.go | 14 +- .../formatters/ruby/bundler/formatter_test.go | 14 +- internal/services/formatters/service_test.go | 69 +++++---- .../shell/shellcheck/formatter_test.go | 14 +- .../services/horusec_api/horus_api_test.go | 3 +- internal/utils/prompt/prompt_test.go | 5 +- .../utils/{mock => testutil}/analysis_mock.go | 34 +++-- .../testutil}/analyzer_mock.go | 14 +- internal/utils/testutil/docker_mock.go | 119 +++++++++++++++ .../testutil/formatter_mock.go} | 64 ++++---- .../testutil/horusec_api_mock.go} | 12 +- .../testutil}/language_detect_mock.go | 14 +- .../testutil}/print_results_mock.go | 16 +- .../utils/{prompt => testutil}/prompt_mock.go | 18 ++- internal/utils/testutil/request_mock.go | 25 +++ .../testutil}/requirements_mock.go | 12 +- 46 files changed, 538 insertions(+), 603 deletions(-) delete mode 100644 config/mocks/system_calls_mock.go delete mode 100644 internal/services/docker/client/docker_config_mock.go delete mode 100644 internal/services/docker/docker_api_mock.go rename internal/utils/{mock => testutil}/analysis_mock.go (90%) rename internal/{controllers/analyzer => utils/testutil}/analyzer_mock.go (71%) create mode 100644 internal/utils/testutil/docker_mock.go rename internal/{services/formatters/service_mock.go => utils/testutil/formatter_mock.go} (53%) rename internal/{services/horusec_api/horus_api_mock.go => utils/testutil/horusec_api_mock.go} (78%) rename internal/{controllers/language_detect => utils/testutil}/language_detect_mock.go (68%) rename internal/{controllers/printresults => utils/testutil}/print_results_mock.go (68%) rename internal/utils/{prompt => testutil}/prompt_mock.go (63%) create mode 100644 internal/utils/testutil/request_mock.go rename internal/{controllers/requirements => utils/testutil}/requirements_mock.go (77%) diff --git a/cmd/app/start/start_test.go b/cmd/app/start/start_test.go index 2828533ed..d27b8c8db 100644 --- a/cmd/app/start/start_test.go +++ b/cmd/app/start/start_test.go @@ -28,15 +28,11 @@ import ( "github.com/google/uuid" - "github.com/ZupIT/horusec/internal/controllers/requirements" - "github.com/stretchr/testify/assert" "github.com/ZupIT/horusec/config" - "github.com/ZupIT/horusec/internal/controllers/analyzer" "github.com/ZupIT/horusec/internal/entities/workdir" "github.com/ZupIT/horusec/internal/utils/copy" - "github.com/ZupIT/horusec/internal/utils/prompt" ) var tmpPath, _ = filepath.Abs("tmp") @@ -56,14 +52,14 @@ func TestNewStartCommand(t *testing.T) { assert.IsType(t, NewStartCommand(config.New()), &Start{}) }) t.Run("Should run NewStartCommand and return have expected flags", func(t *testing.T) { - promptMock := &prompt.Mock{} + promptMock := testutil.NewPromptMock() cfg := config.New() cfg.WorkDir = &workdir.WorkDir{} - requirementsMock := &requirements.Mock{} + requirementsMock := testutil.NewRequirementsMock() - analyzerMock := &analyzer.Mock{} + analyzerMock := testutil.NewAnalyzerMock() promptMock.On("Ask").Return("Y", nil) analyzerMock.On("Analyze").Return(0, nil) requirementsMock.On("ValidateDocker") @@ -93,8 +89,8 @@ func TestNewStartCommand(t *testing.T) { } func TestStartCommand_ExecuteUnitTests(t *testing.T) { - type onFn func(*prompt.Mock, *requirements.Mock, *analyzer.Mock) - type assertFn func(*testing.T, *prompt.Mock, *requirements.Mock, *analyzer.Mock, *config.Config) + type onFn func(*testutil.PromptMock, *testutil.RequirementsMock, *testutil.AnalyzerMock) + type assertFn func(*testing.T, *testutil.PromptMock, *testutil.RequirementsMock, *testutil.AnalyzerMock, *config.Config) testcases := []struct { name string @@ -107,12 +103,12 @@ func TestStartCommand_ExecuteUnitTests(t *testing.T) { name: "Should execute command exec without error and ask to user if is to run in current directory", args: []string{}, err: false, - onFn: func(prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock) { + onFn: func(prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock) { prompt.On("Ask").Return("Y", nil) analyzer.On("Analyze").Return(0, nil) requirements.On("ValidateDocker") }, - assertFn: func(t *testing.T, prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock, cfg *config.Config) { + assertFn: func(t *testing.T, prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock, cfg *config.Config) { prompt.AssertCalled(t, "Ask") analyzer.AssertCalled(t, "Analyze") requirements.AssertCalled(t, "ValidateDocker") @@ -122,12 +118,12 @@ func TestStartCommand_ExecuteUnitTests(t *testing.T) { name: "Should execute command exec without error and not ask if is to run in current directory", args: []string{testutil.StartFlagProjectPath, testutil.RootPath}, err: false, - onFn: func(prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock) { + onFn: func(prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock) { prompt.On("Ask").Return("Y", nil) analyzer.On("Analyze").Return(0, nil) requirements.On("ValidateDocker") }, - assertFn: func(t *testing.T, prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock, cfg *config.Config) { + assertFn: func(t *testing.T, prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock, cfg *config.Config) { assert.Equal(t, testutil.RootPath, cfg.ProjectPath) prompt.AssertNotCalled(t, "Ask") @@ -140,11 +136,11 @@ func TestStartCommand_ExecuteUnitTests(t *testing.T) { name: "Should execute command exec and return error because found vulnerabilities (-p,-e)", args: []string{testutil.StartFlagProjectPath, testutil.RootPath, testutil.StartFlagReturnError}, err: true, - onFn: func(prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock) { + onFn: func(prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock) { analyzer.On("Analyze").Return(10, nil) requirements.On("ValidateDocker") }, - assertFn: func(t *testing.T, prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock, cfg *config.Config) { + assertFn: func(t *testing.T, prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock, cfg *config.Config) { assert.Equal(t, testutil.RootPath, cfg.ProjectPath) assert.True(t, cfg.ReturnErrorIfFoundVulnerability) @@ -157,11 +153,11 @@ func TestStartCommand_ExecuteUnitTests(t *testing.T) { name: "Should execute command exec and return error because found error when ask but run in current folder", args: []string{testutil.StartFlagReturnError}, err: true, - onFn: func(prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock) { + onFn: func(prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock) { analyzer.On("Analyze").Return(0, nil) prompt.On("Ask").Return("", errors.New("some error")) }, - assertFn: func(t *testing.T, prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock, cfg *config.Config) { + assertFn: func(t *testing.T, prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock, cfg *config.Config) { assert.True(t, cfg.ReturnErrorIfFoundVulnerability) prompt.AssertCalled(t, "Ask") @@ -173,14 +169,14 @@ func TestStartCommand_ExecuteUnitTests(t *testing.T) { name: "Should execute command exec without error and validate if git is installed(--enable-git-history)", args: []string{testutil.StartFlagEnableGitHistory, testutil.StartFlagReturnError}, err: false, - onFn: func(prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock) { + onFn: func(prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock) { prompt.On("Ask").Return("Y", nil) analyzer.On("Analyze").Return(0, nil) requirements.On("ValidateDocker") requirements.On("ValidateGit") }, - assertFn: func(t *testing.T, prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock, cfg *config.Config) { + assertFn: func(t *testing.T, prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock, cfg *config.Config) { assert.True(t, cfg.ReturnErrorIfFoundVulnerability) assert.True(t, cfg.EnableGitHistoryAnalysis) @@ -194,12 +190,12 @@ func TestStartCommand_ExecuteUnitTests(t *testing.T) { name: "Should execute command exec without error and not ask because is different project path(-p, -e)", args: []string{testutil.StartFlagReturnError, testutil.StartFlagProjectPath, os.TempDir()}, err: false, - onFn: func(prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock) { + onFn: func(prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock) { prompt.On("Ask").Return("Y", nil) analyzer.On("Analyze").Return(0, nil) requirements.On("ValidateDocker") }, - assertFn: func(t *testing.T, prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock, cfg *config.Config) { + assertFn: func(t *testing.T, prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock, cfg *config.Config) { assert.True(t, cfg.ReturnErrorIfFoundVulnerability) assert.Equal(t, filepath.Clean(os.TempDir()), cfg.ProjectPath) @@ -212,11 +208,11 @@ func TestStartCommand_ExecuteUnitTests(t *testing.T) { name: "Should execute command exec and return error because found not accept proceed", args: []string{testutil.StartFlagReturnError}, err: true, - onFn: func(prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock) { + onFn: func(prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock) { analyzer.On("Analyze").Return(0, nil) prompt.On("Ask").Return("N", nil) }, - assertFn: func(t *testing.T, prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock, cfg *config.Config) { + assertFn: func(t *testing.T, prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock, cfg *config.Config) { assert.True(t, cfg.ReturnErrorIfFoundVulnerability) prompt.AssertCalled(t, "Ask") @@ -228,12 +224,12 @@ func TestStartCommand_ExecuteUnitTests(t *testing.T) { name: "Should execute command exec and return error because found invalid RepositoryAuthorization field", args: []string{testutil.StartFlagProjectPath, os.TempDir(), testutil.StartFlagAuthorization, "NOT_VALID_AUTHORIZATION", testutil.StartFlagReturnError}, err: true, - onFn: func(prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock) { + onFn: func(prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock) { prompt.On("Ask").Return("Y", nil) analyzer.On("Analyze").Return(10, nil) requirements.On("ValidateDocker") }, - assertFn: func(t *testing.T, prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock, cfg *config.Config) { + assertFn: func(t *testing.T, prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock, cfg *config.Config) { assert.Equal(t, filepath.Clean(os.TempDir()), cfg.ProjectPath) assert.Equal(t, "NOT_VALID_AUTHORIZATION", cfg.RepositoryAuthorization) assert.True(t, cfg.ReturnErrorIfFoundVulnerability) @@ -247,12 +243,12 @@ func TestStartCommand_ExecuteUnitTests(t *testing.T) { name: "Should execute command exec and return success because found valid RepositoryAuthorization field(-a)", args: []string{testutil.StartFlagProjectPath, os.TempDir(), testutil.StartFlagAuthorization, "76034e43-bdb8-48d9-a0ad-fc674f0354bb", testutil.StartFlagReturnError}, err: false, - onFn: func(prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock) { + onFn: func(prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock) { prompt.On("Ask").Return("Y", nil) analyzer.On("Analyze").Return(0, nil) requirements.On("ValidateDocker") }, - assertFn: func(t *testing.T, prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock, cfg *config.Config) { + assertFn: func(t *testing.T, prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock, cfg *config.Config) { assert.Equal(t, filepath.Clean(os.TempDir()), cfg.ProjectPath) assert.Equal(t, "76034e43-bdb8-48d9-a0ad-fc674f0354bb", cfg.RepositoryAuthorization) assert.True(t, cfg.ReturnErrorIfFoundVulnerability) @@ -266,12 +262,12 @@ func TestStartCommand_ExecuteUnitTests(t *testing.T) { name: "Should execute command exec without error using json output(-o json, -O)", args: []string{testutil.StartFlagProjectPath, testutil.RootPath, testutil.StartFlagJSONOutputFilePath, filepath.Join(testutil.RootPath, "cmd", "app", "start", "tmp-json.json"), testutil.StartFlagOutputFormat, "json", testutil.StartFlagReturnError}, err: false, - onFn: func(prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock) { + onFn: func(prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock) { prompt.On("Ask").Return("Y", nil) requirements.On("ValidateDocker") analyzer.On("Analyze").Return(0, nil) }, - assertFn: func(t *testing.T, prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock, cfg *config.Config) { + assertFn: func(t *testing.T, prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock, cfg *config.Config) { assert.Equal(t, filepath.Join(testutil.RootPath, "cmd", "app", "start", "tmp-json.json"), cfg.JSONOutputFilePath) assert.Equal(t, testutil.RootPath, cfg.ProjectPath) assert.Equal(t, "json", cfg.PrintOutputType) @@ -285,12 +281,12 @@ func TestStartCommand_ExecuteUnitTests(t *testing.T) { name: "Should execute command exec with error using unknown type output(-o unknown, -O)", args: []string{testutil.StartFlagProjectPath, testutil.RootPath, testutil.StartFlagJSONOutputFilePath, filepath.Join(testutil.RootPath, "cmd", "app", "start", "tmp-unknownType.json"), testutil.StartFlagOutputFormat, "unknownTypeOutput", testutil.StartFlagReturnError}, err: true, - onFn: func(prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock) { + onFn: func(prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock) { analyzer.On("Analyze").Return(0, nil) prompt.On("Ask").Return("Y", nil) requirements.On("ValidateDocker") }, - assertFn: func(t *testing.T, prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock, cfg *config.Config) { + assertFn: func(t *testing.T, prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock, cfg *config.Config) { assert.Equal(t, testutil.RootPath, cfg.ProjectPath) assert.Equal(t, "unknownTypeOutput", cfg.PrintOutputType) assert.Equal(t, filepath.Join(testutil.RootPath, "cmd", "app", "start", "tmp-unknownType.json"), cfg.JSONOutputFilePath) @@ -304,12 +300,12 @@ func TestStartCommand_ExecuteUnitTests(t *testing.T) { name: "Should execute command exec without error using sonarqube output (-o sonarqube, -O)", args: []string{testutil.StartFlagProjectPath, testutil.RootPath, testutil.StartFlagJSONOutputFilePath, filepath.Join(tmpPath, "tmp-sonarqube.json"), testutil.StartFlagOutputFormat, "sonarqube", testutil.StartFlagReturnError}, err: false, - onFn: func(prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock) { + onFn: func(prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock) { analyzer.On("Analyze").Return(0, nil) prompt.On("Ask").Return("Y", nil) requirements.On("ValidateDocker") }, - assertFn: func(t *testing.T, prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock, cfg *config.Config) { + assertFn: func(t *testing.T, prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock, cfg *config.Config) { assert.Equal(t, testutil.RootPath, cfg.ProjectPath) assert.Equal(t, "sonarqube", cfg.PrintOutputType) assert.Equal(t, filepath.Join(tmpPath, "tmp-sonarqube.json"), cfg.JSONOutputFilePath) @@ -323,12 +319,12 @@ func TestStartCommand_ExecuteUnitTests(t *testing.T) { name: "Should execute command exec without error showing info vulnerabilities (--information-severity)", args: []string{testutil.StartFlagProjectPath, testutil.RootPath, testutil.StartFlagInformationSeverity}, err: false, - onFn: func(prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock) { + onFn: func(prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock) { prompt.On("Ask").Return("Y", nil) requirements.On("ValidateDocker") analyzer.On("Analyze").Return(0, nil) }, - assertFn: func(t *testing.T, prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock, cfg *config.Config) { + assertFn: func(t *testing.T, prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock, cfg *config.Config) { assert.Equal(t, testutil.RootPath, cfg.ProjectPath) assert.True(t, cfg.EnableInformationSeverity) @@ -341,12 +337,12 @@ func TestStartCommand_ExecuteUnitTests(t *testing.T) { name: "Should execute command exec without error sending to web application (-u,-a)", args: []string{testutil.StartFlagProjectPath, testutil.RootPath, testutil.StartFlagHorusecURL, "https://google.com", testutil.StartFlagAuthorization, "76034e43-bdb8-48d9-a0ad-fc674f0354bb"}, err: false, - onFn: func(prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock) { + onFn: func(prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock) { analyzer.On("Analyze").Return(0, nil) prompt.On("Ask").Return("Y", nil) requirements.On("ValidateDocker") }, - assertFn: func(t *testing.T, prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock, cfg *config.Config) { + assertFn: func(t *testing.T, prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock, cfg *config.Config) { t.Run("Should execute command exec without error sending to web application (-u,-a)", func(t *testing.T) { assert.Equal(t, "https://google.com", cfg.HorusecAPIUri) assert.Equal(t, "76034e43-bdb8-48d9-a0ad-fc674f0354bb", cfg.RepositoryAuthorization) @@ -361,12 +357,12 @@ func TestStartCommand_ExecuteUnitTests(t *testing.T) { name: "Should execute command exec with error sending to a invalid url web application (-u,-a)", args: []string{testutil.StartFlagProjectPath, testutil.RootPath, testutil.StartFlagHorusecURL, "*vsaf&&", testutil.StartFlagAuthorization, "76034e43-bdb8-48d9-a0ad-fc674f0354bb"}, err: true, - onFn: func(prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock) { + onFn: func(prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock) { analyzer.On("Analyze").Return(0, nil) prompt.On("Ask").Return("Y", nil) requirements.On("ValidateDocker") }, - assertFn: func(t *testing.T, prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock, cfg *config.Config) { + assertFn: func(t *testing.T, prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock, cfg *config.Config) { assert.Equal(t, "*vsaf&&", cfg.HorusecAPIUri) assert.Equal(t, "76034e43-bdb8-48d9-a0ad-fc674f0354bb", cfg.RepositoryAuthorization) @@ -379,13 +375,13 @@ func TestStartCommand_ExecuteUnitTests(t *testing.T) { name: "Should execute command exec without error and return vulnerabilities but ignore vulnerabilities of type HIGH (-s)", args: []string{testutil.StartFlagProjectPath, testutil.RootPath, testutil.StartFlagIgnoreSeverity, "CRITICAL, LOW"}, err: false, - onFn: func(prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock) { + onFn: func(prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock) { analyzer.On("Analyze").Return(0, nil) prompt.On("Ask").Return("Y", nil) requirements.On("ValidateDocker") }, - assertFn: func(t *testing.T, prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock, cfg *config.Config) { + assertFn: func(t *testing.T, prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock, cfg *config.Config) { assert.Equal(t, testutil.RootPath, cfg.ProjectPath) assert.Equal(t, []string{"CRITICAL", "LOW"}, cfg.SeveritiesToIgnore) @@ -398,12 +394,12 @@ func TestStartCommand_ExecuteUnitTests(t *testing.T) { name: "Should execute command exec with error and not return vulnerabilities when set to ignore unknown type of vulnerability (-s)", args: []string{testutil.StartFlagProjectPath, testutil.RootPath, testutil.StartFlagIgnoreSeverity, "potato, shoes"}, err: true, - onFn: func(prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock) { + onFn: func(prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock) { analyzer.On("Analyze").Return(0, nil) prompt.On("Ask").Return("Y", nil) requirements.On("ValidateDocker") }, - assertFn: func(t *testing.T, prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock, cfg *config.Config) { + assertFn: func(t *testing.T, prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock, cfg *config.Config) { assert.Equal(t, testutil.RootPath, cfg.ProjectPath) assert.Equal(t, []string{"potato", " shoes"}, cfg.SeveritiesToIgnore) @@ -416,12 +412,12 @@ func TestStartCommand_ExecuteUnitTests(t *testing.T) { name: "Should execute command exec without error and not return vulnerabilities when set valid certificate path (-C --certificate-path)", args: []string{testutil.StartFlagProjectPath, testutil.RootPath, testutil.StartFlagCertificatePath, filepath.Join(testutil.RootPath, "..")}, err: false, - onFn: func(prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock) { + onFn: func(prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock) { analyzer.On("Analyze").Return(0, nil) prompt.On("Ask").Return("Y", nil) requirements.On("ValidateDocker") }, - assertFn: func(t *testing.T, prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock, cfg *config.Config) { + assertFn: func(t *testing.T, prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock, cfg *config.Config) { assert.Equal(t, testutil.RootPath, cfg.ProjectPath) assert.Equal(t, filepath.Join(testutil.RootPath, ".."), cfg.CertPath) @@ -434,12 +430,12 @@ func TestStartCommand_ExecuteUnitTests(t *testing.T) { name: "Should execute command exec with error and not return vulnerabilities when set invalid certificate path (-C --certificate-path)", args: []string{testutil.StartFlagProjectPath, testutil.RootPath, testutil.StartFlagCertificatePath, "invalidPath"}, err: true, - onFn: func(prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock) { + onFn: func(prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock) { analyzer.On("Analyze").Return(0, nil) prompt.On("Ask").Return("Y", nil) requirements.On("ValidateDocker") }, - assertFn: func(t *testing.T, prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock, cfg *config.Config) { + assertFn: func(t *testing.T, prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock, cfg *config.Config) { assert.Equal(t, testutil.RootPath, cfg.ProjectPath) assert.Equal(t, "invalidPath", cfg.CertPath) @@ -452,12 +448,12 @@ func TestStartCommand_ExecuteUnitTests(t *testing.T) { name: "Should execute command exec without error and not return vulnerabilities when set valid analysis timeout (-t --analysis-timeout)\"", args: []string{testutil.StartFlagProjectPath, testutil.RootPath, testutil.StartFlagAnalysisTimeout, "123"}, err: false, - onFn: func(prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock) { + onFn: func(prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock) { analyzer.On("Analyze").Return(0, nil) prompt.On("Ask").Return("Y", nil) requirements.On("ValidateDocker") }, - assertFn: func(t *testing.T, prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock, cfg *config.Config) { + assertFn: func(t *testing.T, prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock, cfg *config.Config) { assert.Equal(t, testutil.RootPath, cfg.ProjectPath) assert.Equal(t, int64(123), cfg.TimeoutInSecondsAnalysis) @@ -470,12 +466,12 @@ func TestStartCommand_ExecuteUnitTests(t *testing.T) { name: "Should execute command exec with error and not return vulnerabilities when set invalid analysis timeout (-t --analysis-timeout)", args: []string{testutil.StartFlagProjectPath, testutil.RootPath, testutil.StartFlagAnalysisTimeout, "potato"}, err: true, - onFn: func(prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock) { + onFn: func(prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock) { analyzer.On("Analyze").Return(0, nil) prompt.On("Ask").Return("Y", nil) requirements.On("ValidateDocker") }, - assertFn: func(t *testing.T, prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock, cfg *config.Config) { + assertFn: func(t *testing.T, prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock, cfg *config.Config) { assert.NotEqual(t, "potato", cfg.TimeoutInSecondsAnalysis) prompt.AssertNotCalled(t, "Ask") @@ -487,12 +483,12 @@ func TestStartCommand_ExecuteUnitTests(t *testing.T) { name: "Should execute command exec without error and not return vulnerabilities when set disable docker (-D --disable-docker)", args: []string{testutil.StartFlagDisableDocker}, err: false, - onFn: func(prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock) { + onFn: func(prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock) { analyzer.On("Analyze").Return(0, nil) prompt.On("Ask").Return("Y", nil) requirements.On("ValidateDocker") }, - assertFn: func(t *testing.T, prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock, cfg *config.Config) { + assertFn: func(t *testing.T, prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock, cfg *config.Config) { assert.True(t, cfg.DisableDocker) prompt.AssertCalled(t, "Ask") @@ -504,12 +500,12 @@ func TestStartCommand_ExecuteUnitTests(t *testing.T) { name: "Should execute command exec without error and not return vulnerabilities when set valid request timeout (-r --request-timeout)", args: []string{testutil.StartFlagRequestTimeout, "123"}, err: false, - onFn: func(prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock) { + onFn: func(prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock) { analyzer.On("Analyze").Return(0, nil) prompt.On("Ask").Return("Y", nil) requirements.On("ValidateDocker") }, - assertFn: func(t *testing.T, prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock, cfg *config.Config) { + assertFn: func(t *testing.T, prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock, cfg *config.Config) { assert.Equal(t, int64(123), cfg.TimeoutInSecondsRequest) prompt.AssertCalled(t, "Ask") @@ -521,12 +517,12 @@ func TestStartCommand_ExecuteUnitTests(t *testing.T) { name: "Should execute command exec with error and not return vulnerabilities when set invalid request timeout (-r --request-timeout)", args: []string{testutil.StartFlagRequestTimeout, "potato"}, err: true, - onFn: func(prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock) { + onFn: func(prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock) { analyzer.On("Analyze").Return(0, nil) prompt.On("Ask").Return("Y", nil) requirements.On("ValidateDocker") }, - assertFn: func(t *testing.T, prompt *prompt.Mock, requirements *requirements.Mock, analyzer *analyzer.Mock, cfg *config.Config) { + assertFn: func(t *testing.T, prompt *testutil.PromptMock, requirements *testutil.RequirementsMock, analyzer *testutil.AnalyzerMock, cfg *config.Config) { assert.NotEqual(t, "potato", cfg.TimeoutInSecondsRequest) prompt.AssertNotCalled(t, "Ask") @@ -558,13 +554,13 @@ func TestStartCommand_ExecuteIntegrationTest(t *testing.T) { t.Skip("skipping integration test") } t.Run("Should execute command exec without error using json output", func(t *testing.T) { - promptMock := &prompt.Mock{} + promptMock := testutil.NewPromptMock() promptMock.On("Ask").Return("Y", nil) cfg := config.New() cfg.WorkDir = &workdir.WorkDir{} - requirementsMock := &requirements.Mock{} + requirementsMock := testutil.NewRequirementsMock() requirementsMock.On("ValidateDocker") cmd := &Start{ @@ -616,13 +612,13 @@ func TestStartCommand_ExecuteIntegrationTest(t *testing.T) { assert.NoError(t, os.RemoveAll(outputPathJSON)) }) t.Run("Should execute command exec without error showing info vulnerabilities", func(t *testing.T) { - promptMock := &prompt.Mock{} + promptMock := testutil.NewPromptMock() promptMock.On("Ask").Return("Y", nil) cfg := config.New() cfg.WorkDir = &workdir.WorkDir{} - requirementsMock := &requirements.Mock{} + requirementsMock := testutil.NewRequirementsMock() requirementsMock.On("ValidateDocker") cmd := &Start{ @@ -662,13 +658,13 @@ func TestStartCommand_ExecuteIntegrationTest(t *testing.T) { promptMock.AssertNotCalled(t, "Ask") }) t.Run("Should execute command exec without error sending to web application", func(t *testing.T) { - promptMock := &prompt.Mock{} + promptMock := testutil.NewPromptMock() promptMock.On("Ask").Return("Y", nil) cfg := config.New() cfg.WorkDir = &workdir.WorkDir{} - requirementsMock := &requirements.Mock{} + requirementsMock := testutil.NewRequirementsMock() requirementsMock.On("ValidateDocker") cmd := &Start{ @@ -707,13 +703,13 @@ func TestStartCommand_ExecuteIntegrationTest(t *testing.T) { promptMock.AssertNotCalled(t, "Ask") }) t.Run("Should execute command exec without error using sonarqube output", func(t *testing.T) { - promptMock := &prompt.Mock{} + promptMock := testutil.NewPromptMock() promptMock.On("Ask").Return("Y", nil) cfg := config.New() cfg.WorkDir = &workdir.WorkDir{} - requirementsMock := &requirements.Mock{} + requirementsMock := testutil.NewRequirementsMock() requirementsMock.On("ValidateDocker") cmd := &Start{ @@ -766,14 +762,14 @@ func TestStartCommand_ExecuteIntegrationTest(t *testing.T) { assert.NoError(t, copy.Copy(srcProject, dstProject, func(src string) bool { return false })) - promptMock := &prompt.Mock{} + promptMock := testutil.NewPromptMock() promptMock.On("Ask").Return("Y", nil) cfg := config.New() cfg.ConfigFilePath = "./not-exists.json" cfg.WorkDir = &workdir.WorkDir{} - requirementsMock := &requirements.Mock{} + requirementsMock := testutil.NewRequirementsMock() requirementsMock.On("ValidateDocker") cmd := &Start{ @@ -821,13 +817,13 @@ func TestStartCommand_ExecuteIntegrationTest(t *testing.T) { assert.NoError(t, copy.Copy(srcProject, dstProject, func(src string) bool { return false })) - promptMock := &prompt.Mock{} + promptMock := testutil.NewPromptMock() promptMock.On("Ask").Return("Y", nil) cfg := config.New() cfg.WorkDir = &workdir.WorkDir{} - requirementMock := &requirements.Mock{} + requirementMock := testutil.NewRequirementsMock() requirementMock.On("ValidateDocker") cmd := &Start{ @@ -868,15 +864,15 @@ func TestStartCommand_ExecuteIntegrationTest(t *testing.T) { assert.NoError(t, os.RemoveAll(dstProject)) }) } -func getMocksAndStartStruct() (*prompt.Mock, *config.Config, *requirements.Mock, *analyzer.Mock, *Start) { - promptMock := &prompt.Mock{} +func getMocksAndStartStruct() (*testutil.PromptMock, *config.Config, *testutil.RequirementsMock, *testutil.AnalyzerMock, *Start) { + promptMock := testutil.NewPromptMock() cfg := config.New() cfg.WorkDir = &workdir.WorkDir{} - requirementsMock := &requirements.Mock{} + requirementsMock := testutil.NewRequirementsMock() - analyzerMock := &analyzer.Mock{} + analyzerMock := testutil.NewAnalyzerMock() start := &Start{ configs: cfg, diff --git a/config/mocks/system_calls_mock.go b/config/mocks/system_calls_mock.go deleted file mode 100644 index 01e75901b..000000000 --- a/config/mocks/system_calls_mock.go +++ /dev/null @@ -1,108 +0,0 @@ -// Code generated by MockGen. DO NOT EDIT. -// Source: ./config/system_calls.go - -// Package mock_config is a generated GoMock package. -package mock_config - -import ( - os "os" - reflect "reflect" - - gomock "github.com/golang/mock/gomock" -) - -// MockISystemCalls is a mock of ISystemCalls interface. -type MockISystemCalls struct { - ctrl *gomock.Controller - recorder *MockISystemCallsMockRecorder -} - -// MockISystemCallsMockRecorder is the mock recorder for MockISystemCalls. -type MockISystemCallsMockRecorder struct { - mock *MockISystemCalls -} - -// NewMockISystemCalls creates a new mock instance. -func NewMockISystemCalls(ctrl *gomock.Controller) *MockISystemCalls { - mock := &MockISystemCalls{ctrl: ctrl} - mock.recorder = &MockISystemCallsMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockISystemCalls) EXPECT() *MockISystemCallsMockRecorder { - return m.recorder -} - -// Create mocks base method. -func (m *MockISystemCalls) Create(name string) (*os.File, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Create", name) - ret0, _ := ret[0].(*os.File) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// Create indicates an expected call of Create. -func (mr *MockISystemCallsMockRecorder) Create(name interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockISystemCalls)(nil).Create), name) -} - -// Getwd mocks base method. -func (m *MockISystemCalls) Getwd() (string, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Getwd") - ret0, _ := ret[0].(string) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// Getwd indicates an expected call of Getwd. -func (mr *MockISystemCallsMockRecorder) Getwd() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Getwd", reflect.TypeOf((*MockISystemCalls)(nil).Getwd)) -} - -// IsNotExist mocks base method. -func (m *MockISystemCalls) IsNotExist(err error) bool { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "IsNotExist", err) - ret0, _ := ret[0].(bool) - return ret0 -} - -// IsNotExist indicates an expected call of IsNotExist. -func (mr *MockISystemCallsMockRecorder) IsNotExist(err interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsNotExist", reflect.TypeOf((*MockISystemCalls)(nil).IsNotExist), err) -} - -// MkdirAll mocks base method. -func (m *MockISystemCalls) MkdirAll(path string, perm os.FileMode) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MkdirAll", path, perm) - ret0, _ := ret[0].(error) - return ret0 -} - -// MkdirAll indicates an expected call of MkdirAll. -func (mr *MockISystemCallsMockRecorder) MkdirAll(path, perm interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MkdirAll", reflect.TypeOf((*MockISystemCalls)(nil).MkdirAll), path, perm) -} - -// Stat mocks base method. -func (m *MockISystemCalls) Stat(name string) (os.FileInfo, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Stat", name) - ret0, _ := ret[0].(os.FileInfo) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// Stat indicates an expected call of Stat. -func (mr *MockISystemCallsMockRecorder) Stat(name interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Stat", reflect.TypeOf((*MockISystemCalls)(nil).Stat), name) -} diff --git a/go.mod b/go.mod index 0181a8429..9b0767643 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,6 @@ require ( github.com/go-enry/go-enry/v2 v2.7.2 github.com/go-ozzo/ozzo-validation/v4 v4.3.0 github.com/gocarina/gocsv v0.0.0-20210516172204-ca9e8a8ddea8 - github.com/golang/mock v1.6.0 github.com/google/uuid v1.3.0 github.com/iancoleman/strcase v0.2.0 github.com/manifoldco/promptui v0.9.0 diff --git a/go.sum b/go.sum index a3deca2ca..fe05ad416 100644 --- a/go.sum +++ b/go.sum @@ -424,7 +424,6 @@ github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= diff --git a/horusec-config.json b/horusec-config.json index 9f3833a36..704f09262 100644 --- a/horusec-config.json +++ b/horusec-config.json @@ -28,7 +28,7 @@ "**/examples/**", "**/*.toml", "**/*_test.go", - "**/*_mock.go", + "**/testutil/**", "**/*README.md", "**/cmd/app/start/analysis/**", "**/tmp/**", diff --git a/internal/controllers/analyzer/analyzer_test.go b/internal/controllers/analyzer/analyzer_test.go index c7a4eb12f..6d9eead23 100644 --- a/internal/controllers/analyzer/analyzer_test.go +++ b/internal/controllers/analyzer/analyzer_test.go @@ -34,8 +34,6 @@ import ( "github.com/ZupIT/horusec-devkit/pkg/entities/vulnerability" vulnerabilityenum "github.com/ZupIT/horusec-devkit/pkg/enums/vulnerability" "github.com/ZupIT/horusec-devkit/pkg/utils/logger" - horusecAPI "github.com/ZupIT/horusec/internal/services/horusec_api" - "github.com/ZupIT/horusec/internal/utils/mock" vulnhash "github.com/ZupIT/horusec/internal/utils/vuln_hash" "github.com/ZupIT/horusec/internal/entities/workdir" @@ -48,10 +46,7 @@ import ( "github.com/ZupIT/horusec-devkit/pkg/enums/languages" "github.com/ZupIT/horusec/config" - languageDetect "github.com/ZupIT/horusec/internal/controllers/language_detect" - "github.com/ZupIT/horusec/internal/controllers/printresults" "github.com/ZupIT/horusec/internal/services/docker" - dockerClient "github.com/ZupIT/horusec/internal/services/docker/client" "github.com/ZupIT/horusec/internal/services/formatters" ) @@ -205,7 +200,7 @@ func TestAnalyzer_AnalysisDirectory(t *testing.T) { configs.EnableGitHistoryAnalysis = true configs.FalsePositiveHashes = []string{"test"} - languageDetectMock := &languageDetect.Mock{} + languageDetectMock := testutil.NewLanguageDetectMock() languageDetectMock.On("LanguageDetect").Return([]languages.Language{ languages.Go, languages.CSharp, @@ -222,15 +217,15 @@ func TestAnalyzer_AnalysisDirectory(t *testing.T) { languages.Yaml, }, nil) - printResultMock := &printresults.Mock{} + printResultMock := testutil.NewPrintResultsMock() printResultMock.On("StartPrintResults").Return(0, nil) printResultMock.On("SetAnalysis") - horusecAPIMock := &horusecAPI.Mock{} + horusecAPIMock := testutil.NewHorusecAPIMock() horusecAPIMock.On("SendAnalysis").Return(nil) horusecAPIMock.On("GetAnalysis").Return(&entitiesAnalysis.Analysis{}, nil) - dockerMocker := &dockerClient.Mock{} + dockerMocker := testutil.NewDockerClientMock() dockerMocker.On("CreateLanguageAnalysisContainer").Return("", nil) dockerMocker.On("ImageList").Return([]types.ImageSummary{{}}, nil) dockerMocker.On("ImagePull").Return(io.NopCloser(bytes.NewReader([]byte(""))), nil) @@ -263,7 +258,7 @@ func TestAnalyzer_AnalysisDirectory(t *testing.T) { configs.WorkDir = &workdir.WorkDir{Go: []string{"test"}} configs.FalsePositiveHashes = []string{"test"} - languageDetectMock := &languageDetect.Mock{} + languageDetectMock := testutil.NewLanguageDetectMock() languageDetectMock.On("LanguageDetect").Return([]languages.Language{ languages.Go, languages.CSharp, @@ -280,15 +275,15 @@ func TestAnalyzer_AnalysisDirectory(t *testing.T) { languages.Yaml, }, nil) - printResultMock := &printresults.Mock{} + printResultMock := testutil.NewPrintResultsMock() printResultMock.On("StartPrintResults").Return(0, nil) printResultMock.On("SetAnalysis") - horusecAPIMock := &horusecAPI.Mock{} + horusecAPIMock := testutil.NewHorusecAPIMock() horusecAPIMock.On("SendAnalysis").Return(nil) - horusecAPIMock.On("GetAnalysis").Return(mock.CreateAnalysisMock(), nil) + horusecAPIMock.On("GetAnalysis").Return(testutil.CreateAnalysisMock(), nil) - dockerMocker := &dockerClient.Mock{} + dockerMocker := testutil.NewDockerClientMock() dockerMocker.On("CreateLanguageAnalysisContainer").Return("", nil) dockerMocker.On("ImageList").Return([]types.ImageSummary{{}}, nil) dockerMocker.On("ImagePull").Return(io.NopCloser(bytes.NewReader([]byte(""))), nil) @@ -320,18 +315,18 @@ func TestAnalyzer_AnalysisDirectory(t *testing.T) { configs := config.New() configs.WorkDir = &workdir.WorkDir{} - languageDetectMock := &languageDetect.Mock{} + languageDetectMock := testutil.NewLanguageDetectMock() languageDetectMock.On("LanguageDetect").Return([]languages.Language{}, errors.New("test")) - printResultMock := &printresults.Mock{} + printResultMock := testutil.NewPrintResultsMock() printResultMock.On("StartPrintResults").Return(0, nil) printResultMock.On("SetAnalysis") - horusecAPIMock := &horusecAPI.Mock{} + horusecAPIMock := testutil.NewHorusecAPIMock() horusecAPIMock.On("SendAnalysis").Return(nil) horusecAPIMock.On("GetAnalysis").Return(&entitiesAnalysis.Analysis{}, nil) - dockerMocker := &dockerClient.Mock{} + dockerMocker := testutil.NewDockerClientMock() dockerMocker.On("CreateLanguageAnalysisContainer").Return("", nil) dockerMocker.On("ImageList").Return([]types.ImageSummary{{}}, nil) dockerMocker.On("ImagePull").Return(io.NopCloser(bytes.NewReader([]byte(""))), nil) diff --git a/internal/controllers/printresults/print_results_test.go b/internal/controllers/printresults/print_results_test.go index 973c953b3..6d36f68f9 100644 --- a/internal/controllers/printresults/print_results_test.go +++ b/internal/controllers/printresults/print_results_test.go @@ -35,7 +35,6 @@ import ( "github.com/ZupIT/horusec-devkit/pkg/utils/logger" "github.com/ZupIT/horusec/internal/enums/outputtype" "github.com/ZupIT/horusec/internal/helpers/messages" - "github.com/ZupIT/horusec/internal/utils/mock" "github.com/ZupIT/horusec/internal/utils/testutil" "github.com/stretchr/testify/assert" @@ -58,7 +57,7 @@ type testcase struct { func TestStartPrintResultsMock(t *testing.T) { t.Run("Should return correctly mock", func(t *testing.T) { - m := &Mock{} + m := testutil.NewPrintResultsMock() m.On("StartPrintResults").Return(0, nil) totalVulns, err := m.Print() @@ -122,7 +121,7 @@ func TestPrintResultsStartPrintResults(t *testing.T) { JSONOutputFilePath: filepath.Join(t.TempDir(), "sonar-output.json"), }, }, - analysis: *mock.CreateAnalysisMock(), + analysis: *testutil.CreateAnalysisMock(), outputs: []string{messages.MsgInfoStartGenerateSonarQubeFile}, validateFn: func(t *testing.T, tt testcase) { assert.FileExists(t, tt.cfg.JSONOutputFilePath) @@ -147,7 +146,7 @@ func TestPrintResultsStartPrintResults(t *testing.T) { PrintOutputType: outputtype.JSON, }, }, - analysis: *mock.CreateAnalysisMock(), + analysis: *testutil.CreateAnalysisMock(), err: true, outputs: []string{messages.MsgErrorGenerateJSONFile}, }, @@ -158,14 +157,14 @@ func TestPrintResultsStartPrintResults(t *testing.T) { IsTimeout: true, }, }, - analysis: *mock.CreateAnalysisMock(), + analysis: *testutil.CreateAnalysisMock(), vulnerabilities: 11, outputs: []string{messages.MsgWarnTimeoutOccurs}, }, { name: "Should print 11 vulnerabilities", cfg: config.Config{}, - analysis: *mock.CreateAnalysisMock(), + analysis: *testutil.CreateAnalysisMock(), vulnerabilities: 11, }, { @@ -175,7 +174,7 @@ func TestPrintResultsStartPrintResults(t *testing.T) { EnableCommitAuthor: true, }, }, - analysis: *mock.CreateAnalysisMock(), + analysis: *testutil.CreateAnalysisMock(), vulnerabilities: 11, outputs: []string{ "Commit Author", "Commit Date", "Commit Email", "Commit CommitHash", "Commit Message", @@ -188,7 +187,7 @@ func TestPrintResultsStartPrintResults(t *testing.T) { SeveritiesToIgnore: []string{"MEDIUM", "LOW"}, }, }, - analysis: *mock.CreateAnalysisMock(), + analysis: *testutil.CreateAnalysisMock(), vulnerabilities: 3, }, { @@ -199,7 +198,7 @@ func TestPrintResultsStartPrintResults(t *testing.T) { JSONOutputFilePath: filepath.Join(t.TempDir(), "output"), }, }, - analysis: *mock.CreateAnalysisMock(), + analysis: *testutil.CreateAnalysisMock(), vulnerabilities: 11, validateFn: func(t *testing.T, tt testcase) { assert.FileExists(t, tt.cfg.JSONOutputFilePath, "output") @@ -219,7 +218,7 @@ func TestPrintResultsStartPrintResults(t *testing.T) { ProjectPath: testutil.JavaScriptExample1, }, }, - analysis: *mock.CreateAnalysisMock(), + analysis: *testutil.CreateAnalysisMock(), vulnerabilities: 11, outputs: []string{ fmt.Sprintf("File: %s", filepath.Join(os.TempDir(), "cert.pem")), diff --git a/internal/services/docker/client/docker_config_mock.go b/internal/services/docker/client/docker_config_mock.go deleted file mode 100644 index b28d24b70..000000000 --- a/internal/services/docker/client/docker_config_mock.go +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2020 ZUP IT SERVICOS EM TECNOLOGIA E INOVACAO SA -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package client - -import ( - "io" - - networktypes "github.com/docker/docker/api/types/network" - - utilsMock "github.com/ZupIT/horusec-devkit/pkg/utils/mock" - - "context" - - "github.com/docker/docker/api/types" - containertypes "github.com/docker/docker/api/types/container" - specs "github.com/opencontainers/image-spec/specs-go/v1" - "github.com/stretchr/testify/mock" -) - -type Mock struct { - mock.Mock -} - -func (m *Mock) ContainerCreate(_ context.Context, _ *containertypes.Config, _ *containertypes.HostConfig, - _ *networktypes.NetworkingConfig, _ *specs.Platform, _ string) (containertypes.ContainerCreateCreatedBody, error) { - args := m.MethodCalled("ContainerCreate") - return args.Get(0).(containertypes.ContainerCreateCreatedBody), utilsMock.ReturnNilOrError(args, 1) -} -func (m *Mock) ContainerStart(_ context.Context, _ string, _ types.ContainerStartOptions) error { - args := m.MethodCalled("ContainerStart") - return utilsMock.ReturnNilOrError(args, 0) -} -func (m *Mock) ContainerList(_ context.Context, _ types.ContainerListOptions) ([]types.Container, error) { - args := m.MethodCalled("ContainerList") - return args.Get(0).([]types.Container), utilsMock.ReturnNilOrError(args, 1) -} - -func (m *Mock) ContainerWait(_ context.Context, _ string, _ containertypes.WaitCondition) ( - <-chan containertypes.ContainerWaitOKBody, <-chan error) { - args := m.MethodCalled("ContainerWait") - agr1 := make(chan containertypes.ContainerWaitOKBody) - agr2 := make(chan error) - go func() { - agr1 <- args.Get(0).(containertypes.ContainerWaitOKBody) - }() - go func() { - agr2 <- utilsMock.ReturnNilOrError(args, 1) - }() - return agr1, agr2 -} - -func (m *Mock) ContainerLogs(_ context.Context, _ string, _ types.ContainerLogsOptions) (io.ReadCloser, error) { - args := m.MethodCalled("ContainerLogs") - return args.Get(0).(io.ReadCloser), utilsMock.ReturnNilOrError(args, 1) -} -func (m *Mock) ContainerRemove(_ context.Context, _ string, _ types.ContainerRemoveOptions) error { - args := m.MethodCalled("ContainerRemove") - return utilsMock.ReturnNilOrError(args, 0) -} -func (m *Mock) ImageList(_ context.Context, _ types.ImageListOptions) ([]types.ImageSummary, error) { - args := m.MethodCalled("ImageList") - return args.Get(0).([]types.ImageSummary), utilsMock.ReturnNilOrError(args, 1) -} -func (m *Mock) ImagePull(_ context.Context, _ string, _ types.ImagePullOptions) (io.ReadCloser, error) { - args := m.MethodCalled("ImagePull") - return args.Get(0).(io.ReadCloser), utilsMock.ReturnNilOrError(args, 1) -} -func (m *Mock) Ping(_ context.Context) (types.Ping, error) { - args := m.MethodCalled("Ping") - return args.Get(0).(types.Ping), utilsMock.ReturnNilOrError(args, 1) -} diff --git a/internal/services/docker/client/docker_config_test.go b/internal/services/docker/client/docker_config_test.go index 6eaa27576..2974a9a72 100644 --- a/internal/services/docker/client/docker_config_test.go +++ b/internal/services/docker/client/docker_config_test.go @@ -20,6 +20,7 @@ import ( "strings" "testing" + "github.com/ZupIT/horusec/internal/utils/testutil" dockerTypes "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" "github.com/stretchr/testify/assert" @@ -44,56 +45,56 @@ func TestNewDockerAPI(t *testing.T) { func TestMock(t *testing.T) { t.Run("Should return expected data to ContainerCreate", func(t *testing.T) { - m := &Mock{} + m := testutil.NewDockerClientMock() m.On("ContainerCreate").Return(container.ContainerCreateCreatedBody{}, nil) _, err := m.ContainerCreate(nil, nil, nil, nil, nil, "") assert.NoError(t, err) }) t.Run("Should return expected data to ContainerStart", func(t *testing.T) { - m := &Mock{} + m := testutil.NewDockerClientMock() m.On("ContainerStart").Return(nil) err := m.ContainerStart(nil, "", dockerTypes.ContainerStartOptions{}) assert.NoError(t, err) }) t.Run("Should return expected data to ContainerWait", func(t *testing.T) { - m := &Mock{} + m := testutil.NewDockerClientMock() m.On("ContainerWait").Return(container.ContainerWaitOKBody{}, nil) _, err := m.ContainerWait(nil, "", "") assert.NoError(t, <-err) }) t.Run("Should return expected data to ContainerLogs", func(t *testing.T) { - m := &Mock{} + m := testutil.NewDockerClientMock() m.On("ContainerLogs").Return(io.NopCloser(strings.NewReader("some text")), nil) _, err := m.ContainerLogs(nil, "", dockerTypes.ContainerLogsOptions{}) assert.NoError(t, err) }) t.Run("Should return expected data to ContainerRemove", func(t *testing.T) { - m := &Mock{} + m := testutil.NewDockerClientMock() m.On("ContainerRemove").Return(nil) err := m.ContainerRemove(nil, "", dockerTypes.ContainerRemoveOptions{}) assert.NoError(t, err) }) t.Run("Should return expected data to ImageList", func(t *testing.T) { - m := &Mock{} + m := testutil.NewDockerClientMock() m.On("ImageList").Return([]dockerTypes.ImageSummary{}, nil) _, err := m.ImageList(nil, dockerTypes.ImageListOptions{}) assert.NoError(t, err) }) t.Run("Should return expected data to ImagePull", func(t *testing.T) { - m := &Mock{} + m := testutil.NewDockerClientMock() m.On("ImagePull").Return(io.NopCloser(strings.NewReader("some text")), nil) _, err := m.ImagePull(nil, "", dockerTypes.ImagePullOptions{}) assert.NoError(t, err) }) t.Run("Should return expected data to Ping", func(t *testing.T) { - m := &Mock{} + m := testutil.NewDockerClientMock() m.On("Ping").Return(dockerTypes.Ping{}, nil) _, err := m.Ping(nil) assert.NoError(t, err) }) t.Run("Should return expected data to Ping", func(t *testing.T) { - m := &Mock{} + m := testutil.NewDockerClientMock() m.On("ContainerList").Return([]dockerTypes.Container{}, nil) _, err := m.ContainerList(nil, dockerTypes.ContainerListOptions{}) assert.NoError(t, err) diff --git a/internal/services/docker/docker_api_mock.go b/internal/services/docker/docker_api_mock.go deleted file mode 100644 index c9cb47f59..000000000 --- a/internal/services/docker/docker_api_mock.go +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2020 ZUP IT SERVICOS EM TECNOLOGIA E INOVACAO SA -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package docker - -import ( - "github.com/stretchr/testify/mock" - - utilsMock "github.com/ZupIT/horusec-devkit/pkg/utils/mock" - dockerEntities "github.com/ZupIT/horusec/internal/entities/docker" -) - -type Mock struct { - mock.Mock -} - -func (m *Mock) CreateLanguageAnalysisContainer(_ *dockerEntities.AnalysisData) (containerOutPut string, err error) { - args := m.MethodCalled("CreateLanguageAnalysisContainer") - return args.Get(0).(string), utilsMock.ReturnNilOrError(args, 1) -} - -func (m *Mock) DeleteContainersFromAPI() { - m.MethodCalled("DeleteContainerFromAPI") -} - -func (m *Mock) PullImage(_ string) error { - args := m.MethodCalled("PullImage") - return utilsMock.ReturnNilOrError(args, 0) -} diff --git a/internal/services/docker/docker_api_test.go b/internal/services/docker/docker_api_test.go index 652d64095..e010ada51 100644 --- a/internal/services/docker/docker_api_test.go +++ b/internal/services/docker/docker_api_test.go @@ -29,6 +29,7 @@ import ( "github.com/stretchr/testify/assert" errorsenum "github.com/ZupIT/horusec/internal/enums/errors" + "github.com/ZupIT/horusec/internal/utils/testutil" cliConfig "github.com/ZupIT/horusec/config" dockerEntities "github.com/ZupIT/horusec/internal/entities/docker" @@ -109,7 +110,7 @@ func TestDockerAPI_CreateLanguageAnalysisContainer(t *testing.T) { }) t.Run("Should return error when list image to check if exist", func(t *testing.T) { - dockerAPIClient := &client.Mock{} + dockerAPIClient := testutil.NewDockerClientMock() dockerAPIClient.On("ImageList").Return([]types.ImageSummary{}, ErrGeneric) api := New(dockerAPIClient, &cliConfig.Config{}, uuid.New()) @@ -120,7 +121,7 @@ func TestDockerAPI_CreateLanguageAnalysisContainer(t *testing.T) { }) t.Run("Should return error when pull new image", func(t *testing.T) { - dockerAPIClient := &client.Mock{} + dockerAPIClient := testutil.NewDockerClientMock() dockerAPIClient.On("ImageList").Return([]types.ImageSummary{}, nil) dockerAPIClient.On("ImagePull").Return(io.NopCloser(bytes.NewReader([]byte("Some data"))), ErrGeneric) @@ -136,7 +137,7 @@ func TestDockerAPI_CreateLanguageAnalysisContainer(t *testing.T) { _ = os.Setenv("HORUSEC_DOCKER_API_IMAGE_CHECK", "false") _ = os.Setenv("HORUSEC_DOCKER_API_RETRY_TIME_SLEEP_SECONDS", "1") - dockerAPIClient := &client.Mock{} + dockerAPIClient := testutil.NewDockerClientMock() dockerAPIClient.On("ImageList").Return([]types.ImageSummary{{ID: uuid.New().String()}}, nil) dockerAPIClient.On("ImagePull").Return(io.NopCloser(bytes.NewReader([]byte("Some data"))), nil) dockerAPIClient.On("ContainerCreate").Return(container.ContainerCreateCreatedBody{ID: uuid.New().String()}, ErrGeneric) @@ -156,7 +157,7 @@ func TestDockerAPI_CreateLanguageAnalysisContainer(t *testing.T) { _ = os.Setenv("HORUSEC_DOCKER_API_IMAGE_CHECK", "false") _ = os.Setenv("HORUSEC_DOCKER_API_RETRY_TIME_SLEEP_SECONDS", "1") - dockerAPIClient := &client.Mock{} + dockerAPIClient := testutil.NewDockerClientMock() dockerAPIClient.On("ImageList").Return([]types.ImageSummary{{ID: uuid.New().String()}}, nil) dockerAPIClient.On("ImagePull").Return(io.NopCloser(bytes.NewReader([]byte("Some data"))), nil) dockerAPIClient.On("ContainerCreate").Return(container.ContainerCreateCreatedBody{ID: uuid.New().String()}, nil) @@ -177,7 +178,7 @@ func TestDockerAPI_CreateLanguageAnalysisContainer(t *testing.T) { _ = os.Setenv("HORUSEC_DOCKER_API_IMAGE_CHECK", "false") _ = os.Setenv("HORUSEC_DOCKER_API_RETRY_TIME_SLEEP_SECONDS", "1") - dockerAPIClient := &client.Mock{} + dockerAPIClient := testutil.NewDockerClientMock() dockerAPIClient.On("ImageList").Return([]types.ImageSummary{{ID: uuid.New().String()}}, nil) dockerAPIClient.On("ImagePull").Return(io.NopCloser(bytes.NewReader([]byte("Some data"))), nil) dockerAPIClient.On("ContainerCreate").Return(container.ContainerCreateCreatedBody{ID: uuid.New().String()}, nil) @@ -205,7 +206,7 @@ func TestDockerAPI_CreateLanguageAnalysisContainer(t *testing.T) { _ = os.Setenv("HORUSEC_DOCKER_API_IMAGE_CHECK", "false") _ = os.Setenv("HORUSEC_DOCKER_API_RETRY_TIME_SLEEP_SECONDS", "1") - dockerAPIClient := &client.Mock{} + dockerAPIClient := testutil.NewDockerClientMock() dockerAPIClient.On("ImageList").Return([]types.ImageSummary{{ID: uuid.New().String()}}, nil) dockerAPIClient.On("ImagePull").Return(io.NopCloser(bytes.NewReader([]byte("Some data"))), nil) dockerAPIClient.On("ContainerCreate").Return(container.ContainerCreateCreatedBody{ID: uuid.New().String()}, nil) @@ -230,7 +231,7 @@ func TestDockerAPI_CreateLanguageAnalysisContainer(t *testing.T) { _ = os.Setenv("HORUSEC_DOCKER_API_IMAGE_CHECK", "false") _ = os.Setenv("HORUSEC_DOCKER_API_RETRY_TIME_SLEEP_SECONDS", "1") - dockerAPIClient := &client.Mock{} + dockerAPIClient := testutil.NewDockerClientMock() dockerAPIClient.On("ImageList").Return([]types.ImageSummary{{ID: uuid.New().String()}}, nil) dockerAPIClient.On("ImagePull").Return(io.NopCloser(bytes.NewReader([]byte("Some data"))), nil) dockerAPIClient.On("ContainerCreate").Return(container.ContainerCreateCreatedBody{ID: uuid.New().String()}, nil) @@ -251,7 +252,7 @@ func TestDockerAPI_CreateLanguageAnalysisContainer(t *testing.T) { }) t.Run("Should pull image from registry when not exists on cache", func(t *testing.T) { - dockerAPIClient := new(client.Mock) + dockerAPIClient := testutil.NewDockerClientMock() dockerAPIClient.On("ImageList").Return([]types.ImageSummary{}, nil) dockerAPIClient.On("ImagePull").Return(io.NopCloser(bytes.NewReader([]byte("Some data"))), nil) dockerAPIClient.On("ContainerCreate").Return(container.ContainerCreateCreatedBody{ID: uuid.New().String()}, nil) @@ -268,7 +269,7 @@ func TestDockerAPI_CreateLanguageAnalysisContainer(t *testing.T) { }) t.Run("Should not pull image from registry when exists on cache", func(t *testing.T) { - dockerAPIClient := new(client.Mock) + dockerAPIClient := testutil.NewDockerClientMock() dockerAPIClient.On("ImageList").Return([]types.ImageSummary{{ID: uuid.New().String()}}, nil) dockerAPIClient.On("ContainerCreate").Return(container.ContainerCreateCreatedBody{ID: uuid.New().String()}, nil) dockerAPIClient.On("ContainerStart").Return(nil) @@ -287,7 +288,7 @@ func TestDockerAPI_CreateLanguageAnalysisContainer(t *testing.T) { func TestDeleteContainersFromAPI(t *testing.T) { t.Run("should not panics", func(t *testing.T) { - dockerAPIClient := &client.Mock{} + dockerAPIClient := testutil.NewDockerClientMock() dockerAPIClient.On("ContainerList").Return([]types.Container{{ID: "test"}}, nil) dockerAPIClient.On("ContainerRemove").Return(nil) @@ -299,7 +300,7 @@ func TestDeleteContainersFromAPI(t *testing.T) { }) t.Run("should not panics but return error when container list", func(t *testing.T) { - dockerAPIClient := &client.Mock{} + dockerAPIClient := testutil.NewDockerClientMock() dockerAPIClient.On("ContainerList").Return([]types.Container{}, errors.New("test")) api := New(dockerAPIClient, &cliConfig.Config{}, uuid.New()) @@ -310,7 +311,7 @@ func TestDeleteContainersFromAPI(t *testing.T) { }) t.Run("Test Replace docker bind folder to windows o.s", func(t *testing.T) { - dockerAPIClient := &client.Mock{} + dockerAPIClient := testutil.NewDockerClientMock() dockerAPIClient.On("ContainerList").Return([]types.Container{}, errors.New("test")) config := &cliConfig.Config{} config.ProjectPath = "C:/Users/usr/Documents/Horusec/project" diff --git a/internal/services/formatters/c/flawfinder/formatter_test.go b/internal/services/formatters/c/flawfinder/formatter_test.go index ff3272aa4..7be63a1da 100644 --- a/internal/services/formatters/c/flawfinder/formatter_test.go +++ b/internal/services/formatters/c/flawfinder/formatter_test.go @@ -22,6 +22,7 @@ import ( "github.com/ZupIT/horusec-devkit/pkg/enums/tools" "github.com/ZupIT/horusec/internal/entities/toolsconfig" + "github.com/ZupIT/horusec/internal/utils/testutil" entitiesAnalysis "github.com/ZupIT/horusec-devkit/pkg/entities/analysis" @@ -29,7 +30,6 @@ import ( cliConfig "github.com/ZupIT/horusec/config" "github.com/ZupIT/horusec/internal/entities/workdir" - "github.com/ZupIT/horusec/internal/services/docker" "github.com/ZupIT/horusec/internal/services/formatters" ) @@ -58,7 +58,7 @@ func getCsvString() string { func TestStartCFlawfinder(t *testing.T) { t.Run("should success execute container and process output", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() analysis := &entitiesAnalysis.Analysis{} config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -77,7 +77,7 @@ func TestStartCFlawfinder(t *testing.T) { }) t.Run("should return error when invalid output", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() analysis := &entitiesAnalysis.Analysis{} config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -95,7 +95,7 @@ func TestStartCFlawfinder(t *testing.T) { }) t.Run("should return error when executing container", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() analysis := &entitiesAnalysis.Analysis{} config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -112,7 +112,7 @@ func TestStartCFlawfinder(t *testing.T) { t.Run("Should not execute tool because it's ignored", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} config.ToolsConfig = toolsconfig.ToolsConfig{ diff --git a/internal/services/formatters/csharp/dotnet_cli/formatter_test.go b/internal/services/formatters/csharp/dotnet_cli/formatter_test.go index ec7bb9d8e..cb521be88 100644 --- a/internal/services/formatters/csharp/dotnet_cli/formatter_test.go +++ b/internal/services/formatters/csharp/dotnet_cli/formatter_test.go @@ -26,13 +26,13 @@ import ( cliConfig "github.com/ZupIT/horusec/config" "github.com/ZupIT/horusec/internal/entities/toolsconfig" "github.com/ZupIT/horusec/internal/entities/workdir" - "github.com/ZupIT/horusec/internal/services/docker" "github.com/ZupIT/horusec/internal/services/formatters" + "github.com/ZupIT/horusec/internal/utils/testutil" ) func TestParseOutput(t *testing.T) { t.Run("should return 3 vulnerability with no errors", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") analysis := &analysisEntities.Analysis{} config := &cliConfig.Config{} @@ -62,7 +62,7 @@ func TestParseOutput(t *testing.T) { }) t.Run("should return no vulnerability with no errors", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") analysis := &analysisEntities.Analysis{} config := &cliConfig.Config{} @@ -79,7 +79,7 @@ func TestParseOutput(t *testing.T) { t.Run("should return error executing container", func(t *testing.T) { analysis := &analysisEntities.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -96,7 +96,7 @@ func TestParseOutput(t *testing.T) { t.Run("should return error when solution was not found", func(t *testing.T) { analysis := &analysisEntities.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -113,7 +113,7 @@ func TestParseOutput(t *testing.T) { t.Run("should not execute tool because it's ignored", func(t *testing.T) { analysis := &analysisEntities.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} config.ToolsConfig = toolsconfig.ToolsConfig{ diff --git a/internal/services/formatters/csharp/scs/formatter_test.go b/internal/services/formatters/csharp/scs/formatter_test.go index 033c9f058..57d501e4f 100644 --- a/internal/services/formatters/csharp/scs/formatter_test.go +++ b/internal/services/formatters/csharp/scs/formatter_test.go @@ -29,9 +29,9 @@ import ( cliConfig "github.com/ZupIT/horusec/config" "github.com/ZupIT/horusec/internal/entities/toolsconfig" "github.com/ZupIT/horusec/internal/entities/workdir" - "github.com/ZupIT/horusec/internal/services/docker" "github.com/ZupIT/horusec/internal/services/formatters" "github.com/ZupIT/horusec/internal/services/formatters/csharp/scs/enums" + "github.com/ZupIT/horusec/internal/utils/testutil" ) func createSlnFile(t *testing.T) { @@ -55,7 +55,7 @@ func TestParseOutput(t *testing.T) { t.Run("should return 4 vulnerabilities with no errors", func(t *testing.T) { createSlnFile(t) - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") analysis := &analysisEntities.Analysis{} config := cliConfig.New() @@ -113,7 +113,7 @@ func TestParseOutput(t *testing.T) { createSlnFile(t) analysis := &analysisEntities.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -134,7 +134,7 @@ func TestParseOutput(t *testing.T) { createSlnFile(t) analysis := &analysisEntities.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -153,7 +153,7 @@ func TestParseOutput(t *testing.T) { t.Run("should return error not found solution file", func(t *testing.T) { analysis := &analysisEntities.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -171,7 +171,7 @@ func TestParseOutput(t *testing.T) { createSlnFile(t) analysis := &analysisEntities.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -188,7 +188,7 @@ func TestParseOutput(t *testing.T) { t.Run("should not execute tool because it's ignored", func(t *testing.T) { analysis := &analysisEntities.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} config.ToolsConfig = toolsconfig.ToolsConfig{ diff --git a/internal/services/formatters/default_engine_formatter_test.go b/internal/services/formatters/default_engine_formatter_test.go index 3ebdedf51..24f2734f6 100644 --- a/internal/services/formatters/default_engine_formatter_test.go +++ b/internal/services/formatters/default_engine_formatter_test.go @@ -28,6 +28,7 @@ import ( "github.com/ZupIT/horusec/internal/services/formatters/nginx/horusecnginx" "github.com/ZupIT/horusec/internal/services/formatters/swift/horusecswift" "github.com/ZupIT/horusec/internal/services/formatters/yaml/horuseckubernetes" + "github.com/ZupIT/horusec/internal/utils/testutil" "github.com/stretchr/testify/assert" @@ -82,7 +83,7 @@ func TestStartAnalysis(t *testing.T) { t.Run("should success execute analysis without errors", func(t *testing.T) { analysis := &analysis.Analysis{} - service := &formatters.Mock{} + service := testutil.NewFormatterMock() service.On("LogDebugWithReplace") service.On("SetToolFinishedAnalysis") @@ -100,7 +101,7 @@ func TestStartAnalysis(t *testing.T) { }) t.Run("should return error when getting text unit", func(t *testing.T) { - service := &formatters.Mock{} + service := testutil.NewFormatterMock() service.On("LogDebugWithReplace") service.On("SetToolFinishedAnalysis") @@ -116,7 +117,7 @@ func TestStartAnalysis(t *testing.T) { }) t.Run("should ignore this tool", func(t *testing.T) { - service := &formatters.Mock{} + service := testutil.NewFormatterMock() service.On("ToolIsToIgnore").Return(true) diff --git a/internal/services/formatters/elixir/mixaudit/formatter_test.go b/internal/services/formatters/elixir/mixaudit/formatter_test.go index 7e8e12977..620a9866d 100644 --- a/internal/services/formatters/elixir/mixaudit/formatter_test.go +++ b/internal/services/formatters/elixir/mixaudit/formatter_test.go @@ -19,6 +19,7 @@ import ( "testing" "github.com/ZupIT/horusec/internal/entities/toolsconfig" + "github.com/ZupIT/horusec/internal/utils/testutil" "github.com/stretchr/testify/assert" @@ -26,7 +27,6 @@ import ( "github.com/ZupIT/horusec-devkit/pkg/enums/tools" cliConfig "github.com/ZupIT/horusec/config" "github.com/ZupIT/horusec/internal/entities/workdir" - "github.com/ZupIT/horusec/internal/services/docker" "github.com/ZupIT/horusec/internal/services/formatters" ) @@ -36,7 +36,7 @@ func getOutputString() string { func TestStartCFlawfinder(t *testing.T) { t.Run("should success execute container and process output", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() entity := &analysis.Analysis{} config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -55,7 +55,7 @@ func TestStartCFlawfinder(t *testing.T) { }) t.Run("should return error when invalid output", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() entity := &analysis.Analysis{} config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -73,7 +73,7 @@ func TestStartCFlawfinder(t *testing.T) { }) t.Run("should return error when executing container", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() entity := &analysis.Analysis{} config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -90,7 +90,7 @@ func TestStartCFlawfinder(t *testing.T) { t.Run("should not execute tool because it's ignored", func(t *testing.T) { entity := &analysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} config.ToolsConfig = toolsconfig.ToolsConfig{ diff --git a/internal/services/formatters/elixir/sobelow/formatter_test.go b/internal/services/formatters/elixir/sobelow/formatter_test.go index 834caee60..25c46535f 100644 --- a/internal/services/formatters/elixir/sobelow/formatter_test.go +++ b/internal/services/formatters/elixir/sobelow/formatter_test.go @@ -19,6 +19,7 @@ import ( "testing" "github.com/ZupIT/horusec/internal/entities/toolsconfig" + "github.com/ZupIT/horusec/internal/utils/testutil" "github.com/stretchr/testify/assert" @@ -26,7 +27,6 @@ import ( "github.com/ZupIT/horusec-devkit/pkg/enums/tools" cliConfig "github.com/ZupIT/horusec/config" "github.com/ZupIT/horusec/internal/entities/workdir" - "github.com/ZupIT/horusec/internal/services/docker" "github.com/ZupIT/horusec/internal/services/formatters" ) @@ -45,7 +45,7 @@ func getOutputString() string { func TestStartCFlawfinder(t *testing.T) { t.Run("should success execute container and process output", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() entity := &analysis.Analysis{} config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -64,7 +64,7 @@ func TestStartCFlawfinder(t *testing.T) { }) t.Run("should return error when invalid output", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() analysis := &analysis.Analysis{} config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -82,7 +82,7 @@ func TestStartCFlawfinder(t *testing.T) { }) t.Run("should return error when executing container", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() entity := &analysis.Analysis{} config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -99,7 +99,7 @@ func TestStartCFlawfinder(t *testing.T) { t.Run("should not execute tool because it's ignored", func(t *testing.T) { entity := &analysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} config.ToolsConfig = toolsconfig.ToolsConfig{ diff --git a/internal/services/formatters/generic/dependency_check/formatter_test.go b/internal/services/formatters/generic/dependency_check/formatter_test.go index d7ea9ba62..b680aa2df 100644 --- a/internal/services/formatters/generic/dependency_check/formatter_test.go +++ b/internal/services/formatters/generic/dependency_check/formatter_test.go @@ -26,8 +26,8 @@ import ( cliConfig "github.com/ZupIT/horusec/config" "github.com/ZupIT/horusec/internal/entities/toolsconfig" "github.com/ZupIT/horusec/internal/entities/workdir" - "github.com/ZupIT/horusec/internal/services/docker" "github.com/ZupIT/horusec/internal/services/formatters" + "github.com/ZupIT/horusec/internal/utils/testutil" ) const output = "{ \"dependencies\":[ { \"isVirtual\":false, \"fileName\":\"app.js\", \"filePath\":\"\\/src\\/app.js" + @@ -64,7 +64,7 @@ const output = "{ \"dependencies\":[ { \"isVirtual\":false, \"fileName\":\"app.j func TestStartGenericOwaspDependencyCheck(t *testing.T) { t.Run("should success execute container and process output", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() analysis := &entitiesAnalysis.Analysis{} config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -82,7 +82,7 @@ func TestStartGenericOwaspDependencyCheck(t *testing.T) { }) t.Run("should return error when invalid output", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() analysis := &entitiesAnalysis.Analysis{} config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -98,7 +98,7 @@ func TestStartGenericOwaspDependencyCheck(t *testing.T) { }) t.Run("should return error when executing container", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() analysis := &entitiesAnalysis.Analysis{} config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -114,7 +114,7 @@ func TestStartGenericOwaspDependencyCheck(t *testing.T) { }) t.Run("should return nil when empty output", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() analysis := &entitiesAnalysis.Analysis{} config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -131,7 +131,7 @@ func TestStartGenericOwaspDependencyCheck(t *testing.T) { t.Run("should not execute tool because it's ignored", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} config.ToolsConfig = toolsconfig.ToolsConfig{ diff --git a/internal/services/formatters/generic/semgrep/formatter_test.go b/internal/services/formatters/generic/semgrep/formatter_test.go index feb7fe9c2..af68f168e 100644 --- a/internal/services/formatters/generic/semgrep/formatter_test.go +++ b/internal/services/formatters/generic/semgrep/formatter_test.go @@ -19,6 +19,7 @@ import ( "testing" "github.com/ZupIT/horusec/internal/entities/toolsconfig" + "github.com/ZupIT/horusec/internal/utils/testutil" entitiesAnalysis "github.com/ZupIT/horusec-devkit/pkg/entities/analysis" "github.com/ZupIT/horusec-devkit/pkg/enums/tools" @@ -27,13 +28,12 @@ import ( cliConfig "github.com/ZupIT/horusec/config" "github.com/ZupIT/horusec/internal/entities/workdir" - "github.com/ZupIT/horusec/internal/services/docker" "github.com/ZupIT/horusec/internal/services/formatters" ) func TestParseOutput(t *testing.T) { t.Run("Should return 1 vulnerabilities with no errors", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") analysis := &entitiesAnalysis.Analysis{} config := &cliConfig.Config{} @@ -56,7 +56,7 @@ func TestParseOutput(t *testing.T) { }) t.Run("Should return 1 vulnerabilities with no errors", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") analysis := &entitiesAnalysis.Analysis{} config := &cliConfig.Config{} @@ -79,7 +79,7 @@ func TestParseOutput(t *testing.T) { }) t.Run("Should return 1 vulnerabilities with no errors", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") analysis := &entitiesAnalysis.Analysis{} config := &cliConfig.Config{} @@ -102,7 +102,7 @@ func TestParseOutput(t *testing.T) { }) t.Run("Should return error when invalid output", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") analysis := &entitiesAnalysis.Analysis{} config := &cliConfig.Config{} @@ -120,7 +120,7 @@ func TestParseOutput(t *testing.T) { }) t.Run("Should return error when executing container", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") analysis := &entitiesAnalysis.Analysis{} config := &cliConfig.Config{} @@ -137,7 +137,7 @@ func TestParseOutput(t *testing.T) { t.Run("Should not execute tool because it's ignored", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} config.ToolsConfig = toolsconfig.ToolsConfig{ diff --git a/internal/services/formatters/generic/trivy/formatter_test.go b/internal/services/formatters/generic/trivy/formatter_test.go index 187ba0ca6..9b11edced 100644 --- a/internal/services/formatters/generic/trivy/formatter_test.go +++ b/internal/services/formatters/generic/trivy/formatter_test.go @@ -24,13 +24,13 @@ import ( "github.com/ZupIT/horusec/config" "github.com/ZupIT/horusec/internal/entities/toolsconfig" "github.com/ZupIT/horusec/internal/entities/workdir" - "github.com/ZupIT/horusec/internal/services/docker" "github.com/ZupIT/horusec/internal/services/formatters" + "github.com/ZupIT/horusec/internal/utils/testutil" ) func TestParseOutput(t *testing.T) { t.Run("Should return 2 vulnerabilities with no errors", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") analysis := &entitiesAnalysis.Analysis{} c := &config.Config{} @@ -48,7 +48,7 @@ func TestParseOutput(t *testing.T) { }) t.Run("Should return error when invalid output", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") analysis := &entitiesAnalysis.Analysis{} c := &config.Config{} @@ -67,7 +67,7 @@ func TestParseOutput(t *testing.T) { t.Run("Should not execute tool because it's ignored", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() c := &config.Config{} c.WorkDir = &workdir.WorkDir{} c.ToolsConfig = toolsconfig.ToolsConfig{ diff --git a/internal/services/formatters/go/gosec/formatter_test.go b/internal/services/formatters/go/gosec/formatter_test.go index d2f22b507..c348483ca 100644 --- a/internal/services/formatters/go/gosec/formatter_test.go +++ b/internal/services/formatters/go/gosec/formatter_test.go @@ -19,6 +19,7 @@ import ( "testing" "github.com/ZupIT/horusec/internal/entities/toolsconfig" + "github.com/ZupIT/horusec/internal/utils/testutil" "github.com/stretchr/testify/assert" @@ -26,13 +27,12 @@ import ( "github.com/ZupIT/horusec-devkit/pkg/enums/tools" cliConfig "github.com/ZupIT/horusec/config" "github.com/ZupIT/horusec/internal/entities/workdir" - "github.com/ZupIT/horusec/internal/services/docker" "github.com/ZupIT/horusec/internal/services/formatters" ) func TestGoLang_StartAnalysis(t *testing.T) { t.Run("Should run analysis and return error because output is empty", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer").Return("", nil) @@ -49,7 +49,7 @@ func TestGoLang_StartAnalysis(t *testing.T) { }) t.Run("Should run analysis without panics and save on cache with success", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") config := &cliConfig.Config{} @@ -81,7 +81,7 @@ func TestGoLang_StartAnalysis(t *testing.T) { }) t.Run("Should run analysis and return error and up docker_api and save on cache with error", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer").Return("", errors.New("some error")) @@ -98,7 +98,7 @@ func TestGoLang_StartAnalysis(t *testing.T) { }) t.Run("Should run analysis and return error because output is wrong", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") outputAnalysis := "is some a text aleatory" @@ -118,7 +118,7 @@ func TestGoLang_StartAnalysis(t *testing.T) { t.Run("Should not execute tool because it's ignored", func(t *testing.T) { entity := &analysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} config.ToolsConfig = toolsconfig.ToolsConfig{ diff --git a/internal/services/formatters/go/nancy/formatter_test.go b/internal/services/formatters/go/nancy/formatter_test.go index e7b96361a..643d550f9 100644 --- a/internal/services/formatters/go/nancy/formatter_test.go +++ b/internal/services/formatters/go/nancy/formatter_test.go @@ -26,8 +26,8 @@ import ( cliConfig "github.com/ZupIT/horusec/config" "github.com/ZupIT/horusec/internal/entities/toolsconfig" "github.com/ZupIT/horusec/internal/entities/workdir" - "github.com/ZupIT/horusec/internal/services/docker" "github.com/ZupIT/horusec/internal/services/formatters" + "github.com/ZupIT/horusec/internal/utils/testutil" ) func TestParseOutput(t *testing.T) { @@ -37,7 +37,7 @@ func TestParseOutput(t *testing.T) { config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") output := "{\n\"Vulnerable\": [{\"Coordinates\":\"pkg:golang/github.com/gorilla/websocket@1.4.0\"," + @@ -89,7 +89,7 @@ func TestParseOutput(t *testing.T) { config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") output := "" @@ -113,7 +113,7 @@ func TestParseOutput(t *testing.T) { config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer"). Return("invalid output", nil) @@ -127,7 +127,7 @@ func TestParseOutput(t *testing.T) { t.Run("should return error when something went wrong executing container", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer"). Return("", errors.New("test")) @@ -144,7 +144,7 @@ func TestParseOutput(t *testing.T) { t.Run("should not execute tool because it's ignored", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() config := &cliConfig.Config{} config.ToolsConfig = toolsconfig.ToolsConfig{ tools.Nancy: toolsconfig.Config{ diff --git a/internal/services/formatters/hcl/checkov/formatter_test.go b/internal/services/formatters/hcl/checkov/formatter_test.go index 7e3abc18e..8102c9fb6 100644 --- a/internal/services/formatters/hcl/checkov/formatter_test.go +++ b/internal/services/formatters/hcl/checkov/formatter_test.go @@ -26,13 +26,13 @@ import ( cliConfig "github.com/ZupIT/horusec/config" "github.com/ZupIT/horusec/internal/entities/toolsconfig" "github.com/ZupIT/horusec/internal/entities/workdir" - "github.com/ZupIT/horusec/internal/services/docker" "github.com/ZupIT/horusec/internal/services/formatters" + "github.com/ZupIT/horusec/internal/utils/testutil" ) func TestStartHCLCheckov(t *testing.T) { t.Run("should successfully execute container and process output", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() analysis := &entitiesAnalysis.Analysis{} config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -51,7 +51,7 @@ func TestStartHCLCheckov(t *testing.T) { }) t.Run("should return error when invalid output", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() analysis := &entitiesAnalysis.Analysis{} config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -69,7 +69,7 @@ func TestStartHCLCheckov(t *testing.T) { }) t.Run("should return error when executing container", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() analysis := &entitiesAnalysis.Analysis{} config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -85,7 +85,7 @@ func TestStartHCLCheckov(t *testing.T) { }) t.Run("Should not execute tool because it's ignored", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() analysis := &entitiesAnalysis.Analysis{} config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} diff --git a/internal/services/formatters/hcl/tfsec/formatter_test.go b/internal/services/formatters/hcl/tfsec/formatter_test.go index c3f820ed6..91e661479 100644 --- a/internal/services/formatters/hcl/tfsec/formatter_test.go +++ b/internal/services/formatters/hcl/tfsec/formatter_test.go @@ -19,6 +19,7 @@ import ( "testing" "github.com/ZupIT/horusec/internal/entities/toolsconfig" + "github.com/ZupIT/horusec/internal/utils/testutil" entitiesAnalysis "github.com/ZupIT/horusec-devkit/pkg/entities/analysis" "github.com/ZupIT/horusec-devkit/pkg/enums/tools" @@ -27,13 +28,12 @@ import ( cliConfig "github.com/ZupIT/horusec/config" "github.com/ZupIT/horusec/internal/entities/workdir" - "github.com/ZupIT/horusec/internal/services/docker" "github.com/ZupIT/horusec/internal/services/formatters" ) func TestStartHCLTfSec(t *testing.T) { t.Run("should success execute container and process output", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() analysis := &entitiesAnalysis.Analysis{} config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -52,7 +52,7 @@ func TestStartHCLTfSec(t *testing.T) { }) t.Run("should return error when invalid output", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() analysis := &entitiesAnalysis.Analysis{} config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -70,7 +70,7 @@ func TestStartHCLTfSec(t *testing.T) { }) t.Run("should return error when executing container", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() analysis := &entitiesAnalysis.Analysis{} config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -86,7 +86,7 @@ func TestStartHCLTfSec(t *testing.T) { }) t.Run("Should not execute tool because it's ignored", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} config.ToolsConfig = toolsconfig.ToolsConfig{ diff --git a/internal/services/formatters/javascript/npmaudit/formatter_test.go b/internal/services/formatters/javascript/npmaudit/formatter_test.go index 67aca4ff5..03a91a1b3 100644 --- a/internal/services/formatters/javascript/npmaudit/formatter_test.go +++ b/internal/services/formatters/javascript/npmaudit/formatter_test.go @@ -19,6 +19,7 @@ import ( "testing" "github.com/ZupIT/horusec/internal/entities/toolsconfig" + "github.com/ZupIT/horusec/internal/utils/testutil" entitiesAnalysis "github.com/ZupIT/horusec-devkit/pkg/entities/analysis" "github.com/ZupIT/horusec-devkit/pkg/enums/tools" @@ -27,14 +28,13 @@ import ( cliConfig "github.com/ZupIT/horusec/config" "github.com/ZupIT/horusec/internal/entities/workdir" - "github.com/ZupIT/horusec/internal/services/docker" "github.com/ZupIT/horusec/internal/services/formatters" ) func TestStartNpmAudit(t *testing.T) { t.Run("Should parse output with no errors", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") config := &cliConfig.Config{} @@ -53,7 +53,7 @@ func TestStartNpmAudit(t *testing.T) { }) t.Run("Should parse output with no errors", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") config := &cliConfig.Config{} @@ -72,7 +72,7 @@ func TestStartNpmAudit(t *testing.T) { }) t.Run("Should parse output empty with no errors", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") config := &cliConfig.Config{} @@ -92,7 +92,7 @@ func TestStartNpmAudit(t *testing.T) { t.Run("Should parse output with not found error", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") config := &cliConfig.Config{} @@ -112,7 +112,7 @@ func TestStartNpmAudit(t *testing.T) { t.Run("Should return error when executing container", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer").Return("", errors.New("test")) @@ -128,7 +128,7 @@ func TestStartNpmAudit(t *testing.T) { }) t.Run("Should not execute tool because it's ignored", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() config := &cliConfig.Config{} config.ToolsConfig = toolsconfig.ToolsConfig{ tools.NpmAudit: toolsconfig.Config{ @@ -145,7 +145,7 @@ func TestStartNpmAudit(t *testing.T) { func TestParseOutputNpm(t *testing.T) { t.Run("Should return error when invalid output", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") config := &cliConfig.Config{} @@ -163,7 +163,7 @@ func TestParseOutputNpm(t *testing.T) { }) t.Run("Check if get version contains double quote using %q", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} service := formatters.NewFormatterService(analysis, dockerAPIControllerMock, config) diff --git a/internal/services/formatters/javascript/yarnaudit/formatter_test.go b/internal/services/formatters/javascript/yarnaudit/formatter_test.go index 84439f9c9..baef66e3f 100644 --- a/internal/services/formatters/javascript/yarnaudit/formatter_test.go +++ b/internal/services/formatters/javascript/yarnaudit/formatter_test.go @@ -19,6 +19,7 @@ import ( "testing" "github.com/ZupIT/horusec/internal/entities/toolsconfig" + "github.com/ZupIT/horusec/internal/utils/testutil" entitiesAnalysis "github.com/ZupIT/horusec-devkit/pkg/entities/analysis" "github.com/ZupIT/horusec-devkit/pkg/enums/tools" @@ -27,14 +28,13 @@ import ( cliConfig "github.com/ZupIT/horusec/config" "github.com/ZupIT/horusec/internal/entities/workdir" - "github.com/ZupIT/horusec/internal/services/docker" "github.com/ZupIT/horusec/internal/services/formatters" ) func TestParseOutputYarn(t *testing.T) { t.Run("Should run analysis with no errors", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") config := &cliConfig.Config{} @@ -54,7 +54,7 @@ func TestParseOutputYarn(t *testing.T) { t.Run("Should run analysis with output empty", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") config := &cliConfig.Config{} @@ -74,7 +74,7 @@ func TestParseOutputYarn(t *testing.T) { t.Run("Should parse output with not found error", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") config := &cliConfig.Config{} @@ -94,7 +94,7 @@ func TestParseOutputYarn(t *testing.T) { t.Run("Should parse output with audit error", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") config := &cliConfig.Config{} @@ -114,7 +114,7 @@ func TestParseOutputYarn(t *testing.T) { t.Run("Should return error when executing container", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer").Return("", errors.New("test")) @@ -130,7 +130,7 @@ func TestParseOutputYarn(t *testing.T) { }) t.Run("Should not execute tool because it's ignored", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() config := &cliConfig.Config{} config.ToolsConfig = toolsconfig.ToolsConfig{ @@ -148,7 +148,7 @@ func TestParseOutputYarn(t *testing.T) { func TestParseOutputNpm(t *testing.T) { t.Run("Should return error when invalid output", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") config := &cliConfig.Config{} diff --git a/internal/services/formatters/leaks/gitleaks/formatter_test.go b/internal/services/formatters/leaks/gitleaks/formatter_test.go index 20838ed43..38ccb2f13 100644 --- a/internal/services/formatters/leaks/gitleaks/formatter_test.go +++ b/internal/services/formatters/leaks/gitleaks/formatter_test.go @@ -20,6 +20,7 @@ import ( "time" "github.com/ZupIT/horusec/internal/entities/toolsconfig" + "github.com/ZupIT/horusec/internal/utils/testutil" entitiesAnalysis "github.com/ZupIT/horusec-devkit/pkg/entities/analysis" enumsAnalysis "github.com/ZupIT/horusec-devkit/pkg/enums/analysis" @@ -30,7 +31,6 @@ import ( cliConfig "github.com/ZupIT/horusec/config" "github.com/ZupIT/horusec/internal/entities/workdir" - "github.com/ZupIT/horusec/internal/services/docker" "github.com/ZupIT/horusec/internal/services/formatters" ) @@ -46,7 +46,7 @@ func AnalysisMock() *entitiesAnalysis.Analysis { func TestLeaks_StartAnalysis(t *testing.T) { t.Run("Should run analysis without panics and save on cache with success", func(t *testing.T) { analysis := AnalysisMock() - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -83,7 +83,7 @@ func TestLeaks_StartAnalysis(t *testing.T) { config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer").Return("", nil) @@ -101,7 +101,7 @@ func TestLeaks_StartAnalysis(t *testing.T) { config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer").Return("", errors.New("some error")) @@ -119,7 +119,7 @@ func TestLeaks_StartAnalysis(t *testing.T) { config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") outputAnalysis := "is some a text aleatory" @@ -136,7 +136,7 @@ func TestLeaks_StartAnalysis(t *testing.T) { }) t.Run("Should not execute tool because it's ignored", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() config := &cliConfig.Config{} config.ToolsConfig = toolsconfig.ToolsConfig{ tools.GitLeaks: toolsconfig.Config{ diff --git a/internal/services/formatters/php/phpcs/formatter_test.go b/internal/services/formatters/php/phpcs/formatter_test.go index a3fa3a2a6..b307ccfd8 100644 --- a/internal/services/formatters/php/phpcs/formatter_test.go +++ b/internal/services/formatters/php/phpcs/formatter_test.go @@ -19,6 +19,7 @@ import ( "testing" "github.com/ZupIT/horusec/internal/entities/toolsconfig" + "github.com/ZupIT/horusec/internal/utils/testutil" "github.com/stretchr/testify/assert" @@ -26,13 +27,12 @@ import ( "github.com/ZupIT/horusec-devkit/pkg/enums/tools" cliConfig "github.com/ZupIT/horusec/config" "github.com/ZupIT/horusec/internal/entities/workdir" - "github.com/ZupIT/horusec/internal/services/docker" "github.com/ZupIT/horusec/internal/services/formatters" ) func TestStartCFlawfinder(t *testing.T) { t.Run("should success execute container and process output", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() analysis := &entitiesAnalysis.Analysis{} config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -51,7 +51,7 @@ func TestStartCFlawfinder(t *testing.T) { }) t.Run("should return error when invalid output", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() analysis := &entitiesAnalysis.Analysis{} config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -69,7 +69,7 @@ func TestStartCFlawfinder(t *testing.T) { }) t.Run("should return error when executing container", func(t *testing.T) { - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() analysis := &entitiesAnalysis.Analysis{} config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} @@ -85,7 +85,7 @@ func TestStartCFlawfinder(t *testing.T) { }) t.Run("Should not execute tool because it's ignored", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() config := &cliConfig.Config{} config.ToolsConfig = toolsconfig.ToolsConfig{ tools.PhpCS: toolsconfig.Config{ diff --git a/internal/services/formatters/python/bandit/formatter_test.go b/internal/services/formatters/python/bandit/formatter_test.go index 0d99d0582..e6a5649e8 100644 --- a/internal/services/formatters/python/bandit/formatter_test.go +++ b/internal/services/formatters/python/bandit/formatter_test.go @@ -20,6 +20,7 @@ import ( "time" "github.com/ZupIT/horusec/internal/entities/toolsconfig" + "github.com/ZupIT/horusec/internal/utils/testutil" entitiesAnalysis "github.com/ZupIT/horusec-devkit/pkg/entities/analysis" enumHorusec "github.com/ZupIT/horusec-devkit/pkg/enums/analysis" @@ -30,7 +31,6 @@ import ( cliConfig "github.com/ZupIT/horusec/config" "github.com/ZupIT/horusec/internal/entities/workdir" - "github.com/ZupIT/horusec/internal/services/docker" "github.com/ZupIT/horusec/internal/services/formatters" ) @@ -62,7 +62,7 @@ func TestFormatter_StartSafety(t *testing.T) { config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer").Return("", errors.New("Error")) @@ -82,7 +82,7 @@ func TestFormatter_StartSafety(t *testing.T) { config.WorkDir = &workdir.WorkDir{} output := `{"results": [{"code": "6 \n7 exec(command)\n8 \n","filename": "./main.py","line_number": 7,"issue_severity": "MEDIUM","issue_text": "Use of exec detected."}]}` - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer").Return(output, nil) @@ -102,7 +102,7 @@ func TestFormatter_StartSafety(t *testing.T) { config.WorkDir = &workdir.WorkDir{} output := `{"results": [{"code": "6 \n7 exec(command)\n8 \n","filename": "./main.py","line_number": 7,"issue_severity": "MEDIUM","issue_text": "Use of exec detected."}]}` - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer").Return(output, nil) @@ -122,7 +122,7 @@ func TestFormatter_StartSafety(t *testing.T) { config.WorkDir = &workdir.WorkDir{} output := `{"results": [{"issue_text": "Use of assert detected. The enclosed code will be removed when compiling to optimized byte code."}]}` - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer").Return(output, nil) @@ -141,7 +141,7 @@ func TestFormatter_StartSafety(t *testing.T) { config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer").Return("some aleatory text", nil) @@ -155,7 +155,7 @@ func TestFormatter_StartSafety(t *testing.T) { }) t.Run("Should not execute tool because it's ignored", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() config := &cliConfig.Config{} config.ToolsConfig = toolsconfig.ToolsConfig{ tools.Bandit: toolsconfig.Config{ diff --git a/internal/services/formatters/python/safety/formatter_test.go b/internal/services/formatters/python/safety/formatter_test.go index e1f1b7ecf..420f26197 100644 --- a/internal/services/formatters/python/safety/formatter_test.go +++ b/internal/services/formatters/python/safety/formatter_test.go @@ -20,6 +20,7 @@ import ( "time" "github.com/ZupIT/horusec/internal/entities/toolsconfig" + "github.com/ZupIT/horusec/internal/utils/testutil" entitiesAnalysis "github.com/ZupIT/horusec-devkit/pkg/entities/analysis" enumHorusec "github.com/ZupIT/horusec-devkit/pkg/enums/analysis" @@ -30,7 +31,6 @@ import ( cliConfig "github.com/ZupIT/horusec/config" "github.com/ZupIT/horusec/internal/entities/workdir" - "github.com/ZupIT/horusec/internal/services/docker" "github.com/ZupIT/horusec/internal/services/formatters" ) @@ -62,7 +62,7 @@ func TestFormatter_StartSafety(t *testing.T) { config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer").Return("", errors.New("Error")) @@ -81,7 +81,7 @@ func TestFormatter_StartSafety(t *testing.T) { config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} output := `{"issues": [{"dependency": "jinja2","vulnerable_below": "2.7.2","installed_version": "2.7.2","description": "The default configuration for bccache.FileSystemBytecodeCache in Jinja2 before 2.7.2 does not properly create temporary files, which allows local users to gain privileges via a crafted .cache file with a name starting with __jinja2_ in /tmp.","id": "123"}]}` - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer").Return(output, nil) @@ -100,7 +100,7 @@ func TestFormatter_StartSafety(t *testing.T) { config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer").Return("", nil) @@ -119,7 +119,7 @@ func TestFormatter_StartSafety(t *testing.T) { config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer").Return("some aleatory text", nil) @@ -133,7 +133,7 @@ func TestFormatter_StartSafety(t *testing.T) { }) t.Run("Should not execute tool because it's ignored", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() config := &cliConfig.Config{} config.ToolsConfig = toolsconfig.ToolsConfig{ tools.Safety: toolsconfig.Config{ diff --git a/internal/services/formatters/ruby/brakeman/formatter_test.go b/internal/services/formatters/ruby/brakeman/formatter_test.go index 314c0cce4..13b8a11be 100644 --- a/internal/services/formatters/ruby/brakeman/formatter_test.go +++ b/internal/services/formatters/ruby/brakeman/formatter_test.go @@ -19,6 +19,7 @@ import ( "testing" "github.com/ZupIT/horusec/internal/entities/toolsconfig" + "github.com/ZupIT/horusec/internal/utils/testutil" entitiesAnalysis "github.com/ZupIT/horusec-devkit/pkg/entities/analysis" "github.com/ZupIT/horusec-devkit/pkg/enums/tools" @@ -27,7 +28,6 @@ import ( cliConfig "github.com/ZupIT/horusec/config" "github.com/ZupIT/horusec/internal/entities/workdir" - "github.com/ZupIT/horusec/internal/services/docker" "github.com/ZupIT/horusec/internal/services/formatters" ) @@ -38,7 +38,7 @@ func TestParseOutput(t *testing.T) { config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") output := "{\"warnings\":[{\"warning_type\":\"Command Injection\",\"warning_code\":14,\"check_name\":\"Execute\",\"message\":\"Possible command injection\",\"file\":\"app/controllers/application_controller.rb\",\"line\":4,\"code\":\"system(\\\"ls #{options}\\\")\",\"render_path\":null,\"user_input\":\"options\",\"confidence\":\"Low\"},{\"warning_type\":\"Command Injection\",\"warning_code\":14,\"check_name\":\"Execute\",\"message\":\"Possible command injection\",\"file\":\"app/controllers/application_controller.rb\",\"line\":4,\"code\":\"system(\\\"ls #{options}\\\")\",\"render_path\":null,\"user_input\":\"options\",\"confidence\":\"Medium\"},{\"warning_type\":\"Command Injection\",\"warning_code\":14,\"check_name\":\"Execute\",\"message\":\"Possible command injection\",\"file\":\"app/controllers/application_controller.rb\",\"line\":4,\"code\":\"system(\\\"ls #{options}\\\")\",\"render_path\":null,\"user_input\":\"options\",\"confidence\":\"High\"},{\"warning_type\":\"Command Injection\",\"warning_code\":14,\"check_name\":\"Execute\",\"message\":\"Possible command injection\",\"file\":\"app/controllers/application_controller.rb\",\"line\":4,\"code\":\"system(\\\"ls #{options}\\\")\",\"render_path\":null,\"user_input\":\"options\",\"confidence\":\"Test\"}]}" @@ -62,7 +62,7 @@ func TestParseOutput(t *testing.T) { config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") output := "" @@ -86,7 +86,7 @@ func TestParseOutput(t *testing.T) { config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") output := "Please supply the path to a Rails application" @@ -110,7 +110,7 @@ func TestParseOutput(t *testing.T) { config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer").Return("invalid output", nil) @@ -123,7 +123,7 @@ func TestParseOutput(t *testing.T) { t.Run("Should return error when something went wrong in container", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer").Return("", errors.New("test")) @@ -139,7 +139,7 @@ func TestParseOutput(t *testing.T) { t.Run("Should not execute tool because it's ignored", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() config := &cliConfig.Config{} config.ToolsConfig = toolsconfig.ToolsConfig{ tools.Brakeman: toolsconfig.Config{ diff --git a/internal/services/formatters/ruby/bundler/formatter_test.go b/internal/services/formatters/ruby/bundler/formatter_test.go index 947ac57f2..1d3dcb7d9 100644 --- a/internal/services/formatters/ruby/bundler/formatter_test.go +++ b/internal/services/formatters/ruby/bundler/formatter_test.go @@ -19,6 +19,7 @@ import ( "testing" "github.com/ZupIT/horusec/internal/entities/toolsconfig" + "github.com/ZupIT/horusec/internal/utils/testutil" entitiesAnalysis "github.com/ZupIT/horusec-devkit/pkg/entities/analysis" "github.com/ZupIT/horusec-devkit/pkg/enums/tools" @@ -27,7 +28,6 @@ import ( cliConfig "github.com/ZupIT/horusec/config" "github.com/ZupIT/horusec/internal/entities/workdir" - "github.com/ZupIT/horusec/internal/services/docker" "github.com/ZupIT/horusec/internal/services/formatters" ) @@ -38,7 +38,7 @@ func TestParseOutput(t *testing.T) { config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") output := "\u001B[31mName: \u001B[0mactionpack\n\u001B[31mVersion: \u001B[0m6.0.0\n\u001B[31mAdvisory: \u001B[0mCVE-2020-8164\n\u001B[31mCriticality: \u001B[0mUnknown\n\u001B[31mURL: \u001B[0mhttps://groups.google.com/forum/#!topic/rubyonrails-security/f6ioe4sdpbY\n\u001B[31mTitle: \u001B[0mPossible Strong Parameters Bypass in ActionPack\n\u001B[31mSolution: upgrade to \u001B[0m~> 5.2.4.3, >= 6.0.3.1\n\n\u001B[31mName: \u001B[0mactionpack\n\u001B[31mVersion: \u001B[0m6.0.0\n\u001B[31mAdvisory: \u001B[0mCVE-2020-8166\n\u001B[31mCriticality: \u001B[0mUnknown\n\u001B[31mURL: \u001B[0mhttps://groups.google.com/forum/#!topic/rubyonrails-security/NOjKiGeXUgw\n\u001B[31mTitle: \u001B[0mAbility to forge per-form CSRF tokens given a global CSRF token\n\u001B[31mSolution: upgrade to \u001B[0m~> 5.2.4.3, >= 6.0.3.1\n" @@ -62,7 +62,7 @@ func TestParseOutput(t *testing.T) { config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer").Return("invalid output", nil) @@ -79,7 +79,7 @@ func TestParseOutput(t *testing.T) { config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer"). Return("No such file or directory Errno::ENOENT", nil) @@ -97,7 +97,7 @@ func TestParseOutput(t *testing.T) { config := &cliConfig.Config{} config.WorkDir = &workdir.WorkDir{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer"). Return("No vulnerabilities found", nil) @@ -111,7 +111,7 @@ func TestParseOutput(t *testing.T) { t.Run("Should return error when something went wrong in container", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer").Return("", errors.New("test")) @@ -127,7 +127,7 @@ func TestParseOutput(t *testing.T) { t.Run("Should not execute tool because it's ignored", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() config := &cliConfig.Config{} config.ToolsConfig = toolsconfig.ToolsConfig{ tools.BundlerAudit: toolsconfig.Config{ diff --git a/internal/services/formatters/service_test.go b/internal/services/formatters/service_test.go index a98894069..6ba1c8168 100644 --- a/internal/services/formatters/service_test.go +++ b/internal/services/formatters/service_test.go @@ -46,7 +46,6 @@ import ( "github.com/ZupIT/horusec-devkit/pkg/enums/tools" "github.com/ZupIT/horusec/config" dockerentities "github.com/ZupIT/horusec/internal/entities/docker" - "github.com/ZupIT/horusec/internal/services/docker" "github.com/ZupIT/horusec/internal/services/engines/java" ) @@ -55,7 +54,7 @@ func TestParseFindingsToVulnerabilities(t *testing.T) { ID: uuid.New(), } cfg := config.New() - svc := NewFormatterService(analysis, &docker.Mock{}, cfg) + svc := NewFormatterService(analysis, testutil.NewDockerMock(), cfg) rule := java.NewAWSQueryInjection() findings := []engine.Finding{ @@ -106,7 +105,7 @@ func TestParseFindingsToVulnerabilities(t *testing.T) { } func TestMock_AddWorkDirInCmd(t *testing.T) { - mock := &Mock{} + mock := testutil.NewFormatterMock() t.Run("Should mock with success", func(t *testing.T) { mock.On("LogDebugWithReplace") mock.On("GetAnalysisID").Return("") @@ -139,7 +138,7 @@ func TestExecuteContainer(t *testing.T) { t.Run("should return no error when execute container", func(t *testing.T) { analysis := &analysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer").Return("test", nil) @@ -152,7 +151,7 @@ func TestExecuteContainer(t *testing.T) { t.Run("should return error when execute container if CreateLanguageAnalysisContainer return error", func(t *testing.T) { analysis := &analysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer").Return("test", errors.New("some error")) @@ -167,7 +166,7 @@ func TestExecuteContainer(t *testing.T) { func TestGetAnalysisIDErrorMessage(t *testing.T) { t.Run("should success get error message with replaces", func(t *testing.T) { - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, &config.Config{}) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), &config.Config{}) result := monitorController.GetAnalysisIDErrorMessage(tools.Bandit, "test") @@ -179,7 +178,7 @@ func TestGetAnalysisIDErrorMessage(t *testing.T) { func TestGetCommitAuthor(t *testing.T) { t.Run("should get commit author default values when .git folder is not found", func(t *testing.T) { - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, &config.Config{}) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), &config.Config{}) result := monitorController.GetCommitAuthor("", "") assert.Equal(t, "-", result.Author) @@ -196,7 +195,7 @@ func TestGetCommitAuthor(t *testing.T) { EnableCommitAuthor: true, }, } - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, cfg) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), cfg) result := monitorController.GetCommitAuthor("15", filepath.Join(testutil.GoExample1, "api", "server.go")) notExpected := commitauthor.CommitAuthor{ @@ -220,7 +219,7 @@ func TestGetConfigProjectPath(t *testing.T) { }, } - svc := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, cliConfig) + svc := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), cliConfig) result := svc.GetConfigProjectPath() @@ -236,7 +235,7 @@ func TestAddWorkDirInCmd(t *testing.T) { cmdWithWorkDir := workDirString + cmd projectSubPath := filepath.Join("random", "file", "path") expectedString := "cd " + projectSubPath + cmd - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, &config.Config{}) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), &config.Config{}) result := monitorController.AddWorkDirInCmd(cmdWithWorkDir, projectSubPath, tools.SecurityCodeScan) @@ -244,7 +243,7 @@ func TestAddWorkDirInCmd(t *testing.T) { }) t.Run("should return cmd with no workdir", func(t *testing.T) { - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, &config.Config{}) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), &config.Config{}) cmd := "testcmd" result := monitorController.AddWorkDirInCmd(cmd, "", tools.SecurityCodeScan) @@ -254,7 +253,7 @@ func TestAddWorkDirInCmd(t *testing.T) { func TestLogDebugWithReplace(t *testing.T) { t.Run("should log debug and not panics", func(t *testing.T) { - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, &config.Config{}) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), &config.Config{}) stdOutMock := bytes.NewBufferString("") logger.LogSetOutput(stdOutMock) logger.SetLogLevel("debug") @@ -268,14 +267,14 @@ func TestLogDebugWithReplace(t *testing.T) { func TestGetAnalysisID(t *testing.T) { t.Run("should success get analysis id", func(t *testing.T) { id := uuid.New() - monitorController := NewFormatterService(&analysis.Analysis{ID: id}, &docker.Mock{}, &config.Config{}) + monitorController := NewFormatterService(&analysis.Analysis{ID: id}, testutil.NewDockerMock(), &config.Config{}) assert.Equal(t, id.String(), monitorController.GetAnalysisID()) }) } func TestLogAnalysisError(t *testing.T) { t.Run("should not panic when logging error", func(t *testing.T) { - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, &config.Config{}) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), &config.Config{}) stdOutMock := bytes.NewBufferString("") logger.LogSetOutput(stdOutMock) logger.SetLogLevel("debug") @@ -286,7 +285,7 @@ func TestLogAnalysisError(t *testing.T) { assert.Contains(t, stdOutMock.String(), `{HORUSEC_CLI} Something error went wrong in GoSec tool | analysisID -> 00000000-0000-0000-0000-000000000000 | output -> `) }) t.Run("should not panic when logging error and exists projectSubPath", func(t *testing.T) { - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, &config.Config{}) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), &config.Config{}) stdOutMock := bytes.NewBufferString("") logger.LogSetOutput(stdOutMock) logger.SetLogLevel("debug") @@ -307,7 +306,7 @@ func TestToolIsToIgnore(t *testing.T) { }, } - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, configs) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), configs) assert.Equal(t, true, monitorController.ToolIsToIgnore(tools.GoSec)) }) @@ -319,7 +318,7 @@ func TestToolIsToIgnore(t *testing.T) { }, } - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, configs) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), configs) assert.Equal(t, true, monitorController.ToolIsToIgnore(tools.GoSec)) }) @@ -330,7 +329,7 @@ func TestToolIsToIgnore(t *testing.T) { tools.SecurityCodeScan: toolsconfig.Config{IsToIgnore: true}, } - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, configs) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), configs) assert.Equal(t, true, monitorController.ToolIsToIgnore(tools.GoSec)) }) @@ -342,12 +341,12 @@ func TestToolIsToIgnore(t *testing.T) { }, } - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, configs) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), configs) assert.Equal(t, false, monitorController.ToolIsToIgnore(tools.GoSec)) }) t.Run("should return false when language not exists", func(t *testing.T) { - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, &config.Config{}) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), &config.Config{}) assert.Equal(t, false, monitorController.ToolIsToIgnore(tools.GoSec)) }) @@ -355,21 +354,21 @@ func TestToolIsToIgnore(t *testing.T) { func TestService_GetCodeWithMaxCharacters(t *testing.T) { t.Run("should return default code", func(t *testing.T) { - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, &config.Config{}) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), &config.Config{}) code := "text" column := 0 newCode := monitorController.GetCodeWithMaxCharacters(code, column) assert.Equal(t, "text", newCode) }) t.Run("should return default code if column is negative", func(t *testing.T) { - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, &config.Config{}) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), &config.Config{}) code := "text" column := -1 newCode := monitorController.GetCodeWithMaxCharacters(code, column) assert.Equal(t, "text", newCode) }) t.Run("should return 4:105 characters when text is so bigger", func(t *testing.T) { - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, &config.Config{}) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), &config.Config{}) code := "text" for i := 0; i < 10; i++ { for i := 0; i <= 9; i++ { @@ -381,7 +380,7 @@ func TestService_GetCodeWithMaxCharacters(t *testing.T) { assert.Equal(t, "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789", newCode) }) t.Run("should return first 100 characters when text is so bigger", func(t *testing.T) { - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, &config.Config{}) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), &config.Config{}) code := "text" for i := 0; i < 10; i++ { for i := 0; i <= 9; i++ { @@ -393,7 +392,7 @@ func TestService_GetCodeWithMaxCharacters(t *testing.T) { assert.Equal(t, "text012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345", newCode) }) t.Run("should return first 100 characters when text contains breaking lines", func(t *testing.T) { - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, &config.Config{}) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), &config.Config{}) code := `22: func GetMD5(s string) string { 23: h := md5.New() 24: io.WriteString(h, s) // #nohorus @@ -406,7 +405,7 @@ func TestService_GetCodeWithMaxCharacters(t *testing.T) { `, newCode) }) t.Run("should return first 100 characters when text is so bigger", func(t *testing.T) { - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, &config.Config{}) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), &config.Config{}) code := "text" for i := 0; i <= 200; i++ { code += strconv.Itoa(i) @@ -416,7 +415,7 @@ func TestService_GetCodeWithMaxCharacters(t *testing.T) { assert.Equal(t, "4041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889", newCode) }) t.Run("should return first 100 characters when text is so bigger", func(t *testing.T) { - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, &config.Config{}) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), &config.Config{}) code := "text" for i := 0; i <= 200; i++ { code += strconv.Itoa(i) @@ -429,17 +428,17 @@ func TestService_GetCodeWithMaxCharacters(t *testing.T) { func TestRemoveSrcFolderFromPath(t *testing.T) { t.Run("should return path without src prefix", func(t *testing.T) { - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, &config.Config{}) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), &config.Config{}) result := monitorController.RemoveSrcFolderFromPath(filepath.Join("src", "something")) assert.Equal(t, filepath.Base("something"), result) }) t.Run("should return path without diff when src is after 4 index position", func(t *testing.T) { - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, &config.Config{}) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), &config.Config{}) result := monitorController.RemoveSrcFolderFromPath(filepath.Join("something", "src")) assert.Equal(t, filepath.Join("something", "src"), result) }) t.Run("should return path without diff when src is before 4 index position", func(t *testing.T) { - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, &config.Config{}) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), &config.Config{}) result := monitorController.RemoveSrcFolderFromPath(filepath.Base("src")) assert.Equal(t, filepath.Base("src"), result) }) @@ -452,7 +451,7 @@ func TestGetFilepathFromFilename(t *testing.T) { ProjectPath: testutil.GoExample1, }, } - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, cfg) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), cfg) dirName := filepath.Join(cfg.ProjectPath, ".horusec", monitorController.GetAnalysisID()) relativeFilePath := filepath.Join("examples", "go", "example1") filename := "server.go" @@ -479,7 +478,7 @@ func TestGetFilepathFromFilename(t *testing.T) { ProjectPath: testutil.GoExample1, }, } - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, cfg) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), cfg) filename := "server.go" result := monitorController.GetFilepathFromFilename(filename, "") @@ -496,7 +495,7 @@ func TestGetConfigCMDByFileExtension(t *testing.T) { WorkDir: &workdir.WorkDir{Go: []string{"a", "b"}}, }, } - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, cfg) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), cfg) dirName := filepath.Join(cfg.ProjectPath, ".horusec", monitorController.GetAnalysisID()) relativeFilePath := filepath.Join("examples", "go", "example1", "/") filename := "package-lock.json" @@ -544,7 +543,7 @@ func TestGetConfigCMDByFileExtension(t *testing.T) { ProjectPath: testutil.GoExample1, }, } - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, cfg) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), cfg) expectedCmd := "expectedCmd" result := monitorController.GetConfigCMDByFileExtension("relativeFilePath", expectedCmd, "package-lock.json", tools.NpmAudit) assert.Equal(t, expectedCmd, result) @@ -555,7 +554,7 @@ func TestGetConfigCMDByFileExtension(t *testing.T) { ProjectPath: testutil.GoExample1, }, } - monitorController := NewFormatterService(&analysis.Analysis{}, &docker.Mock{}, cfg) + monitorController := NewFormatterService(&analysis.Analysis{}, testutil.NewDockerMock(), cfg) workdirString := "{{WORK_DIR}}" cmd := "expectedCmd" relativeFilePath := "relativeFilePath" diff --git a/internal/services/formatters/shell/shellcheck/formatter_test.go b/internal/services/formatters/shell/shellcheck/formatter_test.go index 3bc4882bf..f696fde54 100644 --- a/internal/services/formatters/shell/shellcheck/formatter_test.go +++ b/internal/services/formatters/shell/shellcheck/formatter_test.go @@ -19,6 +19,7 @@ import ( "testing" "github.com/ZupIT/horusec/internal/entities/toolsconfig" + "github.com/ZupIT/horusec/internal/utils/testutil" entitiesAnalysis "github.com/ZupIT/horusec-devkit/pkg/entities/analysis" "github.com/ZupIT/horusec-devkit/pkg/enums/tools" @@ -27,7 +28,6 @@ import ( cliConfig "github.com/ZupIT/horusec/config" "github.com/ZupIT/horusec/internal/entities/workdir" - "github.com/ZupIT/horusec/internal/services/docker" "github.com/ZupIT/horusec/internal/services/formatters" ) @@ -39,7 +39,7 @@ func TestParseOutput(t *testing.T) { config.EnableShellCheck = true config.WorkDir = &workdir.WorkDir{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") output := "[{\"file\":\"./src/windows/formula/formula.bat\",\"line\":1,\"endLine\":1,\"column\":1,\"endColumn\":1,\"level\":\"error\",\"code\":2148,\"message\":\"Tips depend on target shell and yours is unknown. Add a shebang or a 'shell' directive.\",\"fix\":null},{\"file\":\"./src/main.bat\",\"line\":1,\"endLine\":1,\"column\":1,\"endColumn\":1,\"level\":\"error\",\"code\":2148,\"message\":\"Tips depend on target shell and yours is unknown. Add a shebang or a 'shell' directive.\",\"fix\":null},{\"file\":\"./src/main.bat\",\"line\":3,\"endLine\":3,\"column\":13,\"endColumn\":13,\"level\":\"info\",\"code\":1001,\"message\":\"This \\\\f will be a regular 'f' in this context.\",\"fix\":null},{\"file\":\"./src/main.bat\",\"line\":3,\"endLine\":3,\"column\":21,\"endColumn\":21,\"level\":\"info\",\"code\":1001,\"message\":\"This \\\\f will be a regular 'f' in this context.\",\"fix\":null},{\"file\":\"./build.bat\",\"line\":1,\"endLine\":1,\"column\":1,\"endColumn\":1,\"level\":\"error\",\"code\":2148,\"message\":\"Tips depend on target shell and yours is unknown. Add a shebang or a 'shell' directive.\",\"fix\":null},{\"file\":\"./build.bat\",\"line\":13,\"endLine\":13,\"column\":3,\"endColumn\":18,\"level\":\"warning\",\"code\":2164,\"message\":\"Use 'cd ... || exit' or 'cd ... || return' in case cd fails.\",\"fix\":{\"replacements\":[{\"line\":13,\"endLine\":13,\"precedence\":5,\"insertionPoint\":\"beforeStart\",\"column\":18,\"replacement\":\" || exit\",\"endColumn\":18}]}},{\"file\":\"./build.bat\",\"line\":25,\"endLine\":25,\"column\":3,\"endColumn\":8,\"level\":\"info\",\"code\":2103,\"message\":\"Use a ( subshell ) to avoid having to cd back.\",\"fix\":null},{\"file\":\"./build.bat\",\"line\":31,\"endLine\":31,\"column\":8,\"endColumn\":10,\"level\":\"error\",\"code\":2242,\"message\":\"Can only exit with status 0-255. Other data should be written to stdout/stderr.\",\"fix\":null},{\"file\":\"./src/unix/formula/formula.sh\",\"line\":34,\"endLine\":34,\"column\":70,\"endColumn\":83,\"level\":\"info\",\"code\":2086,\"message\":\"Double quote to prevent globbing and word splitting.\",\"fix\":{\"replacements\":[{\"line\":34,\"endLine\":34,\"precedence\":11,\"insertionPoint\":\"afterEnd\",\"column\":70,\"replacement\":\"\\\"\",\"endColumn\":70},{\"line\":34,\"endLine\":34,\"precedence\":11,\"insertionPoint\":\"beforeStart\",\"column\":83,\"replacement\":\"\\\"\",\"endColumn\":83}]}},{\"file\":\"./src/unix/formula/formula.sh\",\"line\":44,\"endLine\":44,\"column\":24,\"endColumn\":33,\"level\":\"info\",\"code\":2086,\"message\":\"Double quote to prevent globbing and word splitting.\",\"fix\":{\"replacements\":[{\"line\":44,\"endLine\":44,\"precedence\":21,\"insertionPoint\":\"afterEnd\",\"column\":24,\"replacement\":\"\\\"\",\"endColumn\":24},{\"line\":44,\"endLine\":44,\"precedence\":21,\"insertionPoint\":\"beforeStart\",\"column\":33,\"replacement\":\"\\\"\",\"endColumn\":33}]}}]" @@ -63,7 +63,7 @@ func TestParseOutput(t *testing.T) { config.EnableShellCheck = true config.WorkDir = &workdir.WorkDir{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer").Return("", nil) @@ -85,7 +85,7 @@ func TestParseOutput(t *testing.T) { config.EnableShellCheck = true config.WorkDir = &workdir.WorkDir{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") output := "Please supply the path to a Rails application" @@ -110,7 +110,7 @@ func TestParseOutput(t *testing.T) { config.EnableShellCheck = true config.WorkDir = &workdir.WorkDir{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer").Return("invalid output", nil) @@ -123,7 +123,7 @@ func TestParseOutput(t *testing.T) { t.Run("Should return error when something went wrong in container", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() dockerAPIControllerMock.On("SetAnalysisID") dockerAPIControllerMock.On("CreateLanguageAnalysisContainer").Return("", errors.New("test")) @@ -139,7 +139,7 @@ func TestParseOutput(t *testing.T) { }) t.Run("Should not execute tool because it's ignored", func(t *testing.T) { analysis := &entitiesAnalysis.Analysis{} - dockerAPIControllerMock := &docker.Mock{} + dockerAPIControllerMock := testutil.NewDockerMock() config := &cliConfig.Config{} config.EnableShellCheck = true config.ToolsConfig = toolsconfig.ToolsConfig{ diff --git a/internal/services/horusec_api/horus_api_test.go b/internal/services/horusec_api/horus_api_test.go index 9f80086e0..498c05578 100644 --- a/internal/services/horusec_api/horus_api_test.go +++ b/internal/services/horusec_api/horus_api_test.go @@ -29,9 +29,8 @@ import ( "github.com/google/uuid" "github.com/stretchr/testify/assert" - enumHorusec "github.com/ZupIT/horusec-devkit/pkg/enums/analysis" - "github.com/ZupIT/horusec-devkit/pkg/entities/analysis" + enumHorusec "github.com/ZupIT/horusec-devkit/pkg/enums/analysis" cliConfig "github.com/ZupIT/horusec/config" ) diff --git a/internal/utils/prompt/prompt_test.go b/internal/utils/prompt/prompt_test.go index 6d5424b94..4110e937b 100644 --- a/internal/utils/prompt/prompt_test.go +++ b/internal/utils/prompt/prompt_test.go @@ -17,6 +17,7 @@ package prompt import ( "testing" + "github.com/ZupIT/horusec/internal/utils/testutil" "github.com/stretchr/testify/assert" ) @@ -29,14 +30,14 @@ func TestPrompt_Ask(t *testing.T) { } func TestMock_Ask(t *testing.T) { - mock := &Mock{} + mock := testutil.NewPromptMock() mock.On("Ask").Return("", nil) _, err := mock.Ask("", "") assert.NoError(t, err) } func TestMock_Select(t *testing.T) { - mock := &Mock{} + mock := testutil.NewPromptMock() mock.On("Select").Return("", nil) _, err := mock.Select("", []string{}) assert.NoError(t, err) diff --git a/internal/utils/mock/analysis_mock.go b/internal/utils/testutil/analysis_mock.go similarity index 90% rename from internal/utils/mock/analysis_mock.go rename to internal/utils/testutil/analysis_mock.go index 293e8e185..90a034787 100644 --- a/internal/utils/mock/analysis_mock.go +++ b/internal/utils/testutil/analysis_mock.go @@ -12,15 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -package mock +package testutil import ( "time" "github.com/ZupIT/horusec-devkit/pkg/entities/vulnerability" - enumsAnalysis "github.com/ZupIT/horusec-devkit/pkg/enums/analysis" + analysisenum "github.com/ZupIT/horusec-devkit/pkg/enums/analysis" "github.com/ZupIT/horusec-devkit/pkg/enums/confidence" - enumsVulnerability "github.com/ZupIT/horusec-devkit/pkg/enums/vulnerability" + vulnerabilityenum "github.com/ZupIT/horusec-devkit/pkg/enums/vulnerability" vulnhash "github.com/ZupIT/horusec/internal/utils/vuln_hash" "github.com/google/uuid" @@ -32,12 +32,14 @@ import ( ) // CreateAnalysisMock creates a mocked plain entity to use in test suites. +// +// nolint: funlen func CreateAnalysisMock() *analysis.Analysis { mock := &analysis.Analysis{ ID: uuid.New(), RepositoryID: uuid.New(), WorkspaceID: uuid.New(), - Status: enumsAnalysis.Success, + Status: analysisenum.Success, Errors: "", CreatedAt: time.Now(), FinishedAt: time.Now(), @@ -57,6 +59,8 @@ func CreateAnalysisMock() *analysis.Analysis { // ReturnEachTypeOfVulnerability generates a generic []Vulnerability // with 1 vulnerability of each tool/language. // The Severity and CommitAuthor are empty on purpose +// +// nolint: funlen func ReturnEachTypeOfVulnerability() []vulnerability.Vulnerability { return []vulnerability.Vulnerability{ *vulnhash.Bind(&vulnerability.Vulnerability{ @@ -70,7 +74,7 @@ func ReturnEachTypeOfVulnerability() []vulnerability.Vulnerability { SecurityTool: tools.GoSec, Language: languages.Go, Severity: severities.Low, - Type: enumsVulnerability.Vulnerability, + Type: vulnerabilityenum.Vulnerability, }), *vulnhash.Bind(&vulnerability.Vulnerability{ VulnerabilityID: uuid.New(), @@ -84,7 +88,7 @@ func ReturnEachTypeOfVulnerability() []vulnerability.Vulnerability { Language: languages.CSharp, Severity: severities.Medium, VulnHash: uuid.New().String(), - Type: enumsVulnerability.Vulnerability, + Type: vulnerabilityenum.Vulnerability, }), *vulnhash.Bind(&vulnerability.Vulnerability{ VulnerabilityID: uuid.New(), @@ -98,7 +102,7 @@ func ReturnEachTypeOfVulnerability() []vulnerability.Vulnerability { Language: languages.Ruby, Severity: severities.High, VulnHash: uuid.New().String(), - Type: enumsVulnerability.Vulnerability, + Type: vulnerabilityenum.Vulnerability, CommitAuthor: "", CommitEmail: "", CommitHash: "", @@ -117,7 +121,7 @@ func ReturnEachTypeOfVulnerability() []vulnerability.Vulnerability { Language: languages.Javascript, Severity: severities.Low, VulnHash: uuid.New().String(), - Type: enumsVulnerability.Vulnerability, + Type: vulnerabilityenum.Vulnerability, CommitAuthor: "", CommitEmail: "", CommitHash: "", @@ -136,7 +140,7 @@ func ReturnEachTypeOfVulnerability() []vulnerability.Vulnerability { Language: languages.Javascript, Severity: severities.Low, VulnHash: uuid.New().String(), - Type: enumsVulnerability.Vulnerability, + Type: vulnerabilityenum.Vulnerability, CommitAuthor: "", CommitEmail: "", CommitHash: "", @@ -155,7 +159,7 @@ func ReturnEachTypeOfVulnerability() []vulnerability.Vulnerability { Language: languages.Python, Severity: severities.Low, VulnHash: uuid.New().String(), - Type: enumsVulnerability.Vulnerability, + Type: vulnerabilityenum.Vulnerability, CommitAuthor: "", CommitEmail: "", CommitHash: "", @@ -174,7 +178,7 @@ func ReturnEachTypeOfVulnerability() []vulnerability.Vulnerability { Language: languages.Python, Severity: severities.Low, VulnHash: uuid.New().String(), - Type: enumsVulnerability.Vulnerability, + Type: vulnerabilityenum.Vulnerability, CommitAuthor: "", CommitEmail: "", CommitHash: "", @@ -193,7 +197,7 @@ func ReturnEachTypeOfVulnerability() []vulnerability.Vulnerability { Language: languages.Leaks, Severity: severities.High, VulnHash: uuid.New().String(), - Type: enumsVulnerability.Vulnerability, + Type: vulnerabilityenum.Vulnerability, CommitAuthor: "", CommitEmail: "", CommitHash: "", @@ -212,7 +216,7 @@ func ReturnEachTypeOfVulnerability() []vulnerability.Vulnerability { Language: languages.Leaks, Severity: severities.High, VulnHash: uuid.New().String(), - Type: enumsVulnerability.Vulnerability, + Type: vulnerabilityenum.Vulnerability, CommitAuthor: "", CommitEmail: "", CommitHash: "", @@ -231,7 +235,7 @@ func ReturnEachTypeOfVulnerability() []vulnerability.Vulnerability { Language: languages.Java, Severity: severities.Low, VulnHash: uuid.New().String(), - Type: enumsVulnerability.Vulnerability, + Type: vulnerabilityenum.Vulnerability, CommitAuthor: "", CommitEmail: "", CommitHash: "", @@ -250,7 +254,7 @@ func ReturnEachTypeOfVulnerability() []vulnerability.Vulnerability { Language: languages.Kotlin, Severity: severities.Low, VulnHash: uuid.New().String(), - Type: enumsVulnerability.Vulnerability, + Type: vulnerabilityenum.Vulnerability, CommitAuthor: "", CommitEmail: "", CommitHash: "", diff --git a/internal/controllers/analyzer/analyzer_mock.go b/internal/utils/testutil/analyzer_mock.go similarity index 71% rename from internal/controllers/analyzer/analyzer_mock.go rename to internal/utils/testutil/analyzer_mock.go index 29c69a139..88d6bbf99 100644 --- a/internal/controllers/analyzer/analyzer_mock.go +++ b/internal/utils/testutil/analyzer_mock.go @@ -12,19 +12,23 @@ // See the License for the specific language governing permissions and // limitations under the License. -package analyzer +package testutil import ( "github.com/stretchr/testify/mock" - utilsMock "github.com/ZupIT/horusec-devkit/pkg/utils/mock" + mockutils "github.com/ZupIT/horusec-devkit/pkg/utils/mock" ) -type Mock struct { +type AnalyzerMock struct { mock.Mock } -func (m *Mock) Analyze() (int, error) { +func NewAnalyzerMock() *AnalyzerMock { + return new(AnalyzerMock) +} + +func (m *AnalyzerMock) Analyze() (int, error) { args := m.MethodCalled("Analyze") - return args.Get(0).(int), utilsMock.ReturnNilOrError(args, 0) + return args.Get(0).(int), mockutils.ReturnNilOrError(args, 0) } diff --git a/internal/utils/testutil/docker_mock.go b/internal/utils/testutil/docker_mock.go new file mode 100644 index 000000000..ebf5cf48a --- /dev/null +++ b/internal/utils/testutil/docker_mock.go @@ -0,0 +1,119 @@ +// Copyright 2021 ZUP IT SERVICOS EM TECNOLOGIA E INOVACAO SA +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package testutil + +import ( + "io" + + "github.com/docker/docker/api/types/network" + + mockutils "github.com/ZupIT/horusec-devkit/pkg/utils/mock" + + "context" + + dockerentities "github.com/ZupIT/horusec/internal/entities/docker" + + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" + specs "github.com/opencontainers/image-spec/specs-go/v1" + "github.com/stretchr/testify/mock" +) + +type DockerClientMock struct { + mock.Mock +} + +func NewDockerClientMock() *DockerClientMock { + return new(DockerClientMock) +} + +func (m *DockerClientMock) ContainerCreate(_ context.Context, _ *container.Config, _ *container.HostConfig, + _ *network.NetworkingConfig, _ *specs.Platform, _ string) (container.ContainerCreateCreatedBody, error) { + args := m.MethodCalled("ContainerCreate") + return args.Get(0).(container.ContainerCreateCreatedBody), mockutils.ReturnNilOrError(args, 1) +} + +func (m *DockerClientMock) ContainerStart(_ context.Context, _ string, _ types.ContainerStartOptions) error { + args := m.MethodCalled("ContainerStart") + return mockutils.ReturnNilOrError(args, 0) +} + +func (m *DockerClientMock) ContainerList(_ context.Context, _ types.ContainerListOptions) ([]types.Container, error) { + args := m.MethodCalled("ContainerList") + return args.Get(0).([]types.Container), mockutils.ReturnNilOrError(args, 1) +} + +func (m *DockerClientMock) ContainerWait(_ context.Context, _ string, _ container.WaitCondition) ( + <-chan container.ContainerWaitOKBody, <-chan error) { + args := m.MethodCalled("ContainerWait") + agr1 := make(chan container.ContainerWaitOKBody) + agr2 := make(chan error) + go func() { + agr1 <- args.Get(0).(container.ContainerWaitOKBody) + }() + go func() { + agr2 <- mockutils.ReturnNilOrError(args, 1) + }() + return agr1, agr2 +} + +func (m *DockerClientMock) ContainerLogs( + _ context.Context, _ string, _ types.ContainerLogsOptions, +) (io.ReadCloser, error) { + args := m.MethodCalled("ContainerLogs") + return args.Get(0).(io.ReadCloser), mockutils.ReturnNilOrError(args, 1) +} + +func (m *DockerClientMock) ContainerRemove(_ context.Context, _ string, _ types.ContainerRemoveOptions) error { + args := m.MethodCalled("ContainerRemove") + return mockutils.ReturnNilOrError(args, 0) +} + +func (m *DockerClientMock) ImageList(_ context.Context, _ types.ImageListOptions) ([]types.ImageSummary, error) { + args := m.MethodCalled("ImageList") + return args.Get(0).([]types.ImageSummary), mockutils.ReturnNilOrError(args, 1) +} + +func (m *DockerClientMock) ImagePull(_ context.Context, _ string, _ types.ImagePullOptions) (io.ReadCloser, error) { + args := m.MethodCalled("ImagePull") + return args.Get(0).(io.ReadCloser), mockutils.ReturnNilOrError(args, 1) +} + +func (m *DockerClientMock) Ping(_ context.Context) (types.Ping, error) { + args := m.MethodCalled("Ping") + return args.Get(0).(types.Ping), mockutils.ReturnNilOrError(args, 1) +} + +type DockerMock struct { + mock.Mock +} + +func NewDockerMock() *DockerMock { + return new(DockerMock) +} + +func (m *DockerMock) CreateLanguageAnalysisContainer(_ *dockerentities.AnalysisData) (string, error) { + args := m.MethodCalled("CreateLanguageAnalysisContainer") + return args.Get(0).(string), mockutils.ReturnNilOrError(args, 1) +} + +func (m *DockerMock) DeleteContainersFromAPI() { + m.MethodCalled("DeleteContainerFromAPI") +} + +func (m *DockerMock) PullImage(_ string) error { + args := m.MethodCalled("PullImage") + return mockutils.ReturnNilOrError(args, 0) +} diff --git a/internal/services/formatters/service_mock.go b/internal/utils/testutil/formatter_mock.go similarity index 53% rename from internal/services/formatters/service_mock.go rename to internal/utils/testutil/formatter_mock.go index b82ea9b89..c34d8a1d4 100644 --- a/internal/services/formatters/service_mock.go +++ b/internal/utils/testutil/formatter_mock.go @@ -1,4 +1,4 @@ -// Copyright 2020 ZUP IT SERVICOS EM TECNOLOGIA E INOVACAO SA +// Copyright 2021 ZUP IT SERVICOS EM TECNOLOGIA E INOVACAO SA // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package formatters +package testutil import ( "github.com/stretchr/testify/mock" @@ -20,118 +20,122 @@ import ( "github.com/ZupIT/horusec-devkit/pkg/entities/vulnerability" "github.com/ZupIT/horusec-devkit/pkg/enums/languages" "github.com/ZupIT/horusec-devkit/pkg/enums/tools" - utilsMock "github.com/ZupIT/horusec-devkit/pkg/utils/mock" + mockutils "github.com/ZupIT/horusec-devkit/pkg/utils/mock" engine "github.com/ZupIT/horusec-engine" - commitAuthor "github.com/ZupIT/horusec/internal/entities/commit_author" - dockerEntities "github.com/ZupIT/horusec/internal/entities/docker" + commitauthor "github.com/ZupIT/horusec/internal/entities/commit_author" + dockerentities "github.com/ZupIT/horusec/internal/entities/docker" ) -type Mock struct { +type FormatterMock struct { mock.Mock } -func (m *Mock) LogDebugWithReplace(_ string, _ tools.Tool, _ languages.Language) { +func NewFormatterMock() *FormatterMock { + return new(FormatterMock) +} + +func (m *FormatterMock) LogDebugWithReplace(_ string, _ tools.Tool, _ languages.Language) { _ = m.MethodCalled("LogDebugWithReplace") } -func (m *Mock) GetAnalysisID() string { +func (m *FormatterMock) GetAnalysisID() string { args := m.MethodCalled("GetAnalysisID") return args.Get(0).(string) } -func (m *Mock) ExecuteContainer(_ *dockerEntities.AnalysisData) (output string, err error) { +func (m *FormatterMock) ExecuteContainer(_ *dockerentities.AnalysisData) (output string, err error) { args := m.MethodCalled("ExecuteContainer") - return args.Get(0).(string), utilsMock.ReturnNilOrError(args, 1) + return args.Get(0).(string), mockutils.ReturnNilOrError(args, 1) } -func (m *Mock) GetAnalysisIDErrorMessage(_ tools.Tool, _ string) string { +func (m *FormatterMock) GetAnalysisIDErrorMessage(_ tools.Tool, _ string) string { args := m.MethodCalled("GetAnalysisIDErrorMessage") return args.Get(0).(string) } -func (m *Mock) GetCommitAuthor(_, _ string) (author commitAuthor.CommitAuthor) { +func (m *FormatterMock) GetCommitAuthor(_, _ string) (author commitauthor.CommitAuthor) { args := m.MethodCalled("GetCommitAuthor") - return args.Get(0).(commitAuthor.CommitAuthor) + return args.Get(0).(commitauthor.CommitAuthor) } -func (m *Mock) AddWorkDirInCmd(_ string, _ string, _ tools.Tool) string { +func (m *FormatterMock) AddWorkDirInCmd(_, _ string, _ tools.Tool) string { args := m.MethodCalled("AddWorkDirInCmd") return args.Get(0).(string) } -func (m *Mock) GetConfigProjectPath() string { +func (m *FormatterMock) GetConfigProjectPath() string { args := m.MethodCalled("GetConfigProjectPath") return args.Get(0).(string) } -func (m *Mock) SetAnalysisError(_ error, _ tools.Tool, _ string) { +func (m *FormatterMock) SetAnalysisError(_ error, _ tools.Tool, _ string) { _ = m.MethodCalled("SetAnalysisError") } -func (m *Mock) RemoveSrcFolderFromPath(_ string) string { +func (m *FormatterMock) RemoveSrcFolderFromPath(_ string) string { args := m.MethodCalled("RemoveSrcFolderFromPath") return args.Get(0).(string) } -func (m *Mock) GetCodeWithMaxCharacters(_ string, _ int) string { +func (m *FormatterMock) GetCodeWithMaxCharacters(_ string, _ int) string { args := m.MethodCalled("GetCodeWithMaxCharacters") return args.Get(0).(string) } -func (m *Mock) ToolIsToIgnore(_ tools.Tool) bool { +func (m *FormatterMock) ToolIsToIgnore(_ tools.Tool) bool { args := m.MethodCalled("ToolIsToIgnore") return args.Get(0).(bool) } -func (m *Mock) GetFilepathFromFilename(_, _ string) string { +func (m *FormatterMock) GetFilepathFromFilename(_, _ string) string { args := m.MethodCalled("GetFilepathFromFilename") return args.Get(0).(string) } -func (m *Mock) GetProjectPathWithWorkdir(_ string) string { +func (m *FormatterMock) GetProjectPathWithWorkdir(_ string) string { args := m.MethodCalled("GetProjectPathWithWorkdir") return args.Get(0).(string) } -func (m *Mock) SetCommitAuthor(_ *vulnerability.Vulnerability) *vulnerability.Vulnerability { +func (m *FormatterMock) SetCommitAuthor(_ *vulnerability.Vulnerability) *vulnerability.Vulnerability { args := m.MethodCalled("SetCommitAuthor") return args.Get(0).(*vulnerability.Vulnerability) } -func (m *Mock) ParseFindingsToVulnerabilities(_ []engine.Finding, _ tools.Tool, _ languages.Language) { +func (m *FormatterMock) ParseFindingsToVulnerabilities(_ []engine.Finding, _ tools.Tool, _ languages.Language) { _ = m.MethodCalled("ParseFindingsToVulnerabilities") } -func (m *Mock) AddNewVulnerabilityIntoAnalysis(_ *vulnerability.Vulnerability) { +func (m *FormatterMock) AddNewVulnerabilityIntoAnalysis(_ *vulnerability.Vulnerability) { _ = m.MethodCalled("AddNewVulnerabilityIntoAnalysis") } -func (m *Mock) IsDockerDisabled() bool { +func (m *FormatterMock) IsDockerDisabled() bool { args := m.MethodCalled("IsDockerDisabled") return args.Get(0).(bool) } -func (m *Mock) GetCustomRulesByLanguage(_ languages.Language) []engine.Rule { +func (m *FormatterMock) GetCustomRulesByLanguage(_ languages.Language) []engine.Rule { args := m.MethodCalled("GetCustomRulesByLanguage") return args.Get(0).([]engine.Rule) } -func (m *Mock) GetConfigCMDByFileExtension(_, _, _ string, _ tools.Tool) string { +func (m *FormatterMock) GetConfigCMDByFileExtension(_, _, _ string, _ tools.Tool) string { args := m.MethodCalled("GetConfigCMDByFileExtension") return args.Get(0).(string) } -func (m *Mock) GetCustomImageByLanguage(_ languages.Language) string { +func (m *FormatterMock) GetCustomImageByLanguage(_ languages.Language) string { args := m.MethodCalled("GetCustomImageByLanguage") return args.Get(0).(string) } -func (m *Mock) IsOwaspDependencyCheckDisable() bool { +func (m *FormatterMock) IsOwaspDependencyCheckDisable() bool { args := m.MethodCalled("IsOwaspDependencyCheckDisable") return args.Get(0).(bool) } -func (m *Mock) IsShellcheckDisable() bool { +func (m *FormatterMock) IsShellcheckDisable() bool { args := m.MethodCalled("IsShellcheckDisable") return args.Get(0).(bool) } diff --git a/internal/services/horusec_api/horus_api_mock.go b/internal/utils/testutil/horusec_api_mock.go similarity index 78% rename from internal/services/horusec_api/horus_api_mock.go rename to internal/utils/testutil/horusec_api_mock.go index 36781efbd..40918b490 100644 --- a/internal/services/horusec_api/horus_api_mock.go +++ b/internal/utils/testutil/horusec_api_mock.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package horusecapi +package testutil import ( "github.com/google/uuid" @@ -23,16 +23,20 @@ import ( "github.com/ZupIT/horusec-devkit/pkg/entities/analysis" ) -type Mock struct { +type HorusecAPIMock struct { mock.Mock } -func (m *Mock) SendAnalysis(_ *analysis.Analysis) error { +func NewHorusecAPIMock() *HorusecAPIMock { + return new(HorusecAPIMock) +} + +func (m *HorusecAPIMock) SendAnalysis(_ *analysis.Analysis) error { m.MethodCalled("SendAnalysis") return nil } -func (m *Mock) GetAnalysis(_ uuid.UUID) (*analysis.Analysis, error) { +func (m *HorusecAPIMock) GetAnalysis(_ uuid.UUID) (*analysis.Analysis, error) { args := m.MethodCalled("GetAnalysis") return args.Get(0).(*analysis.Analysis), utilsmock.ReturnNilOrError(args, 1) } diff --git a/internal/controllers/language_detect/language_detect_mock.go b/internal/utils/testutil/language_detect_mock.go similarity index 68% rename from internal/controllers/language_detect/language_detect_mock.go rename to internal/utils/testutil/language_detect_mock.go index b00bfdd42..f253559bc 100644 --- a/internal/controllers/language_detect/language_detect_mock.go +++ b/internal/utils/testutil/language_detect_mock.go @@ -12,20 +12,24 @@ // See the License for the specific language governing permissions and // limitations under the License. -package languagedetect +package testutil import ( "github.com/stretchr/testify/mock" "github.com/ZupIT/horusec-devkit/pkg/enums/languages" - mock2 "github.com/ZupIT/horusec-devkit/pkg/utils/mock" + mockutils "github.com/ZupIT/horusec-devkit/pkg/utils/mock" ) -type Mock struct { +type LanguageDetectMock struct { mock.Mock } -func (m *Mock) Detect(_ string) ([]languages.Language, error) { +func NewLanguageDetectMock() *LanguageDetectMock { + return new(LanguageDetectMock) +} + +func (m *LanguageDetectMock) Detect(_ string) ([]languages.Language, error) { args := m.MethodCalled("LanguageDetect") - return args.Get(0).([]languages.Language), mock2.ReturnNilOrError(args, 1) + return args.Get(0).([]languages.Language), mockutils.ReturnNilOrError(args, 1) } diff --git a/internal/controllers/printresults/print_results_mock.go b/internal/utils/testutil/print_results_mock.go similarity index 68% rename from internal/controllers/printresults/print_results_mock.go rename to internal/utils/testutil/print_results_mock.go index f36ea5dc8..ad0869bf7 100644 --- a/internal/controllers/printresults/print_results_mock.go +++ b/internal/utils/testutil/print_results_mock.go @@ -12,24 +12,28 @@ // See the License for the specific language governing permissions and // limitations under the License. -package printresults +package testutil import ( "github.com/stretchr/testify/mock" entitiesAnalysis "github.com/ZupIT/horusec-devkit/pkg/entities/analysis" - utilsMock "github.com/ZupIT/horusec-devkit/pkg/utils/mock" + mockutils "github.com/ZupIT/horusec-devkit/pkg/utils/mock" ) -type Mock struct { +type PrintResultsMock struct { mock.Mock } -func (m *Mock) Print() (totalVulns int, err error) { +func NewPrintResultsMock() *PrintResultsMock { + return new(PrintResultsMock) +} + +func (m *PrintResultsMock) Print() (totalVulns int, err error) { args := m.MethodCalled("StartPrintResults") - return args.Get(0).(int), utilsMock.ReturnNilOrError(args, 0) + return args.Get(0).(int), mockutils.ReturnNilOrError(args, 0) } -func (m *Mock) SetAnalysis(analysis *entitiesAnalysis.Analysis) { +func (m *PrintResultsMock) SetAnalysis(analysis *entitiesAnalysis.Analysis) { _ = m.MethodCalled("SetAnalysis") } diff --git a/internal/utils/prompt/prompt_mock.go b/internal/utils/testutil/prompt_mock.go similarity index 63% rename from internal/utils/prompt/prompt_mock.go rename to internal/utils/testutil/prompt_mock.go index 75ac92da7..8c09643f6 100644 --- a/internal/utils/prompt/prompt_mock.go +++ b/internal/utils/testutil/prompt_mock.go @@ -12,23 +12,27 @@ // See the License for the specific language governing permissions and // limitations under the License. -package prompt +package testutil import ( "github.com/stretchr/testify/mock" - utilsMock "github.com/ZupIT/horusec-devkit/pkg/utils/mock" + mockutils "github.com/ZupIT/horusec-devkit/pkg/utils/mock" ) -type Mock struct { +type PromptMock struct { mock.Mock } -func (m *Mock) Ask(label, defaultValue string) (string, error) { +func NewPromptMock() *PromptMock { + return new(PromptMock) +} + +func (m *PromptMock) Ask(label, defaultValue string) (string, error) { args := m.MethodCalled("Ask") - return args.Get(0).(string), utilsMock.ReturnNilOrError(args, 1) + return args.Get(0).(string), mockutils.ReturnNilOrError(args, 1) } -func (m *Mock) Select(label string, items []string) (string, error) { +func (m *PromptMock) Select(label string, items []string) (string, error) { args := m.MethodCalled("Select") - return args.Get(0).(string), utilsMock.ReturnNilOrError(args, 1) + return args.Get(0).(string), mockutils.ReturnNilOrError(args, 1) } diff --git a/internal/utils/testutil/request_mock.go b/internal/utils/testutil/request_mock.go new file mode 100644 index 000000000..d06ffadf5 --- /dev/null +++ b/internal/utils/testutil/request_mock.go @@ -0,0 +1,25 @@ +// Copyright 2021 ZUP IT SERVICOS EM TECNOLOGIA E INOVACAO SA +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package testutil + +import ( + "github.com/ZupIT/horusec-devkit/pkg/services/http/request" +) + +type RequestMock request.Mock + +func NewRequestMock() *RequestMock { + return new(RequestMock) +} diff --git a/internal/controllers/requirements/requirements_mock.go b/internal/utils/testutil/requirements_mock.go similarity index 77% rename from internal/controllers/requirements/requirements_mock.go rename to internal/utils/testutil/requirements_mock.go index 8d6c1b3ca..acdc4c003 100644 --- a/internal/controllers/requirements/requirements_mock.go +++ b/internal/utils/testutil/requirements_mock.go @@ -12,20 +12,24 @@ // See the License for the specific language governing permissions and // limitations under the License. -package requirements +package testutil import ( "github.com/stretchr/testify/mock" ) -type Mock struct { +type RequirementsMock struct { mock.Mock } -func (m *Mock) ValidateDocker() { +func NewRequirementsMock() *RequirementsMock { + return new(RequirementsMock) +} + +func (m *RequirementsMock) ValidateDocker() { _ = m.MethodCalled("ValidateDocker") } -func (m *Mock) ValidateGit() { +func (m *RequirementsMock) ValidateGit() { _ = m.MethodCalled("ValidateGit") }