Skip to content

Commit

Permalink
add some coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
owenrumney committed Feb 7, 2021
1 parent faa0ee8 commit a256adb
Show file tree
Hide file tree
Showing 6 changed files with 66 additions and 17 deletions.
23 changes: 14 additions & 9 deletions cmd/squealer/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,19 @@ func squeal(_ *cobra.Command, args []string) {
panic(err)
}

scanner := getScanner(cfg, basePath)
err = scanner.Scan()
if err != nil {
panic(err)
}
metrics := scanner.GetMetrics()
if !concise {
fmt.Println(printMetrics(metrics))
}
os.Exit(int(metrics.TransgressionsReported))
}

func getScanner(cfg *config.Config, basePath string) scan.Scanner {
scanner, err := scan.NewScanner(scan.ScannerConfig{
Cfg: cfg,
Basepath: basePath,
Expand All @@ -49,15 +62,7 @@ func squeal(_ *cobra.Command, args []string) {
if err != nil {
panic(err)
}
err = scanner.Scan()
if err != nil {
panic(err)
}
metrics := scanner.GetMetrics()
if !concise {
fmt.Println(printMetrics(metrics))
}
os.Exit(int(metrics.TransgressionsReported))
return scanner
}

func printMetrics(metrics *mertics.Metrics) string {
Expand Down
16 changes: 16 additions & 0 deletions cmd/squealer/main_test.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package main

import (
"fmt"
"github.com/owenrumney/squealer/internal/app/squealer/config"
"github.com/owenrumney/squealer/internal/app/squealer/mertics"
"github.com/owenrumney/squealer/internal/app/squealer/scan"
"github.com/stretchr/testify/assert"
"os"
"testing"
)

Expand Down Expand Up @@ -31,3 +35,15 @@ transgressionMap:
`, output)
}

func TestNewScannerIsGitScanner(t *testing.T) {
gopath := os.Getenv("GOPATH")
scanner := getScanner(config.DefaultConfig(), fmt.Sprintf("%s/src/github.com/owenrumney/squealer/", gopath))
assert.Equal(t, scan.GitScanner, scanner.GetType())
}

func TestNewScannerIsDirectoryScanner(t *testing.T) {
gopath := os.Getenv("GOPATH")
scanner := getScanner(config.DefaultConfig(), fmt.Sprintf("%s/src/github.com/owenrumney/squealer/test_resources", gopath))
assert.Equal(t, scan.DirectoryScanner, scanner.GetType())
}
17 changes: 17 additions & 0 deletions internal/app/squealer/config/loader_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package config

import (
"fmt"
"github.com/stretchr/testify/assert"
"io/ioutil"
"os"
Expand Down Expand Up @@ -44,6 +45,22 @@ func TestYamlConfigLoaded(t *testing.T) {
assert.Equal(t, 7, len(config.IgnoreExtensions))
}

func TestConfigThatDoesntExist(t *testing.T) {
config, err := LoadConfig("blah")

assert.NoError(t, err)
assert.Equal(t, DefaultConfig(), config)
}

func TestConfigTWithMalformedFile(t *testing.T) {
gopath := os.Getenv("GOPATH")
configFile := fmt.Sprintf("%s/src/github.com/owenrumney/squealer/Dockerfile", gopath)

config, err := LoadConfig(configFile)
assert.Error(t, err)
assert.Nil(t, config)
}

var yamlConfig = `rules:
- rule: (A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}
description: Check for AWS Access Key Id
Expand Down
13 changes: 6 additions & 7 deletions internal/app/squealer/scan/directory_scanner.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ type directoryScanner struct {
ignoreExtensions []string
}

func (d directoryScanner) GetType() ScannerType {
return DirectoryScanner
}

func newDirectoryScanner(sc ScannerConfig) (*directoryScanner, error) {
if _, err := os.Stat(sc.Basepath); err != nil {
return nil, err
Expand All @@ -33,21 +37,16 @@ func newDirectoryScanner(sc ScannerConfig) (*directoryScanner, error) {
}

func (d directoryScanner) Scan() error {
if err := filepath.Walk(d.workingDirectory, func(path string, info os.FileInfo, err error) error {
return filepath.Walk(d.workingDirectory, func(path string, info os.FileInfo, err error) error {
if info.IsDir() || shouldIgnore(path, d.ignorePaths, d.ignoreExtensions) {
return nil
}

content, err := ioutil.ReadFile(path)
if err != nil {
return err
}

return d.mc.Evaluate(path, string(content))
}); err != nil {
return err
}
return nil
})
}

func (d directoryScanner) GetMetrics() *mertics.Metrics {
Expand Down
6 changes: 5 additions & 1 deletion internal/app/squealer/scan/git_scanner.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ type gitScanner struct {
ignoreExtensions []string
}

func (s *gitScanner) GetType() ScannerType {
return GitScanner
}

func newGitScanner(sc ScannerConfig) (*gitScanner, error) {
if _, err := os.Stat(sc.Basepath); err != nil {
return nil, err
Expand Down Expand Up @@ -64,6 +68,7 @@ func (s *gitScanner) Scan() error {
}
}(commit)
if commit.Hash == s.fromHash {
// reached the starting commit - stop here
return nil
}
commit, err = commits.Next()
Expand All @@ -83,7 +88,6 @@ func (s *gitScanner) getRelevantCommitIter(client *git.Repository) (object.Commi
var err error

if headRef != nil {

commits, err = client.Log(&git.LogOptions{From: headRef.Hash()})
if err != nil {
return nil, err
Expand Down
8 changes: 8 additions & 0 deletions internal/app/squealer/scan/scanner.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@ import (
"strings"
)

type ScannerType string

const (
GitScanner ScannerType = "gitScanner"
DirectoryScanner ScannerType = "dirScanner"
)

type ScannerConfig struct {
Cfg *config.Config
Basepath string
Expand All @@ -19,6 +26,7 @@ type ScannerConfig struct {
type Scanner interface {
Scan() error
GetMetrics() *mertics.Metrics
GetType() ScannerType
}

func NewScanner(sc ScannerConfig) (Scanner, error) {
Expand Down

0 comments on commit a256adb

Please sign in to comment.