Skip to content

Commit

Permalink
feat: OSS and IaC delta matcher (#622)
Browse files Browse the repository at this point in the history
  • Loading branch information
ShawkyZ authored Aug 21, 2024
1 parent fb24d7d commit 8addbb9
Show file tree
Hide file tree
Showing 40 changed files with 851 additions and 443 deletions.
15 changes: 8 additions & 7 deletions application/di/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package di

import (
"github.com/snyk/snyk-ls/domain/snyk"
"path/filepath"
"runtime"
"sync"
Expand All @@ -36,7 +37,7 @@ import (
"github.com/snyk/snyk-ls/domain/ide/hover"
"github.com/snyk/snyk-ls/domain/ide/initialize"
"github.com/snyk/snyk-ls/domain/ide/workspace"
"github.com/snyk/snyk-ls/domain/snyk"
scanner2 "github.com/snyk/snyk-ls/domain/snyk/scanner"
"github.com/snyk/snyk-ls/infrastructure/authentication"
"github.com/snyk/snyk-ls/infrastructure/cli"
"github.com/snyk/snyk-ls/infrastructure/cli/cli_constants"
Expand Down Expand Up @@ -66,9 +67,9 @@ var instrumentor performance2.Instrumentor
var errorReporter er.ErrorReporter
var installer install.Installer
var hoverService hover.Service
var scanner snyk.Scanner
var scanner scanner2.Scanner
var cliInitializer *cli.Initializer
var scanNotifier snyk.ScanNotifier
var scanNotifier scanner2.ScanNotifier
var codeActionService *codeaction.CodeActionsService
var fileWatcher *watcher.FileWatcher
var initMutex = &sync.Mutex{}
Expand All @@ -89,7 +90,7 @@ func Init() {

func initDomain(c *config.Config) {
hoverService = hover.NewDefaultService(c)
scanner = snyk.NewDelegatingScanner(c, scanInitializer, instrumentor, scanNotifier, snykApiClient, authenticationService, notifier, snykCodeScanner, infrastructureAsCodeScanner, openSourceScanner)
scanner = scanner2.NewDelegatingScanner(c, scanInitializer, instrumentor, scanNotifier, snykApiClient, authenticationService, notifier, scanPersister, snykCodeScanner, infrastructureAsCodeScanner, openSourceScanner)
}

func initInfrastructure(c *config.Config) {
Expand Down Expand Up @@ -161,7 +162,7 @@ func initInfrastructure(c *config.Config) {
infrastructureAsCodeScanner = iac.New(c, instrumentor, errorReporter, snykCli)
openSourceScanner = oss.NewCLIScanner(c, instrumentor, errorReporter, snykCli, learnService, notifier)
scanNotifier, _ = appNotification.NewScanNotifier(c, notifier)
snykCodeScanner = code.New(snykCodeBundleUploader, snykApiClient, codeErrorReporter, learnService, notifier, codeClientScanner, scanPersister)
snykCodeScanner = code.New(snykCodeBundleUploader, snykApiClient, codeErrorReporter, learnService, notifier, codeClientScanner)
cliInitializer = cli.NewInitializer(errorReporter, installer, notifier, snykCli)
authInitializer := authentication.NewInitializer(c, authenticationService, errorReporter, notifier)
scanInitializer = initialize.NewDelegatingInitializer(
Expand Down Expand Up @@ -213,13 +214,13 @@ func ScanPersister() persistence.ScanSnapshotPersister {
return scanPersister
}

func ScanNotifier() snyk.ScanNotifier {
func ScanNotifier() scanner2.ScanNotifier {
initMutex.Lock()
defer initMutex.Unlock()
return scanNotifier
}

func Scanner() snyk.Scanner {
func Scanner() scanner2.Scanner {
initMutex.Lock()
defer initMutex.Unlock()
return scanner
Expand Down
9 changes: 4 additions & 5 deletions application/di/test_init.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
package di

import (
"testing"

"github.com/snyk/snyk-ls/domain/snyk/persistence"
scanner2 "github.com/snyk/snyk-ls/domain/snyk/scanner"
"testing"

"github.com/golang/mock/gomock"

Expand All @@ -31,7 +31,6 @@ import (
"github.com/snyk/snyk-ls/domain/ide/hover"
"github.com/snyk/snyk-ls/domain/ide/initialize"
"github.com/snyk/snyk-ls/domain/ide/workspace"
"github.com/snyk/snyk-ls/domain/snyk"
"github.com/snyk/snyk-ls/infrastructure/authentication"
"github.com/snyk/snyk-ls/infrastructure/cli"
"github.com/snyk/snyk-ls/infrastructure/cli/install"
Expand Down Expand Up @@ -84,10 +83,10 @@ func TestInit(t *testing.T) {
codeClientScanner := &code.FakeCodeScannerClient{}
scanPersister = persistence.NopScanPersister{}
codeErrorReporter = code.NewCodeErrorReporter(errorReporter)
snykCodeScanner = code.New(snykCodeBundleUploader, snykApiClient, codeErrorReporter, learnService, notifier, codeClientScanner, scanPersister)
snykCodeScanner = code.New(snykCodeBundleUploader, snykApiClient, codeErrorReporter, learnService, notifier, codeClientScanner)
openSourceScanner = oss.NewCLIScanner(c, instrumentor, errorReporter, snykCli, learnService, notifier)
infrastructureAsCodeScanner = iac.New(c, instrumentor, errorReporter, snykCli)
scanner = snyk.NewDelegatingScanner(c, scanInitializer, instrumentor, scanNotifier, snykApiClient, authenticationService, notifier, snykCodeScanner, infrastructureAsCodeScanner, openSourceScanner)
scanner = scanner2.NewDelegatingScanner(c, scanInitializer, instrumentor, scanNotifier, snykApiClient, authenticationService, notifier, scanPersister, snykCodeScanner, infrastructureAsCodeScanner, openSourceScanner)
hoverService = hover.NewDefaultService(c)
command.SetService(&types.CommandServiceMock{})
// don't use getters or it'll deadlock
Expand Down
13 changes: 7 additions & 6 deletions application/server/execute_command_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ package server

import (
"context"
"github.com/snyk/snyk-ls/domain/snyk"
"github.com/snyk/snyk-ls/domain/snyk/scanner"
"testing"
"time"

Expand All @@ -28,7 +30,6 @@ import (
"github.com/snyk/snyk-ls/application/di"
"github.com/snyk/snyk-ls/domain/ide/command"
"github.com/snyk/snyk-ls/domain/ide/workspace"
"github.com/snyk/snyk-ls/domain/snyk"
"github.com/snyk/snyk-ls/infrastructure/authentication"
"github.com/snyk/snyk-ls/internal/types"
)
Expand All @@ -37,7 +38,7 @@ func Test_executeWorkspaceScanCommand_shouldStartWorkspaceScanOnCommandReceipt(t
loc, _ := setupServerWithCustomDI(t, false)
c := config.CurrentConfig()

scanner := &snyk.TestScanner{}
scanner := &scanner.TestScanner{}
workspace.Get().AddFolder(workspace.NewFolder(c, "dummy", "dummy", scanner, di.HoverService(), di.ScanNotifier(), di.Notifier(), di.ScanPersister()))

params := lsp.ExecuteCommandParams{Command: types.WorkspaceScanCommand}
Expand All @@ -54,7 +55,7 @@ func Test_executeWorkspaceFolderScanCommand_shouldStartFolderScanOnCommandReceip
loc, _ := setupServerWithCustomDI(t, false)
c := config.CurrentConfig()

scanner := &snyk.TestScanner{}
scanner := &scanner.TestScanner{}
workspace.Get().AddFolder(workspace.NewFolder(c, "dummy", "dummy", scanner, di.HoverService(), di.ScanNotifier(), di.Notifier(), di.ScanPersister()))

params := lsp.ExecuteCommandParams{Command: types.WorkspaceFolderScanCommand, Arguments: []any{"dummy"}}
Expand All @@ -71,8 +72,8 @@ func Test_executeWorkspaceFolderScanCommand_shouldNotClearOtherFoldersDiagnostic
loc, _ := setupServerWithCustomDI(t, false)
c := config.CurrentConfig()

scannerForFolder := snyk.NewTestScanner()
scannerForDontClear := snyk.NewTestScanner()
scannerForFolder := scanner.NewTestScanner()
scannerForDontClear := scanner.NewTestScanner()
folder := workspace.NewFolder(c, "dummy", "dummy", scannerForFolder, di.HoverService(), di.ScanNotifier(), di.Notifier(), di.ScanPersister())
dontClear := workspace.NewFolder(c, "dontclear", "dontclear", scannerForDontClear, di.HoverService(), di.ScanNotifier(), di.Notifier(), di.ScanPersister())

Expand Down Expand Up @@ -104,7 +105,7 @@ func Test_executeWorkspaceScanCommand_shouldAskForTrust(t *testing.T) {
loc, jsonRPCRecorder := setupServerWithCustomDI(t, false)
c := config.CurrentConfig()

scanner := &snyk.TestScanner{}
scanner := &scanner.TestScanner{}
workspace.Get().AddFolder(workspace.NewFolder(c, "dummy", "dummy", scanner, di.HoverService(), di.ScanNotifier(), di.Notifier(), di.ScanPersister()))
// explicitly enable folder trust which is disabled by default in tests
config.CurrentConfig().SetTrustedFolderFeatureEnabled(true)
Expand Down
3 changes: 1 addition & 2 deletions application/server/inline_values.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,13 @@ package server

import (
"context"

"github.com/creachadair/jrpc2"
"github.com/creachadair/jrpc2/handler"
"github.com/snyk/snyk-ls/domain/snyk"

"github.com/snyk/snyk-ls/application/config"
"github.com/snyk/snyk-ls/application/di"
"github.com/snyk/snyk-ls/domain/ide/converter"
"github.com/snyk/snyk-ls/domain/snyk"
"github.com/snyk/snyk-ls/internal/types"
"github.com/snyk/snyk-ls/internal/uri"
)
Expand Down
4 changes: 2 additions & 2 deletions application/server/notification/scan_notifier.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import (
"errors"

"github.com/snyk/snyk-ls/application/config"
"github.com/snyk/snyk-ls/domain/snyk"
"github.com/snyk/snyk-ls/domain/snyk/scanner"
"github.com/snyk/snyk-ls/internal/notification"
"github.com/snyk/snyk-ls/internal/product"
"github.com/snyk/snyk-ls/internal/types"
Expand All @@ -32,7 +32,7 @@ type scanNotifier struct {
c *config.Config
}

func NewScanNotifier(c *config.Config, notifier notification.Notifier) (snyk.ScanNotifier, error) {
func NewScanNotifier(c *config.Config, notifier notification.Notifier) (scanner.ScanNotifier, error) {
if notifier == nil {
return nil, errors.New("notifier cannot be null")
}
Expand Down
10 changes: 5 additions & 5 deletions application/server/notification/scan_notifier_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ package notification_test

import (
notification2 "github.com/snyk/snyk-ls/application/server/notification"
"github.com/snyk/snyk-ls/domain/snyk"
"github.com/snyk/snyk-ls/domain/snyk/scanner"
"github.com/snyk/snyk-ls/internal/notification"
"github.com/snyk/snyk-ls/internal/product"
"github.com/snyk/snyk-ls/internal/testutil"
Expand All @@ -29,7 +29,7 @@ import (

type sendMessageTestCase struct {
name string
act func(scanNotifier snyk.ScanNotifier)
act func(scanNotifier scanner.ScanNotifier)
expectedStatus types.ScanStatus
}

Expand All @@ -42,21 +42,21 @@ func Test_SendMessage(t *testing.T) {
tests := []sendMessageTestCase{
{
name: "SendInProgressMessage",
act: func(scanNotifier snyk.ScanNotifier) {
act: func(scanNotifier scanner.ScanNotifier) {
scanNotifier.SendInProgress(folderPath)
},
expectedStatus: types.InProgress,
},
{
name: "SendSuccessMessage",
act: func(scanNotifier snyk.ScanNotifier) {
act: func(scanNotifier scanner.ScanNotifier) {
scanNotifier.SendSuccess(product.ProductCode, folderPath)
},
expectedStatus: types.Success,
},
{
name: "SendErrorMessage",
act: func(scanNotifier snyk.ScanNotifier) {
act: func(scanNotifier scanner.ScanNotifier) {
scanNotifier.SendError(product.ProductCode, folderPath, "")
},
expectedStatus: types.ErrorStatus,
Expand Down
6 changes: 3 additions & 3 deletions application/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package server
import (
"context"
"fmt"
"github.com/snyk/snyk-ls/domain/snyk/scanner"
"os"
"runtime"
"strings"
Expand All @@ -38,7 +39,6 @@ import (
"github.com/snyk/snyk-ls/domain/ide/converter"
"github.com/snyk/snyk-ls/domain/ide/hover"
"github.com/snyk/snyk-ls/domain/ide/workspace"
"github.com/snyk/snyk-ls/domain/snyk"
"github.com/snyk/snyk-ls/infrastructure/cli"
"github.com/snyk/snyk-ls/infrastructure/cli/cli_constants"
"github.com/snyk/snyk-ls/infrastructure/cli/install"
Expand Down Expand Up @@ -114,7 +114,7 @@ func textDocumentDidChangeHandler() jrpc2.Handler {

debouncedCallback := func() {
for _, change := range params.ContentChanges {
if packageScanner, ok := di.Scanner().(snyk.PackageScanner); ok {
if packageScanner, ok := di.Scanner().(scanner.PackageScanner); ok {
go packageScanner.ScanPackages(ctx, c, pathFromUri, change.Text)
}
}
Expand Down Expand Up @@ -528,7 +528,7 @@ func textDocumentDidOpenHandler() jrpc2.Handler {
di.Notifier().Send(diagnosticParams)
}

if scanner, ok := di.Scanner().(snyk.PackageScanner); ok {
if scanner, ok := di.Scanner().(scanner.PackageScanner); ok {
scanner.ScanPackages(context.Background(), config.CurrentConfig(), filePath, "")
}
return nil, nil
Expand Down
4 changes: 2 additions & 2 deletions application/server/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package server
import (
"context"
"fmt"
"github.com/snyk/snyk-ls/domain/snyk/scanner"
"os"
"os/exec"
"path/filepath"
Expand All @@ -43,7 +44,6 @@ import (
"github.com/snyk/snyk-ls/domain/ide/converter"
"github.com/snyk/snyk-ls/domain/ide/hover"
"github.com/snyk/snyk-ls/domain/ide/workspace"
"github.com/snyk/snyk-ls/domain/snyk"
"github.com/snyk/snyk-ls/infrastructure/authentication"
"github.com/snyk/snyk-ls/infrastructure/cli"
"github.com/snyk/snyk-ls/infrastructure/cli/cli_constants"
Expand Down Expand Up @@ -571,7 +571,7 @@ func Test_initialize_shouldOfferAllCommands(t *testing.T) {
loc, _ := setupServer(t)
c := config.CurrentConfig()

scanner := &snyk.TestScanner{}
scanner := &scanner.TestScanner{}
workspace.Get().AddFolder(workspace.NewFolder(c, "dummy",
"dummy",
scanner,
Expand Down
10 changes: 5 additions & 5 deletions application/server/trust_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package server

import (
"context"
"github.com/snyk/snyk-ls/domain/snyk/scanner"
"os"
"testing"
"time"
Expand All @@ -29,7 +30,6 @@ import (
"github.com/snyk/snyk-ls/application/di"
"github.com/snyk/snyk-ls/domain/ide/command"
"github.com/snyk/snyk-ls/domain/ide/workspace"
"github.com/snyk/snyk-ls/domain/snyk"
"github.com/snyk/snyk-ls/infrastructure/authentication"
"github.com/snyk/snyk-ls/internal/testutil"
"github.com/snyk/snyk-ls/internal/types"
Expand All @@ -39,7 +39,7 @@ import (
func Test_handleUntrustedFolders_shouldTriggerTrustRequestAndNotScan(t *testing.T) {
loc, jsonRPCRecorder := setupServer(t)
w := workspace.Get()
scanner := &snyk.TestScanner{}
scanner := &scanner.TestScanner{}
c := config.CurrentConfig()
c.SetTrustedFolderFeatureEnabled(true)
w.AddFolder(workspace.NewFolder(c, "dummy", "dummy", scanner, di.HoverService(), di.ScanNotifier(), di.Notifier(), di.ScanPersister()))
Expand All @@ -52,7 +52,7 @@ func Test_handleUntrustedFolders_shouldTriggerTrustRequestAndNotScan(t *testing.
func Test_handleUntrustedFolders_shouldNotTriggerTrustRequestWhenAlreadyRequesting(t *testing.T) {
loc, jsonRPCRecorder := setupServer(t)
w := workspace.Get()
scanner := &snyk.TestScanner{}
scanner := &scanner.TestScanner{}
c := config.CurrentConfig()
c.SetTrustedFolderFeatureEnabled(true)
w.AddFolder(workspace.NewFolder(c, "dummy", "dummy", scanner, di.HoverService(), di.ScanNotifier(), di.Notifier(), di.ScanPersister()))
Expand All @@ -74,7 +74,7 @@ func Test_handleUntrustedFolders_shouldTriggerTrustRequestAndScanAfterConfirmati
registerNotifier(c, loc.Server)

w := workspace.Get()
scanner := &snyk.TestScanner{}
scanner := &scanner.TestScanner{}
c.SetTrustedFolderFeatureEnabled(true)
w.AddFolder(workspace.NewFolder(c, "/trusted/dummy", "dummy", scanner, di.HoverService(), di.ScanNotifier(), di.Notifier(), di.ScanPersister()))

Expand All @@ -95,7 +95,7 @@ func Test_handleUntrustedFolders_shouldTriggerTrustRequestAndNotScanAfterNegativ
c := config.CurrentConfig()
registerNotifier(c, loc.Server)
w := workspace.Get()
scanner := &snyk.TestScanner{}
scanner := &scanner.TestScanner{}
w.AddFolder(workspace.NewFolder(c, "/trusted/dummy", "dummy", scanner, di.HoverService(), di.ScanNotifier(), di.Notifier(), di.ScanPersister()))
c.SetTrustedFolderFeatureEnabled(true)

Expand Down
8 changes: 4 additions & 4 deletions domain/ide/command/logout_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ package command

import (
"context"
"github.com/snyk/snyk-ls/domain/snyk/persistence"
"github.com/snyk/snyk-ls/domain/snyk/scanner"
"path/filepath"
"testing"

"github.com/snyk/snyk-ls/domain/snyk/persistence"

"github.com/stretchr/testify/assert"

"github.com/snyk/snyk-ls/domain/ide/hover"
Expand All @@ -42,7 +42,7 @@ func TestLogoutCommand_Execute_ClearsIssues(t *testing.T) {
provider := authentication.NewFakeCliAuthenticationProvider(c)
hoverService := hover.NewFakeHoverService()
provider.IsAuthenticated = true
scanNotifier := snyk.NewMockScanNotifier()
scanNotifier := scanner.NewMockScanNotifier()
scanPersister := persistence.NewNopScanPersister()
authenticationService := authentication.NewAuthenticationService(c, provider, error_reporting.NewTestErrorReporter(), notifier)
cmd := logoutCommand{
Expand All @@ -51,7 +51,7 @@ func TestLogoutCommand_Execute_ClearsIssues(t *testing.T) {
logger: c.Logger(),
}

scanner := snyk.NewTestScanner()
scanner := scanner.NewTestScanner()

w := workspace.New(c, performance.NewInstrumentor(), scanner, hoverService, scanNotifier, notifier, scanPersister)
folder := workspace.NewFolder(
Expand Down
Loading

0 comments on commit 8addbb9

Please sign in to comment.