From ac19d0ea4c52881cc579ffb48441786339c68b36 Mon Sep 17 00:00:00 2001 From: Teodora Sandu Date: Fri, 5 Apr 2024 14:09:09 +0100 Subject: [PATCH 1/3] refactor: change signature of code scanner --- bundle/bundle.go | 26 +++------------ bundle/bundle_manager.go | 6 ++-- bundle/bundle_manager_test.go | 12 ++++--- bundle/bundle_test.go | 14 ++++---- bundle/mocks/bundle.go | 36 +++----------------- bundle/mocks/bundle_manager.go | 8 ++--- scan.go | 56 +++++++++++++++++++------------ scan_test.go | 61 +++++++++++++++++----------------- 8 files changed, 95 insertions(+), 124 deletions(-) diff --git a/bundle/bundle.go b/bundle/bundle.go index ebff8c2a..1433dd71 100644 --- a/bundle/bundle.go +++ b/bundle/bundle.go @@ -26,10 +26,8 @@ import ( //go:generate mockgen -destination=mocks/bundle.go -source=bundle.go -package mocks type Bundle interface { - UploadBatch(ctx context.Context, batch *Batch) error + UploadBatch(ctx context.Context, requestId string, batch *Batch) error GetBundleHash() string - GetRootPath() string - GetRequestId() string GetFiles() map[string]deepcode.BundleFile GetMissingFiles() []string } @@ -39,8 +37,6 @@ type deepCodeBundle struct { instrumentor observability.Instrumentor errorReporter observability.ErrorReporter logger *zerolog.Logger - requestId string - rootPath string files map[string]deepcode.BundleFile bundleHash string batches []*Batch @@ -54,8 +50,6 @@ func NewBundle( errorReporter observability.ErrorReporter, logger *zerolog.Logger, bundleHash string, - requestId string, - rootPath string, files map[string]deepcode.BundleFile, limitToFiles []string, missingFiles []string, @@ -66,8 +60,6 @@ func NewBundle( errorReporter: errorReporter, logger: logger, bundleHash: bundleHash, - requestId: requestId, - rootPath: rootPath, batches: []*Batch{}, files: files, limitToFiles: limitToFiles, @@ -79,14 +71,6 @@ func (b *deepCodeBundle) GetBundleHash() string { return b.bundleHash } -func (b *deepCodeBundle) GetRootPath() string { - return b.rootPath -} - -func (b *deepCodeBundle) GetRequestId() string { - return b.requestId -} - func (b *deepCodeBundle) GetFiles() map[string]deepcode.BundleFile { return b.files } @@ -95,8 +79,8 @@ func (b *deepCodeBundle) GetMissingFiles() []string { return b.missingFiles } -func (b *deepCodeBundle) UploadBatch(ctx context.Context, batch *Batch) error { - err := b.extendBundle(ctx, batch) +func (b *deepCodeBundle) UploadBatch(ctx context.Context, requestId string, batch *Batch) error { + err := b.extendBundle(ctx, requestId, batch) if err != nil { return err } @@ -104,11 +88,11 @@ func (b *deepCodeBundle) UploadBatch(ctx context.Context, batch *Batch) error { return nil } -func (b *deepCodeBundle) extendBundle(ctx context.Context, uploadBatch *Batch) error { +func (b *deepCodeBundle) extendBundle(ctx context.Context, requestId string, uploadBatch *Batch) error { var err error if uploadBatch.hasContent() { b.bundleHash, b.missingFiles, err = b.SnykCode.ExtendBundle(ctx, b.bundleHash, uploadBatch.documents, []string{}) - b.logger.Debug().Str("requestId", b.requestId).Interface("MissingFiles", b.missingFiles).Msg("extended deepCodeBundle on backend") + b.logger.Debug().Str("requestId", requestId).Interface("MissingFiles", b.missingFiles).Msg("extended deepCodeBundle on backend") } return err diff --git a/bundle/bundle_manager.go b/bundle/bundle_manager.go index 45f54196..d4d89626 100644 --- a/bundle/bundle_manager.go +++ b/bundle/bundle_manager.go @@ -50,6 +50,7 @@ type BundleManager interface { Upload( ctx context.Context, + requestId string, originalBundle Bundle, files map[string]deepcode.BundleFile, ) (Bundle, error) @@ -139,8 +140,6 @@ func (b *bundleManager) Create(ctx context.Context, b.errorReporter, b.logger, bundleHash, - requestId, - rootPath, bundleFiles, limitToFiles, missingFiles, @@ -150,6 +149,7 @@ func (b *bundleManager) Create(ctx context.Context, func (b *bundleManager) Upload( ctx context.Context, + requestId string, bundle Bundle, files map[string]deepcode.BundleFile, ) (Bundle, error) { @@ -168,7 +168,7 @@ func (b *bundleManager) Upload( if err := ctx.Err(); err != nil { return bundle, err } - err := bundle.UploadBatch(s.Context(), batch) + err := bundle.UploadBatch(s.Context(), requestId, batch) if err != nil { return bundle, err } diff --git a/bundle/bundle_manager_test.go b/bundle/bundle_manager_test.go index c7d21564..f5c055a0 100644 --- a/bundle/bundle_manager_test.go +++ b/bundle/bundle_manager_test.go @@ -284,8 +284,10 @@ func Test_Upload(t *testing.T) { bundleFileMap := map[string]deepcode2.BundleFile{} bundleFileMap[documentURI] = bundleFile - _, err := bundleManager.Upload(context.Background(), - bundle.NewBundle(mockSnykCodeClient, mockInstrumentor, mockErrorReporter, &logger, "bundleHash", "testRequestId", "", bundleFileMap, []string{}, []string{documentURI}), + _, err := bundleManager.Upload( + context.Background(), + "testRequestId", + bundle.NewBundle(mockSnykCodeClient, mockInstrumentor, mockErrorReporter, &logger, "bundleHash", bundleFileMap, []string{}, []string{documentURI}), bundleFileMap) assert.NoError(t, err) }) @@ -321,8 +323,10 @@ func Test_Upload(t *testing.T) { bundleFileMap[path] = bundleFile missingFiles = append(missingFiles, path) - _, err := bundleManager.Upload(context.Background(), - bundle.NewBundle(mockSnykCodeClient, mockInstrumentor, mockErrorReporter, &logger, "bundleHash", "testRequestId", "", bundleFileMap, []string{}, missingFiles), + _, err := bundleManager.Upload( + context.Background(), + "testRequestId", + bundle.NewBundle(mockSnykCodeClient, mockInstrumentor, mockErrorReporter, &logger, "bundleHash", bundleFileMap, []string{}, missingFiles), bundleFileMap) assert.Nil(t, err) }) diff --git a/bundle/bundle_test.go b/bundle/bundle_test.go index bb539543..c38a7255 100644 --- a/bundle/bundle_test.go +++ b/bundle/bundle_test.go @@ -50,10 +50,10 @@ func Test_UploadBatch(t *testing.T) { mockInstrumentor.EXPECT().StartSpan(gomock.Any(), gomock.Any()).Return(mockSpan).AnyTimes() mockInstrumentor.EXPECT().Finish(gomock.Any()).AnyTimes() mockErrorReporter := mocks.NewMockErrorReporter(ctrl) - b := bundle.NewBundle(mockSnykCodeClient, mockInstrumentor, mockErrorReporter, &testLogger, "testBundleHash", "testRequestId", "", map[string]deepcode.BundleFile{}, []string{}, []string{}) + b := bundle.NewBundle(mockSnykCodeClient, mockInstrumentor, mockErrorReporter, &testLogger, "testBundleHash", map[string]deepcode.BundleFile{}, []string{}, []string{}) emptyBundle := &bundle.Batch{} - err := b.UploadBatch(context.Background(), emptyBundle) + err := b.UploadBatch(context.Background(), "testRequestId", emptyBundle) assert.NoError(t, err) }) @@ -70,9 +70,9 @@ func Test_UploadBatch(t *testing.T) { mockInstrumentor.EXPECT().StartSpan(gomock.Any(), gomock.Any()).Return(mockSpan).AnyTimes() mockInstrumentor.EXPECT().Finish(gomock.Any()).AnyTimes() mockErrorReporter := mocks.NewMockErrorReporter(ctrl) - b := bundle.NewBundle(mockSnykCodeClient, mockInstrumentor, mockErrorReporter, &testLogger, "testBundleHash", "testRequestId", "", map[string]deepcode.BundleFile{}, []string{}, []string{}) + b := bundle.NewBundle(mockSnykCodeClient, mockInstrumentor, mockErrorReporter, &testLogger, "testBundleHash", map[string]deepcode.BundleFile{}, []string{}, []string{}) - err := b.UploadBatch(context.Background(), bundleWithFiles) + err := b.UploadBatch(context.Background(), "testRequestId", bundleWithFiles) assert.NoError(t, err) }) @@ -93,12 +93,12 @@ func Test_UploadBatch(t *testing.T) { mockInstrumentor.EXPECT().StartSpan(gomock.Any(), gomock.Any()).Return(mockSpan).AnyTimes() mockInstrumentor.EXPECT().Finish(gomock.Any()).AnyTimes() mockErrorReporter := mocks.NewMockErrorReporter(ctrl) - b := bundle.NewBundle(mockSnykCodeClient, mockInstrumentor, mockErrorReporter, &testLogger, "testBundleHash", "testRequestId", "", map[string]deepcode.BundleFile{}, []string{}, []string{}) + b := bundle.NewBundle(mockSnykCodeClient, mockInstrumentor, mockErrorReporter, &testLogger, "testBundleHash", map[string]deepcode.BundleFile{}, []string{}, []string{}) - err := b.UploadBatch(context.Background(), bundleWithFiles) + err := b.UploadBatch(context.Background(), "testRequestId", bundleWithFiles) require.NoError(t, err) oldHash := b.GetBundleHash() - err = b.UploadBatch(context.Background(), bundleWithMultipleFiles) + err = b.UploadBatch(context.Background(), "testRequestId", bundleWithMultipleFiles) require.NoError(t, err) newHash := b.GetBundleHash() assert.NotEqual(t, oldHash, newHash) diff --git a/bundle/mocks/bundle.go b/bundle/mocks/bundle.go index cd49881b..eb70a3eb 100644 --- a/bundle/mocks/bundle.go +++ b/bundle/mocks/bundle.go @@ -78,44 +78,16 @@ func (mr *MockBundleMockRecorder) GetMissingFiles() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMissingFiles", reflect.TypeOf((*MockBundle)(nil).GetMissingFiles)) } -// GetRequestId mocks base method. -func (m *MockBundle) GetRequestId() string { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetRequestId") - ret0, _ := ret[0].(string) - return ret0 -} - -// GetRequestId indicates an expected call of GetRequestId. -func (mr *MockBundleMockRecorder) GetRequestId() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRequestId", reflect.TypeOf((*MockBundle)(nil).GetRequestId)) -} - -// GetRootPath mocks base method. -func (m *MockBundle) GetRootPath() string { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetRootPath") - ret0, _ := ret[0].(string) - return ret0 -} - -// GetRootPath indicates an expected call of GetRootPath. -func (mr *MockBundleMockRecorder) GetRootPath() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRootPath", reflect.TypeOf((*MockBundle)(nil).GetRootPath)) -} - // UploadBatch mocks base method. -func (m *MockBundle) UploadBatch(ctx context.Context, batch *bundle.Batch) error { +func (m *MockBundle) UploadBatch(ctx context.Context, requestId string, batch *bundle.Batch) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UploadBatch", ctx, batch) + ret := m.ctrl.Call(m, "UploadBatch", ctx, requestId, batch) ret0, _ := ret[0].(error) return ret0 } // UploadBatch indicates an expected call of UploadBatch. -func (mr *MockBundleMockRecorder) UploadBatch(ctx, batch interface{}) *gomock.Call { +func (mr *MockBundleMockRecorder) UploadBatch(ctx, requestId, batch interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UploadBatch", reflect.TypeOf((*MockBundle)(nil).UploadBatch), ctx, batch) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UploadBatch", reflect.TypeOf((*MockBundle)(nil).UploadBatch), ctx, requestId, batch) } diff --git a/bundle/mocks/bundle_manager.go b/bundle/mocks/bundle_manager.go index bdd82031..f39e5254 100644 --- a/bundle/mocks/bundle_manager.go +++ b/bundle/mocks/bundle_manager.go @@ -52,16 +52,16 @@ func (mr *MockBundleManagerMockRecorder) Create(ctx, requestId, rootPath, filePa } // Upload mocks base method. -func (m *MockBundleManager) Upload(ctx context.Context, originalBundle bundle.Bundle, files map[string]deepcode.BundleFile) (bundle.Bundle, error) { +func (m *MockBundleManager) Upload(ctx context.Context, requestId string, originalBundle bundle.Bundle, files map[string]deepcode.BundleFile) (bundle.Bundle, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Upload", ctx, originalBundle, files) + ret := m.ctrl.Call(m, "Upload", ctx, requestId, originalBundle, files) ret0, _ := ret[0].(bundle.Bundle) ret1, _ := ret[1].(error) return ret0, ret1 } // Upload indicates an expected call of Upload. -func (mr *MockBundleManagerMockRecorder) Upload(ctx, originalBundle, files interface{}) *gomock.Call { +func (mr *MockBundleManagerMockRecorder) Upload(ctx, requestId, originalBundle, files interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Upload", reflect.TypeOf((*MockBundleManager)(nil).Upload), ctx, originalBundle, files) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Upload", reflect.TypeOf((*MockBundleManager)(nil).Upload), ctx, requestId, originalBundle, files) } diff --git a/scan.go b/scan.go index db7841bf..35568f53 100644 --- a/scan.go +++ b/scan.go @@ -22,6 +22,9 @@ import ( "github.com/pkg/errors" "github.com/rs/zerolog" "github.com/rs/zerolog/log" + "github.com/snyk/code-client-go/config" + "github.com/snyk/code-client-go/deepcode" + codeClientHTTP "github.com/snyk/code-client-go/http" "github.com/snyk/code-client-go/bundle" "github.com/snyk/code-client-go/internal/analysis" @@ -31,7 +34,6 @@ import ( type codeScanner struct { bundleManager bundle.BundleManager - instrumentor observability.Instrumentor errorReporter observability.ErrorReporter logger *zerolog.Logger } @@ -39,84 +41,94 @@ type codeScanner struct { type CodeScanner interface { UploadAndAnalyze( ctx context.Context, + requestId string, path string, files <-chan string, changedFiles map[string]bool, - ) (*sarif.SarifResponse, bundle.Bundle, error) + ) (*sarif.SarifResponse, string, error) } // NewCodeScanner creates a Code Scanner which can be used to trigger Snyk Code on a folder. func NewCodeScanner( - bundleManager bundle.BundleManager, + httpClient codeClientHTTP.HTTPClient, + config config.Config, instrumentor observability.Instrumentor, errorReporter observability.ErrorReporter, logger *zerolog.Logger, ) *codeScanner { + snykCode := deepcode.NewSnykCodeClient(logger, httpClient, instrumentor, config) + bundleManager := bundle.NewBundleManager(logger, snykCode, instrumentor, errorReporter) return &codeScanner{ bundleManager: bundleManager, - instrumentor: instrumentor, errorReporter: errorReporter, logger: logger, } } +// WithBundleManager creates a new Code Scanner from the current one and replaces the bundle manager. +// It can be used to replace the bundle manager in tests. +func (c *codeScanner) WithBundleManager(bundleManager bundle.BundleManager) *codeScanner { + return &codeScanner{ + bundleManager: bundleManager, + errorReporter: c.errorReporter, + logger: c.logger, + } +} + // UploadAndAnalyze returns a fake SARIF response for testing. Use target-service to run analysis on. func (c *codeScanner) UploadAndAnalyze( ctx context.Context, + requestId string, path string, files <-chan string, changedFiles map[string]bool, -) (*sarif.SarifResponse, bundle.Bundle, error) { +) (*sarif.SarifResponse, string, error) { if ctx.Err() != nil { c.logger.Info().Msg("Canceling Code scan - Code scanner received cancellation signal") - return nil, nil, nil + return nil, "", nil } - span := c.instrumentor.StartSpan(ctx, "code.uploadAndAnalyze") - defer c.instrumentor.Finish(span) - - requestId := span.GetTraceId() // use span trace id as code-request-id - c.logger.Info().Str("requestId", requestId).Msg("Starting Code analysis.") - - b, err := c.bundleManager.Create(span.Context(), requestId, path, files, changedFiles) + b, err := c.bundleManager.Create(ctx, requestId, path, files, changedFiles) if err != nil { if bundle.IsNoFilesError(err) { - return nil, nil, nil + return nil, "", nil } if ctx.Err() == nil { // Only report errors that are not intentional cancellations msg := "error creating bundle..." c.errorReporter.CaptureError(errors.Wrap(err, msg), observability.ErrorReporterOptions{ErrorDiagnosticPath: path}) - return nil, nil, err + return nil, "", err } else { c.logger.Info().Msg("Canceling Code scan - Code scanner received cancellation signal") - return nil, nil, nil + return nil, "", nil } } uploadedFiles := b.GetFiles() - b, err = c.bundleManager.Upload(span.Context(), b, uploadedFiles) + b, err = c.bundleManager.Upload(ctx, requestId, b, uploadedFiles) + + bundleHash := b.GetBundleHash() if err != nil { if ctx.Err() != nil { // Only handle errors that are not intentional cancellations msg := "error uploading files..." c.errorReporter.CaptureError(errors.Wrap(err, msg), observability.ErrorReporterOptions{ErrorDiagnosticPath: path}) - return nil, b, err + return nil, bundleHash, err } else { log.Info().Msg("Canceling Code scan - Code scanner received cancellation signal") - return nil, b, nil + return nil, bundleHash, nil } } if b.GetBundleHash() == "" { c.logger.Info().Msg("empty bundle, no Snyk Code analysis") - return nil, b, nil + return nil, bundleHash, nil } response, err := analysis.RunAnalysis() if ctx.Err() != nil { c.logger.Info().Msg("Canceling Code scan - Code scanner received cancellation signal") - return nil, nil, nil + return nil, bundleHash, nil } - return response, b, err + return response, bundleHash, err } diff --git a/scan_test.go b/scan_test.go index 47dfdde2..f8c0f558 100644 --- a/scan_test.go +++ b/scan_test.go @@ -28,9 +28,11 @@ import ( codeclient "github.com/snyk/code-client-go" "github.com/snyk/code-client-go/bundle" - mocks2 "github.com/snyk/code-client-go/bundle/mocks" + bundleMocks "github.com/snyk/code-client-go/bundle/mocks" + confMocks "github.com/snyk/code-client-go/config/mocks" "github.com/snyk/code-client-go/deepcode" - mocks3 "github.com/snyk/code-client-go/deepcode/mocks" + deepcodeMocks "github.com/snyk/code-client-go/deepcode/mocks" + httpmocks "github.com/snyk/code-client-go/http/mocks" "github.com/snyk/code-client-go/observability/mocks" ) @@ -44,52 +46,49 @@ func Test_UploadAndAnalyze(t *testing.T) { logger := zerolog.Nop() + ctrl := gomock.NewController(t) + mockHTTPClient := httpmocks.NewMockHTTPClient(ctrl) + mockConfig := confMocks.NewMockConfig(ctrl) + mockConfig.EXPECT().SnykCodeApi().AnyTimes().Return("") + mockConfig.EXPECT().IsFedramp().AnyTimes().Return(false) + mockConfig.EXPECT().Organization().AnyTimes().Return("") + mockSpan := mocks.NewMockSpan(ctrl) + mockSpan.EXPECT().GetTraceId().Return("testRequestId").AnyTimes() + mockSpan.EXPECT().Context().Return(context.Background()).AnyTimes() + mockInstrumentor := mocks.NewMockInstrumentor(ctrl) + mockInstrumentor.EXPECT().StartSpan(gomock.Any(), gomock.Any()).Return(mockSpan).AnyTimes() + mockInstrumentor.EXPECT().Finish(gomock.Any()).AnyTimes() + mockErrorReporter := mocks.NewMockErrorReporter(ctrl) + t.Run( "should create bundle when hash empty", func(t *testing.T) { - ctrl := gomock.NewController(t) - mockSpan := mocks.NewMockSpan(ctrl) - mockSpan.EXPECT().GetTraceId().Return("testRequestId").AnyTimes() - mockSpan.EXPECT().Context().Return(context.Background()).AnyTimes() - mockInstrumentor := mocks.NewMockInstrumentor(ctrl) - mockInstrumentor.EXPECT().StartSpan(gomock.Any(), gomock.Any()).Return(mockSpan).AnyTimes() - mockInstrumentor.EXPECT().Finish(gomock.Any()).AnyTimes() - mockErrorReporter := mocks.NewMockErrorReporter(ctrl) - mockBundle := bundle.NewBundle(mocks3.NewMockSnykCodeClient(ctrl), mockInstrumentor, mockErrorReporter, &logger, "", "testRequestId", baseDir, files, []string{}, []string{}) - mockBundleManager := mocks2.NewMockBundleManager(ctrl) + mockBundle := bundle.NewBundle(deepcodeMocks.NewMockSnykCodeClient(ctrl), mockInstrumentor, mockErrorReporter, &logger, "", files, []string{}, []string{}) + mockBundleManager := bundleMocks.NewMockBundleManager(ctrl) mockBundleManager.EXPECT().Create(gomock.Any(), "testRequestId", baseDir, gomock.Any(), map[string]bool{}).Return(mockBundle, nil) - mockBundleManager.EXPECT().Upload(gomock.Any(), mockBundle, files).Return(mockBundle, nil) + mockBundleManager.EXPECT().Upload(gomock.Any(), "testRequestId", mockBundle, files).Return(mockBundle, nil) - codeScanner := codeclient.NewCodeScanner(mockBundleManager, mockInstrumentor, mockErrorReporter, &logger) + codeScanner := codeclient.NewCodeScanner(mockHTTPClient, mockConfig, mockInstrumentor, mockErrorReporter, &logger) - response, bundle, err := codeScanner.UploadAndAnalyze(context.Background(), baseDir, docs, map[string]bool{}) + response, bundleHash, err := codeScanner.WithBundleManager(mockBundleManager).UploadAndAnalyze(context.Background(), "testRequestId", baseDir, docs, map[string]bool{}) require.NoError(t, err) - assert.Equal(t, "", bundle.GetBundleHash()) - assert.Equal(t, files, bundle.GetFiles()) + assert.Equal(t, "", bundleHash) assert.Nil(t, response) }, ) t.Run( "should retrieve from backend", func(t *testing.T) { - ctrl := gomock.NewController(t) - mockSpan := mocks.NewMockSpan(ctrl) - mockSpan.EXPECT().GetTraceId().Return("testRequestId").AnyTimes() - mockSpan.EXPECT().Context().Return(context.Background()).AnyTimes() - mockInstrumentor := mocks.NewMockInstrumentor(ctrl) - mockInstrumentor.EXPECT().StartSpan(gomock.Any(), gomock.Any()).Return(mockSpan).AnyTimes() - mockInstrumentor.EXPECT().Finish(gomock.Any()).AnyTimes() - mockErrorReporter := mocks.NewMockErrorReporter(ctrl) - mockBundle := bundle.NewBundle(mocks3.NewMockSnykCodeClient(ctrl), mockInstrumentor, mockErrorReporter, &logger, "testBundleHash", "testRequestId", baseDir, files, []string{}, []string{}) - mockBundleManager := mocks2.NewMockBundleManager(ctrl) + mockBundle := bundle.NewBundle(deepcodeMocks.NewMockSnykCodeClient(ctrl), mockInstrumentor, mockErrorReporter, &logger, "testBundleHash", files, []string{}, []string{}) + mockBundleManager := bundleMocks.NewMockBundleManager(ctrl) mockBundleManager.EXPECT().Create(gomock.Any(), "testRequestId", baseDir, gomock.Any(), map[string]bool{}).Return(mockBundle, nil) - mockBundleManager.EXPECT().Upload(gomock.Any(), mockBundle, files).Return(mockBundle, nil) + mockBundleManager.EXPECT().Upload(gomock.Any(), "testRequestId", mockBundle, files).Return(mockBundle, nil) - codeScanner := codeclient.NewCodeScanner(mockBundleManager, mockInstrumentor, mockErrorReporter, &logger) + codeScanner := codeclient.NewCodeScanner(mockHTTPClient, mockConfig, mockInstrumentor, mockErrorReporter, &logger) - response, bundle, err := codeScanner.UploadAndAnalyze(context.Background(), baseDir, docs, map[string]bool{}) + response, bundleHash, err := codeScanner.WithBundleManager(mockBundleManager).UploadAndAnalyze(context.Background(), "testRequestId", baseDir, docs, map[string]bool{}) require.NoError(t, err) assert.Equal(t, "COMPLETE", response.Status) - assert.Equal(t, "testBundleHash", bundle.GetBundleHash()) + assert.Equal(t, "testBundleHash", bundleHash) }, ) } From 2e5a867b59be229e960251bc7d7ce26bf0ec2bbf Mon Sep 17 00:00:00 2001 From: Teodora Sandu Date: Fri, 5 Apr 2024 14:09:47 +0100 Subject: [PATCH 2/3] refactor: move the bundle package --- {bundle => internal/bundle}/bundle.go | 0 {bundle => internal/bundle}/bundle_manager.go | 0 .../bundle}/bundle_manager_test.go | 26 +++++++++---------- {bundle => internal/bundle}/bundle_test.go | 4 +-- {bundle => internal/bundle}/errors.go | 0 {bundle => internal/bundle}/mocks/bundle.go | 2 +- .../bundle}/mocks/bundle_manager.go | 2 +- scan.go | 7 ++--- scan_test.go | 4 +-- 9 files changed, 23 insertions(+), 22 deletions(-) rename {bundle => internal/bundle}/bundle.go (100%) rename {bundle => internal/bundle}/bundle_manager.go (100%) rename {bundle => internal/bundle}/bundle_manager_test.go (92%) rename {bundle => internal/bundle}/bundle_test.go (98%) rename {bundle => internal/bundle}/errors.go (100%) rename {bundle => internal/bundle}/mocks/bundle.go (98%) rename {bundle => internal/bundle}/mocks/bundle_manager.go (97%) diff --git a/bundle/bundle.go b/internal/bundle/bundle.go similarity index 100% rename from bundle/bundle.go rename to internal/bundle/bundle.go diff --git a/bundle/bundle_manager.go b/internal/bundle/bundle_manager.go similarity index 100% rename from bundle/bundle_manager.go rename to internal/bundle/bundle_manager.go diff --git a/bundle/bundle_manager_test.go b/internal/bundle/bundle_manager_test.go similarity index 92% rename from bundle/bundle_manager_test.go rename to internal/bundle/bundle_manager_test.go index f5c055a0..e356a377 100644 --- a/bundle/bundle_manager_test.go +++ b/internal/bundle/bundle_manager_test.go @@ -19,6 +19,7 @@ package bundle_test import ( "bytes" "context" + bundle2 "github.com/snyk/code-client-go/internal/bundle" "os" "path/filepath" "strings" @@ -29,7 +30,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/snyk/code-client-go/bundle" deepcode2 "github.com/snyk/code-client-go/deepcode" mocks2 "github.com/snyk/code-client-go/deepcode/mocks" "github.com/snyk/code-client-go/internal/util" @@ -61,7 +61,7 @@ func Test_Create(t *testing.T) { err := os.WriteFile(file, []byte(data), 0600) require.NoError(t, err) - var bundleManager = bundle.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) + var bundleManager = bundle2.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) bundle, err := bundleManager.Create(context.Background(), "testRequestId", dir, @@ -93,7 +93,7 @@ func Test_Create(t *testing.T) { err := os.WriteFile(file, []byte(data), 0600) require.NoError(t, err) - var bundleManager = bundle.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) + var bundleManager = bundle2.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) bundle, err := bundleManager.Create(context.Background(), "testRequestId", dir, @@ -130,7 +130,7 @@ func Test_Create(t *testing.T) { ) require.NoError(t, err) - var bundleManager = bundle.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) + var bundleManager = bundle2.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) bundle, err := bundleManager.Create(context.Background(), "testRequestId", dir, @@ -166,7 +166,7 @@ func Test_Create(t *testing.T) { }, ) require.NoError(t, err) - var bundleManager = bundle.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) + var bundleManager = bundle2.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) bundle, err := bundleManager.Create(context.Background(), "testRequestId", dir, @@ -199,7 +199,7 @@ func Test_Create(t *testing.T) { err := os.WriteFile(file, []byte("some content so the file won't be skipped"), 0600) assert.Nil(t, err) - var bundleManager = bundle.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) + var bundleManager = bundle2.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) bundle, err := bundleManager.Create(context.Background(), "testRequestId", tempDir, @@ -247,7 +247,7 @@ func Test_Create(t *testing.T) { require.NoError(t, err) } - var bundleManager = bundle.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) + var bundleManager = bundle2.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) bundle, err := bundleManager.Create(context.Background(), "testRequestId", tempDir, @@ -279,7 +279,7 @@ func Test_Upload(t *testing.T) { mockInstrumentor.EXPECT().Finish(gomock.Any()).Times(2) mockErrorReporter := mocks.NewMockErrorReporter(ctrl) - var bundleManager = bundle.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) + var bundleManager = bundle2.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) documentURI, bundleFile := createTempFileInDir(t, "bundleDoc.java", 10, temporaryDir) bundleFileMap := map[string]deepcode2.BundleFile{} bundleFileMap[documentURI] = bundleFile @@ -287,7 +287,7 @@ func Test_Upload(t *testing.T) { _, err := bundleManager.Upload( context.Background(), "testRequestId", - bundle.NewBundle(mockSnykCodeClient, mockInstrumentor, mockErrorReporter, &logger, "bundleHash", bundleFileMap, []string{}, []string{documentURI}), + bundle2.NewBundle(mockSnykCodeClient, mockInstrumentor, mockErrorReporter, &logger, "bundleHash", bundleFileMap, []string{}, []string{documentURI}), bundleFileMap) assert.NoError(t, err) }) @@ -303,7 +303,7 @@ func Test_Upload(t *testing.T) { mockInstrumentor.EXPECT().StartSpan(gomock.Any(), gomock.Any()).Return(mockSpan).Times(2) mockInstrumentor.EXPECT().Finish(gomock.Any()).Times(2) mockErrorReporter := mocks.NewMockErrorReporter(ctrl) - var bundleManager = bundle.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) + var bundleManager = bundle2.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) bundleFileMap := map[string]deepcode2.BundleFile{} var missingFiles []string @@ -326,7 +326,7 @@ func Test_Upload(t *testing.T) { _, err := bundleManager.Upload( context.Background(), "testRequestId", - bundle.NewBundle(mockSnykCodeClient, mockInstrumentor, mockErrorReporter, &logger, "bundleHash", bundleFileMap, []string{}, missingFiles), + bundle2.NewBundle(mockSnykCodeClient, mockInstrumentor, mockErrorReporter, &logger, "bundleHash", bundleFileMap, []string{}, missingFiles), bundleFileMap) assert.Nil(t, err) }) @@ -348,7 +348,7 @@ func Test_IsSupported_Extensions(t *testing.T) { }, nil) mockInstrumentor := mocks.NewMockInstrumentor(ctrl) mockErrorReporter := mocks.NewMockErrorReporter(ctrl) - bundler := bundle.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) + bundler := bundle2.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) t.Run("should return true for supported languages", func(t *testing.T) { supported, _ := bundler.IsSupported(context.Background(), "C:\\some\\path\\Test.java") @@ -387,7 +387,7 @@ func Test_IsSupported_ConfigFiles(t *testing.T) { }, nil) mockInstrumentor := mocks.NewMockInstrumentor(ctrl) mockErrorReporter := mocks.NewMockErrorReporter(ctrl) - bundler := bundle.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) + bundler := bundle2.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) dir, _ := os.Getwd() t.Run("should return true for supported config files", func(t *testing.T) { diff --git a/bundle/bundle_test.go b/internal/bundle/bundle_test.go similarity index 98% rename from bundle/bundle_test.go rename to internal/bundle/bundle_test.go index c38a7255..f2d4d578 100644 --- a/bundle/bundle_test.go +++ b/internal/bundle/bundle_test.go @@ -18,16 +18,16 @@ package bundle_test import ( "context" - "github.com/rs/zerolog" "testing" "github.com/golang/mock/gomock" + "github.com/rs/zerolog" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/snyk/code-client-go/bundle" "github.com/snyk/code-client-go/deepcode" deepcodeMocks "github.com/snyk/code-client-go/deepcode/mocks" + "github.com/snyk/code-client-go/internal/bundle" "github.com/snyk/code-client-go/observability/mocks" ) diff --git a/bundle/errors.go b/internal/bundle/errors.go similarity index 100% rename from bundle/errors.go rename to internal/bundle/errors.go diff --git a/bundle/mocks/bundle.go b/internal/bundle/mocks/bundle.go similarity index 98% rename from bundle/mocks/bundle.go rename to internal/bundle/mocks/bundle.go index eb70a3eb..08859eac 100644 --- a/bundle/mocks/bundle.go +++ b/internal/bundle/mocks/bundle.go @@ -9,8 +9,8 @@ import ( reflect "reflect" gomock "github.com/golang/mock/gomock" - bundle "github.com/snyk/code-client-go/bundle" deepcode "github.com/snyk/code-client-go/deepcode" + bundle "github.com/snyk/code-client-go/internal/bundle" ) // MockBundle is a mock of Bundle interface. diff --git a/bundle/mocks/bundle_manager.go b/internal/bundle/mocks/bundle_manager.go similarity index 97% rename from bundle/mocks/bundle_manager.go rename to internal/bundle/mocks/bundle_manager.go index f39e5254..fd589711 100644 --- a/bundle/mocks/bundle_manager.go +++ b/internal/bundle/mocks/bundle_manager.go @@ -9,8 +9,8 @@ import ( reflect "reflect" gomock "github.com/golang/mock/gomock" - bundle "github.com/snyk/code-client-go/bundle" deepcode "github.com/snyk/code-client-go/deepcode" + bundle "github.com/snyk/code-client-go/internal/bundle" ) // MockBundleManager is a mock of BundleManager interface. diff --git a/scan.go b/scan.go index 35568f53..88f6bb14 100644 --- a/scan.go +++ b/scan.go @@ -19,15 +19,16 @@ package codeclient import ( "context" + "github.com/pkg/errors" "github.com/rs/zerolog" "github.com/rs/zerolog/log" + "github.com/snyk/code-client-go/config" "github.com/snyk/code-client-go/deepcode" codeClientHTTP "github.com/snyk/code-client-go/http" - - "github.com/snyk/code-client-go/bundle" "github.com/snyk/code-client-go/internal/analysis" + "github.com/snyk/code-client-go/internal/bundle" "github.com/snyk/code-client-go/observability" "github.com/snyk/code-client-go/sarif" ) @@ -56,7 +57,7 @@ func NewCodeScanner( errorReporter observability.ErrorReporter, logger *zerolog.Logger, ) *codeScanner { - snykCode := deepcode.NewSnykCodeClient(logger, httpClient, instrumentor, config) + snykCode := deepcode.NewSnykCodeClient(logger, httpClient, instrumentor, errorReporter, config) bundleManager := bundle.NewBundleManager(logger, snykCode, instrumentor, errorReporter) return &codeScanner{ bundleManager: bundleManager, diff --git a/scan_test.go b/scan_test.go index f8c0f558..7f69788f 100644 --- a/scan_test.go +++ b/scan_test.go @@ -17,6 +17,8 @@ package codeclient_test import ( "context" + "github.com/snyk/code-client-go/internal/bundle" + bundleMocks "github.com/snyk/code-client-go/internal/bundle/mocks" "os" "path/filepath" "testing" @@ -27,8 +29,6 @@ import ( "github.com/stretchr/testify/require" codeclient "github.com/snyk/code-client-go" - "github.com/snyk/code-client-go/bundle" - bundleMocks "github.com/snyk/code-client-go/bundle/mocks" confMocks "github.com/snyk/code-client-go/config/mocks" "github.com/snyk/code-client-go/deepcode" deepcodeMocks "github.com/snyk/code-client-go/deepcode/mocks" From d782ad9415885604e7acaf0bcb0c9a6aced84b6c Mon Sep 17 00:00:00 2001 From: Teodora Sandu Date: Fri, 5 Apr 2024 14:21:12 +0100 Subject: [PATCH 3/3] refactor: move the deepcode package --- internal/bundle/bundle.go | 3 +- internal/bundle/bundle_manager.go | 20 ++--- internal/bundle/bundle_manager_test.go | 74 +++++++++---------- internal/bundle/bundle_test.go | 4 +- internal/bundle/mocks/bundle.go | 2 +- internal/bundle/mocks/bundle_manager.go | 2 +- {deepcode => internal/deepcode}/client.go | 0 .../deepcode}/client_pact_test.go | 2 +- .../deepcode}/client_test.go | 3 +- {deepcode => internal/deepcode}/helpers.go | 0 .../deepcode}/mocks/client.go | 2 +- .../deepcode}/pacts/snykls-snykcodeapi.json | 0 scan.go | 9 ++- scan_test.go | 4 +- 14 files changed, 65 insertions(+), 60 deletions(-) rename {deepcode => internal/deepcode}/client.go (100%) rename {deepcode => internal/deepcode}/client_pact_test.go (99%) rename {deepcode => internal/deepcode}/client_test.go (99%) rename {deepcode => internal/deepcode}/helpers.go (100%) rename {deepcode => internal/deepcode}/mocks/client.go (97%) rename {deepcode => internal/deepcode}/pacts/snykls-snykcodeapi.json (100%) diff --git a/internal/bundle/bundle.go b/internal/bundle/bundle.go index 1433dd71..7d1edbfb 100644 --- a/internal/bundle/bundle.go +++ b/internal/bundle/bundle.go @@ -18,9 +18,10 @@ package bundle import ( "context" + "github.com/rs/zerolog" - "github.com/snyk/code-client-go/deepcode" + "github.com/snyk/code-client-go/internal/deepcode" "github.com/snyk/code-client-go/observability" ) diff --git a/internal/bundle/bundle_manager.go b/internal/bundle/bundle_manager.go index d4d89626..755cb885 100644 --- a/internal/bundle/bundle_manager.go +++ b/internal/bundle/bundle_manager.go @@ -18,20 +18,20 @@ package bundle import ( "context" + deepcode2 "github.com/snyk/code-client-go/internal/deepcode" "os" "path/filepath" "github.com/puzpuzpuz/xsync" "github.com/rs/zerolog" - "github.com/snyk/code-client-go/deepcode" "github.com/snyk/code-client-go/internal/util" "github.com/snyk/code-client-go/observability" ) // TODO: add progress tracker for percentage progress type bundleManager struct { - SnykCode deepcode.SnykCodeClient + SnykCode deepcode2.SnykCodeClient instrumentor observability.Instrumentor errorReporter observability.ErrorReporter logger *zerolog.Logger @@ -52,13 +52,13 @@ type BundleManager interface { ctx context.Context, requestId string, originalBundle Bundle, - files map[string]deepcode.BundleFile, + files map[string]deepcode2.BundleFile, ) (Bundle, error) } func NewBundleManager( logger *zerolog.Logger, - SnykCode deepcode.SnykCodeClient, + SnykCode deepcode2.SnykCodeClient, instrumentor observability.Instrumentor, errorReporter observability.ErrorReporter, ) *bundleManager { @@ -83,7 +83,7 @@ func (b *bundleManager) Create(ctx context.Context, var limitToFiles []string fileHashes := make(map[string]string) - bundleFiles := make(map[string]deepcode.BundleFile) + bundleFiles := make(map[string]deepcode2.BundleFile) noFiles := true for absoluteFilePath := range filePaths { noFiles = false @@ -116,7 +116,7 @@ func (b *bundleManager) Create(ctx context.Context, } relativePath = util.EncodePath(relativePath) - bundleFile := deepcode.BundleFileFrom(absoluteFilePath, fileContent) + bundleFile := deepcode2.BundleFileFrom(absoluteFilePath, fileContent) bundleFiles[relativePath] = bundleFile fileHashes[relativePath] = bundleFile.Hash @@ -151,7 +151,7 @@ func (b *bundleManager) Upload( ctx context.Context, requestId string, bundle Bundle, - files map[string]deepcode.BundleFile, + files map[string]deepcode2.BundleFile, ) (Bundle, error) { method := "code.Batch" s := b.instrumentor.StartSpan(ctx, method) @@ -181,14 +181,14 @@ func (b *bundleManager) Upload( func (b *bundleManager) groupInBatches( ctx context.Context, bundle Bundle, - files map[string]deepcode.BundleFile, + files map[string]deepcode2.BundleFile, ) []*Batch { method := "code.groupInBatches" s := b.instrumentor.StartSpan(ctx, method) defer b.instrumentor.Finish(s) var batches []*Batch - batch := NewBatch(map[string]deepcode.BundleFile{}) + batch := NewBatch(map[string]deepcode2.BundleFile{}) for _, filePath := range bundle.GetMissingFiles() { if len(batches) == 0 { // first batch added after first file found batches = append(batches, batch) @@ -201,7 +201,7 @@ func (b *bundleManager) groupInBatches( batch.documents[filePath] = file } else { b.logger.Trace().Str("path", filePath).Int("size", len(fileContent)).Msgf("created new deepCodeBundle - %v bundles in this upload so far", len(batches)) - newUploadBatch := NewBatch(map[string]deepcode.BundleFile{}) + newUploadBatch := NewBatch(map[string]deepcode2.BundleFile{}) newUploadBatch.documents[filePath] = file batches = append(batches, newUploadBatch) batch = newUploadBatch diff --git a/internal/bundle/bundle_manager_test.go b/internal/bundle/bundle_manager_test.go index e356a377..2116e26f 100644 --- a/internal/bundle/bundle_manager_test.go +++ b/internal/bundle/bundle_manager_test.go @@ -19,7 +19,6 @@ package bundle_test import ( "bytes" "context" - bundle2 "github.com/snyk/code-client-go/internal/bundle" "os" "path/filepath" "strings" @@ -30,8 +29,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - deepcode2 "github.com/snyk/code-client-go/deepcode" - mocks2 "github.com/snyk/code-client-go/deepcode/mocks" + "github.com/snyk/code-client-go/internal/bundle" + "github.com/snyk/code-client-go/internal/deepcode" + deepcodeMocks "github.com/snyk/code-client-go/internal/deepcode/mocks" "github.com/snyk/code-client-go/internal/util" "github.com/snyk/code-client-go/observability/mocks" ) @@ -42,8 +42,8 @@ func Test_Create(t *testing.T) { ctrl := gomock.NewController(t) mockSpan := mocks.NewMockSpan(ctrl) mockSpan.EXPECT().Context().AnyTimes() - mockSnykCodeClient := mocks2.NewMockSnykCodeClient(ctrl) - mockSnykCodeClient.EXPECT().GetFilters(gomock.Any()).Return(deepcode2.FiltersResponse{ + mockSnykCodeClient := deepcodeMocks.NewMockSnykCodeClient(ctrl) + mockSnykCodeClient.EXPECT().GetFilters(gomock.Any()).Return(deepcode.FiltersResponse{ ConfigFiles: []string{}, Extensions: []string{".java"}, }, nil) @@ -61,7 +61,7 @@ func Test_Create(t *testing.T) { err := os.WriteFile(file, []byte(data), 0600) require.NoError(t, err) - var bundleManager = bundle2.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) + var bundleManager = bundle.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) bundle, err := bundleManager.Create(context.Background(), "testRequestId", dir, @@ -77,8 +77,8 @@ func Test_Create(t *testing.T) { ctrl := gomock.NewController(t) mockSpan := mocks.NewMockSpan(ctrl) mockSpan.EXPECT().Context().AnyTimes() - mockSnykCodeClient := mocks2.NewMockSnykCodeClient(ctrl) - mockSnykCodeClient.EXPECT().GetFilters(gomock.Any()).Return(deepcode2.FiltersResponse{ + mockSnykCodeClient := deepcodeMocks.NewMockSnykCodeClient(ctrl) + mockSnykCodeClient.EXPECT().GetFilters(gomock.Any()).Return(deepcode.FiltersResponse{ ConfigFiles: []string{}, Extensions: []string{".java"}, }, nil) @@ -93,7 +93,7 @@ func Test_Create(t *testing.T) { err := os.WriteFile(file, []byte(data), 0600) require.NoError(t, err) - var bundleManager = bundle2.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) + var bundleManager = bundle.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) bundle, err := bundleManager.Create(context.Background(), "testRequestId", dir, @@ -110,8 +110,8 @@ func Test_Create(t *testing.T) { ctrl := gomock.NewController(t) mockSpan := mocks.NewMockSpan(ctrl) mockSpan.EXPECT().Context().AnyTimes() - mockSnykCodeClient := mocks2.NewMockSnykCodeClient(ctrl) - mockSnykCodeClient.EXPECT().GetFilters(gomock.Any()).Return(deepcode2.FiltersResponse{ + mockSnykCodeClient := deepcodeMocks.NewMockSnykCodeClient(ctrl) + mockSnykCodeClient.EXPECT().GetFilters(gomock.Any()).Return(deepcode.FiltersResponse{ ConfigFiles: []string{}, Extensions: []string{".java"}, }, nil) @@ -130,7 +130,7 @@ func Test_Create(t *testing.T) { ) require.NoError(t, err) - var bundleManager = bundle2.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) + var bundleManager = bundle.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) bundle, err := bundleManager.Create(context.Background(), "testRequestId", dir, @@ -147,8 +147,8 @@ func Test_Create(t *testing.T) { ctrl := gomock.NewController(t) mockSpan := mocks.NewMockSpan(ctrl) mockSpan.EXPECT().Context().AnyTimes() - mockSnykCodeClient := mocks2.NewMockSnykCodeClient(ctrl) - mockSnykCodeClient.EXPECT().GetFilters(gomock.Any()).Return(deepcode2.FiltersResponse{ + mockSnykCodeClient := deepcodeMocks.NewMockSnykCodeClient(ctrl) + mockSnykCodeClient.EXPECT().GetFilters(gomock.Any()).Return(deepcode.FiltersResponse{ ConfigFiles: []string{}, Extensions: []string{".java"}, }, nil) @@ -166,7 +166,7 @@ func Test_Create(t *testing.T) { }, ) require.NoError(t, err) - var bundleManager = bundle2.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) + var bundleManager = bundle.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) bundle, err := bundleManager.Create(context.Background(), "testRequestId", dir, @@ -181,8 +181,8 @@ func Test_Create(t *testing.T) { ctrl := gomock.NewController(t) mockSpan := mocks.NewMockSpan(ctrl) mockSpan.EXPECT().Context().AnyTimes() - mockSnykCodeClient := mocks2.NewMockSnykCodeClient(ctrl) - mockSnykCodeClient.EXPECT().GetFilters(gomock.Any()).Return(deepcode2.FiltersResponse{ + mockSnykCodeClient := deepcodeMocks.NewMockSnykCodeClient(ctrl) + mockSnykCodeClient.EXPECT().GetFilters(gomock.Any()).Return(deepcode.FiltersResponse{ ConfigFiles: []string{".test"}, Extensions: []string{}, }, nil) @@ -199,7 +199,7 @@ func Test_Create(t *testing.T) { err := os.WriteFile(file, []byte("some content so the file won't be skipped"), 0600) assert.Nil(t, err) - var bundleManager = bundle2.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) + var bundleManager = bundle.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) bundle, err := bundleManager.Create(context.Background(), "testRequestId", tempDir, @@ -214,8 +214,8 @@ func Test_Create(t *testing.T) { ctrl := gomock.NewController(t) mockSpan := mocks.NewMockSpan(ctrl) mockSpan.EXPECT().Context().AnyTimes() - mockSnykCodeClient := mocks2.NewMockSnykCodeClient(ctrl) - mockSnykCodeClient.EXPECT().GetFilters(gomock.Any()).Return(deepcode2.FiltersResponse{ + mockSnykCodeClient := deepcodeMocks.NewMockSnykCodeClient(ctrl) + mockSnykCodeClient.EXPECT().GetFilters(gomock.Any()).Return(deepcode.FiltersResponse{ ConfigFiles: []string{}, Extensions: []string{".java"}, }, nil) @@ -247,7 +247,7 @@ func Test_Create(t *testing.T) { require.NoError(t, err) } - var bundleManager = bundle2.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) + var bundleManager = bundle.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) bundle, err := bundleManager.Create(context.Background(), "testRequestId", tempDir, @@ -272,22 +272,22 @@ func Test_Upload(t *testing.T) { ctrl := gomock.NewController(t) mockSpan := mocks.NewMockSpan(ctrl) mockSpan.EXPECT().Context().AnyTimes() - mockSnykCodeClient := mocks2.NewMockSnykCodeClient(ctrl) + mockSnykCodeClient := deepcodeMocks.NewMockSnykCodeClient(ctrl) mockSnykCodeClient.EXPECT().ExtendBundle(gomock.Any(), "bundleHash", gomock.Len(1), []string{}).Times(1) mockInstrumentor := mocks.NewMockInstrumentor(ctrl) mockInstrumentor.EXPECT().StartSpan(gomock.Any(), gomock.Any()).Return(mockSpan).Times(2) mockInstrumentor.EXPECT().Finish(gomock.Any()).Times(2) mockErrorReporter := mocks.NewMockErrorReporter(ctrl) - var bundleManager = bundle2.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) + var bundleManager = bundle.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) documentURI, bundleFile := createTempFileInDir(t, "bundleDoc.java", 10, temporaryDir) - bundleFileMap := map[string]deepcode2.BundleFile{} + bundleFileMap := map[string]deepcode.BundleFile{} bundleFileMap[documentURI] = bundleFile _, err := bundleManager.Upload( context.Background(), "testRequestId", - bundle2.NewBundle(mockSnykCodeClient, mockInstrumentor, mockErrorReporter, &logger, "bundleHash", bundleFileMap, []string{}, []string{documentURI}), + bundle.NewBundle(mockSnykCodeClient, mockInstrumentor, mockErrorReporter, &logger, "bundleHash", bundleFileMap, []string{}, []string{documentURI}), bundleFileMap) assert.NoError(t, err) }) @@ -296,16 +296,16 @@ func Test_Upload(t *testing.T) { ctrl := gomock.NewController(t) mockSpan := mocks.NewMockSpan(ctrl) mockSpan.EXPECT().Context().AnyTimes() - mockSnykCodeClient := mocks2.NewMockSnykCodeClient(ctrl) + mockSnykCodeClient := deepcodeMocks.NewMockSnykCodeClient(ctrl) mockSnykCodeClient.EXPECT().ExtendBundle(gomock.Any(), "bundleHash", gomock.Len(3), []string{}).Return("newBundleHash", []string{}, nil).Times(1) mockSnykCodeClient.EXPECT().ExtendBundle(gomock.Any(), "newBundleHash", gomock.Len(2), []string{}).Return("newerBundleHash", []string{}, nil).Times(1) mockInstrumentor := mocks.NewMockInstrumentor(ctrl) mockInstrumentor.EXPECT().StartSpan(gomock.Any(), gomock.Any()).Return(mockSpan).Times(2) mockInstrumentor.EXPECT().Finish(gomock.Any()).Times(2) mockErrorReporter := mocks.NewMockErrorReporter(ctrl) - var bundleManager = bundle2.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) + var bundleManager = bundle.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) - bundleFileMap := map[string]deepcode2.BundleFile{} + bundleFileMap := map[string]deepcode.BundleFile{} var missingFiles []string path, bundleFile := createTempFileInDir(t, "bundleDoc1.java", (1024*1024)-1, temporaryDir) bundleFileMap[path] = bundleFile @@ -326,29 +326,29 @@ func Test_Upload(t *testing.T) { _, err := bundleManager.Upload( context.Background(), "testRequestId", - bundle2.NewBundle(mockSnykCodeClient, mockInstrumentor, mockErrorReporter, &logger, "bundleHash", bundleFileMap, []string{}, missingFiles), + bundle.NewBundle(mockSnykCodeClient, mockInstrumentor, mockErrorReporter, &logger, "bundleHash", bundleFileMap, []string{}, missingFiles), bundleFileMap) assert.Nil(t, err) }) } -func createTempFileInDir(t *testing.T, name string, size int, temporaryDir string) (string, deepcode2.BundleFile) { +func createTempFileInDir(t *testing.T, name string, size int, temporaryDir string) (string, deepcode.BundleFile) { t.Helper() documentURI, fileContent := createFileOfSize(t, name, size, temporaryDir) - return documentURI, deepcode2.BundleFile{Hash: util.Hash(fileContent), Content: string(fileContent)} + return documentURI, deepcode.BundleFile{Hash: util.Hash(fileContent), Content: string(fileContent)} } func Test_IsSupported_Extensions(t *testing.T) { ctrl := gomock.NewController(t) - mockSnykCodeClient := mocks2.NewMockSnykCodeClient(ctrl) - mockSnykCodeClient.EXPECT().GetFilters(gomock.Any()).Return(deepcode2.FiltersResponse{ + mockSnykCodeClient := deepcodeMocks.NewMockSnykCodeClient(ctrl) + mockSnykCodeClient.EXPECT().GetFilters(gomock.Any()).Return(deepcode.FiltersResponse{ ConfigFiles: []string{}, Extensions: []string{".java"}, }, nil) mockInstrumentor := mocks.NewMockInstrumentor(ctrl) mockErrorReporter := mocks.NewMockErrorReporter(ctrl) - bundler := bundle2.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) + bundler := bundle.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) t.Run("should return true for supported languages", func(t *testing.T) { supported, _ := bundler.IsSupported(context.Background(), "C:\\some\\path\\Test.java") @@ -380,14 +380,14 @@ func Test_IsSupported_ConfigFiles(t *testing.T) { } ctrl := gomock.NewController(t) - mockSnykCodeClient := mocks2.NewMockSnykCodeClient(ctrl) - mockSnykCodeClient.EXPECT().GetFilters(gomock.Any()).Return(deepcode2.FiltersResponse{ + mockSnykCodeClient := deepcodeMocks.NewMockSnykCodeClient(ctrl) + mockSnykCodeClient.EXPECT().GetFilters(gomock.Any()).Return(deepcode.FiltersResponse{ ConfigFiles: configFilesFromFiltersEndpoint, Extensions: []string{}, }, nil) mockInstrumentor := mocks.NewMockInstrumentor(ctrl) mockErrorReporter := mocks.NewMockErrorReporter(ctrl) - bundler := bundle2.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) + bundler := bundle.NewBundleManager(newLogger(t), mockSnykCodeClient, mockInstrumentor, mockErrorReporter) dir, _ := os.Getwd() t.Run("should return true for supported config files", func(t *testing.T) { diff --git a/internal/bundle/bundle_test.go b/internal/bundle/bundle_test.go index f2d4d578..d2de6c5b 100644 --- a/internal/bundle/bundle_test.go +++ b/internal/bundle/bundle_test.go @@ -25,9 +25,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/snyk/code-client-go/deepcode" - deepcodeMocks "github.com/snyk/code-client-go/deepcode/mocks" "github.com/snyk/code-client-go/internal/bundle" + "github.com/snyk/code-client-go/internal/deepcode" + deepcodeMocks "github.com/snyk/code-client-go/internal/deepcode/mocks" "github.com/snyk/code-client-go/observability/mocks" ) diff --git a/internal/bundle/mocks/bundle.go b/internal/bundle/mocks/bundle.go index 08859eac..e10f76fe 100644 --- a/internal/bundle/mocks/bundle.go +++ b/internal/bundle/mocks/bundle.go @@ -9,8 +9,8 @@ import ( reflect "reflect" gomock "github.com/golang/mock/gomock" - deepcode "github.com/snyk/code-client-go/deepcode" bundle "github.com/snyk/code-client-go/internal/bundle" + deepcode "github.com/snyk/code-client-go/internal/deepcode" ) // MockBundle is a mock of Bundle interface. diff --git a/internal/bundle/mocks/bundle_manager.go b/internal/bundle/mocks/bundle_manager.go index fd589711..1aaf47d8 100644 --- a/internal/bundle/mocks/bundle_manager.go +++ b/internal/bundle/mocks/bundle_manager.go @@ -9,8 +9,8 @@ import ( reflect "reflect" gomock "github.com/golang/mock/gomock" - deepcode "github.com/snyk/code-client-go/deepcode" bundle "github.com/snyk/code-client-go/internal/bundle" + deepcode "github.com/snyk/code-client-go/internal/deepcode" ) // MockBundleManager is a mock of BundleManager interface. diff --git a/deepcode/client.go b/internal/deepcode/client.go similarity index 100% rename from deepcode/client.go rename to internal/deepcode/client.go diff --git a/deepcode/client_pact_test.go b/internal/deepcode/client_pact_test.go similarity index 99% rename from deepcode/client_pact_test.go rename to internal/deepcode/client_pact_test.go index fe8d8e76..deefc8b6 100644 --- a/deepcode/client_pact_test.go +++ b/internal/deepcode/client_pact_test.go @@ -27,8 +27,8 @@ import ( "github.com/stretchr/testify/assert" confMocks "github.com/snyk/code-client-go/config/mocks" - "github.com/snyk/code-client-go/deepcode" codeClientHTTP "github.com/snyk/code-client-go/http" + "github.com/snyk/code-client-go/internal/deepcode" "github.com/snyk/code-client-go/internal/util" "github.com/snyk/code-client-go/internal/util/testutil" ) diff --git a/deepcode/client_test.go b/internal/deepcode/client_test.go similarity index 99% rename from deepcode/client_test.go rename to internal/deepcode/client_test.go index 7ef54183..b921b338 100644 --- a/deepcode/client_test.go +++ b/internal/deepcode/client_test.go @@ -30,8 +30,8 @@ import ( "github.com/stretchr/testify/mock" confMocks "github.com/snyk/code-client-go/config/mocks" - "github.com/snyk/code-client-go/deepcode" httpmocks "github.com/snyk/code-client-go/http/mocks" + "github.com/snyk/code-client-go/internal/deepcode" "github.com/snyk/code-client-go/internal/util" "github.com/snyk/code-client-go/observability/mocks" ) @@ -125,6 +125,7 @@ func TestSnykCodeBackendService_CreateBundle(t *testing.T) { mockErrorReporter := mocks.NewMockErrorReporter(ctrl) s := deepcode.NewSnykCodeClient(newLogger(t), mockHTTPClient, mockInstrumentor, mockErrorReporter, mockConfig) + files := map[string]string{} randomAddition := fmt.Sprintf("\n public void random() { System.out.println(\"%d\") }", time.Now().UnixMicro()) files[path1] = util.Hash([]byte(content + randomAddition)) diff --git a/deepcode/helpers.go b/internal/deepcode/helpers.go similarity index 100% rename from deepcode/helpers.go rename to internal/deepcode/helpers.go diff --git a/deepcode/mocks/client.go b/internal/deepcode/mocks/client.go similarity index 97% rename from deepcode/mocks/client.go rename to internal/deepcode/mocks/client.go index 2ea33e80..03914bb8 100644 --- a/deepcode/mocks/client.go +++ b/internal/deepcode/mocks/client.go @@ -9,7 +9,7 @@ import ( reflect "reflect" gomock "github.com/golang/mock/gomock" - deepcode "github.com/snyk/code-client-go/deepcode" + deepcode "github.com/snyk/code-client-go/internal/deepcode" ) // MockSnykCodeClient is a mock of SnykCodeClient interface. diff --git a/deepcode/pacts/snykls-snykcodeapi.json b/internal/deepcode/pacts/snykls-snykcodeapi.json similarity index 100% rename from deepcode/pacts/snykls-snykcodeapi.json rename to internal/deepcode/pacts/snykls-snykcodeapi.json diff --git a/scan.go b/scan.go index 88f6bb14..c39e5f2b 100644 --- a/scan.go +++ b/scan.go @@ -25,10 +25,10 @@ import ( "github.com/rs/zerolog/log" "github.com/snyk/code-client-go/config" - "github.com/snyk/code-client-go/deepcode" codeClientHTTP "github.com/snyk/code-client-go/http" "github.com/snyk/code-client-go/internal/analysis" "github.com/snyk/code-client-go/internal/bundle" + "github.com/snyk/code-client-go/internal/deepcode" "github.com/snyk/code-client-go/observability" "github.com/snyk/code-client-go/sarif" ) @@ -89,6 +89,10 @@ func (c *codeScanner) UploadAndAnalyze( return nil, "", nil } + if ctx.Err() != nil { + c.logger.Info().Msg("Canceling Code scan - Code scanner received cancellation signal") + return nil, "", nil + } b, err := c.bundleManager.Create(ctx, requestId, path, files, changedFiles) if err != nil { if bundle.IsNoFilesError(err) { @@ -107,7 +111,6 @@ func (c *codeScanner) UploadAndAnalyze( uploadedFiles := b.GetFiles() b, err = c.bundleManager.Upload(ctx, requestId, b, uploadedFiles) - bundleHash := b.GetBundleHash() if err != nil { if ctx.Err() != nil { // Only handle errors that are not intentional cancellations @@ -120,7 +123,7 @@ func (c *codeScanner) UploadAndAnalyze( } } - if b.GetBundleHash() == "" { + if bundleHash == "" { c.logger.Info().Msg("empty bundle, no Snyk Code analysis") return nil, bundleHash, nil } diff --git a/scan_test.go b/scan_test.go index 7f69788f..c387b461 100644 --- a/scan_test.go +++ b/scan_test.go @@ -19,6 +19,8 @@ import ( "context" "github.com/snyk/code-client-go/internal/bundle" bundleMocks "github.com/snyk/code-client-go/internal/bundle/mocks" + "github.com/snyk/code-client-go/internal/deepcode" + deepcodeMocks "github.com/snyk/code-client-go/internal/deepcode/mocks" "os" "path/filepath" "testing" @@ -30,8 +32,6 @@ import ( codeclient "github.com/snyk/code-client-go" confMocks "github.com/snyk/code-client-go/config/mocks" - "github.com/snyk/code-client-go/deepcode" - deepcodeMocks "github.com/snyk/code-client-go/deepcode/mocks" httpmocks "github.com/snyk/code-client-go/http/mocks" "github.com/snyk/code-client-go/observability/mocks" )