Skip to content

Commit

Permalink
improve unit tests for config reader package (#820)
Browse files Browse the repository at this point in the history
  • Loading branch information
patilpankaj212 committed May 31, 2021
1 parent eff166f commit ff2c2a5
Show file tree
Hide file tree
Showing 4 changed files with 101 additions and 32 deletions.
74 changes: 44 additions & 30 deletions pkg/config/config-reader_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,30 +17,46 @@
package config

import (
"path/filepath"
"reflect"
"testing"
)

func TestNewTerrascanConfigReader(t *testing.T) {
testNotifier := Notifier{
var (
testDataDir = "testdata"

testRules = Rules{
ScanRules: []string{"rule.1", "rule.2", "rule.3", "rule.4", "rule.5"},
SkipRules: []string{"rule.1"},
}

testCategoryList = Category{List: []string{"category.1", "category.2"}}

testNotifier = Notifier{
NotifierType: "webhook",
NotifierConfig: map[string]interface{}{
"url": "testurl1",
},
}

testK8sAdmControl = K8sAdmissionControl{
Dashboard: true,
DeniedSeverity: highSeverity.Level,
Categories: testCategoryList.List,
SaveRequests: true,
}

highSeverity = Severity{Level: "high"}
)

func TestNewTerrascanConfigReader(t *testing.T) {

testPolicy := Policy{
RepoPath: "rego-subdir",
BasePath: "custom-path",
RepoURL: "https://repository/url",
Branch: "branch-name",
}
testRules := Rules{
ScanRules: []string{"rule.1", "rule.2", "rule.3", "rule.4", "rule.5"},
SkipRules: []string{"rule.1"},
}

categoryList := Category{List: []string{"category.1", "category.2"}}
highSeverity := Severity{Level: "high"}

type args struct {
fileName string
Expand Down Expand Up @@ -82,23 +98,23 @@ func TestNewTerrascanConfigReader(t *testing.T) {
{
name: "invalid toml config file",
args: args{
fileName: "testdata/invalid.toml",
fileName: filepath.Join(testDataDir, "invalid.toml"),
},
wantErr: true,
want: &TerrascanConfigReader{},
},
{
name: "invalid yaml config file",
args: args{
fileName: "testdata/invalid.yaml",
fileName: filepath.Join(testDataDir, "invalid.toml"),
},
wantErr: true,
want: &TerrascanConfigReader{},
},
{
name: "valid toml config file with partial fields",
args: args{
fileName: "testdata/terrascan-config.toml",
fileName: filepath.Join(testDataDir, "terrascan-config.toml"),
},
want: &TerrascanConfigReader{
config: TerrascanConfig{
Expand All @@ -109,15 +125,18 @@ func TestNewTerrascanConfigReader(t *testing.T) {
{
name: "valid toml config file with all fields",
args: args{
fileName: "testdata/terrascan-config-all-fields.toml",
fileName: filepath.Join(testDataDir, "terrascan-config-all-fields.toml"),
},
want: &TerrascanConfigReader{
config: TerrascanConfig{
Policy: testPolicy,
Notifications: map[string]Notifier{
"webhook1": testNotifier,
},
Rules: testRules,
Rules: testRules,
Severity: highSeverity,
Category: testCategoryList,
K8sAdmissionControl: testK8sAdmControl,
},
},
assertGetters: true,
Expand All @@ -130,7 +149,7 @@ func TestNewTerrascanConfigReader(t *testing.T) {
{
name: "valid toml config file with all fields and severity defined",
args: args{
fileName: "testdata/terrascan-config-severity.toml",
fileName: filepath.Join(testDataDir, "terrascan-config-severity.toml"),
},
want: &TerrascanConfigReader{
config: TerrascanConfig{
Expand All @@ -152,7 +171,7 @@ func TestNewTerrascanConfigReader(t *testing.T) {
{
name: "valid toml config file with all fields and categories defined",
args: args{
fileName: "testdata/terrascan-config-category.toml",
fileName: filepath.Join(testDataDir, "terrascan-config-category.toml"),
},
want: &TerrascanConfigReader{
config: TerrascanConfig{
Expand All @@ -161,7 +180,7 @@ func TestNewTerrascanConfigReader(t *testing.T) {
"webhook1": testNotifier,
},
Rules: testRules,
Category: categoryList,
Category: testCategoryList,
},
},
assertGetters: true,
Expand All @@ -171,26 +190,21 @@ func TestNewTerrascanConfigReader(t *testing.T) {
Policy: testPolicy,
Rules: testRules,
},
{
name: "invalid yaml config file",
args: args{
fileName: "testdata/invalid.yaml",
},
wantErr: true,
want: &TerrascanConfigReader{},
},
{
name: "valid yaml config file with all fields",
args: args{
fileName: "testdata/terrascan-config-all-fields.yaml",
fileName: filepath.Join(testDataDir, "terrascan-config-all-fields.yaml"),
},
want: &TerrascanConfigReader{
config: TerrascanConfig{
Policy: testPolicy,
Notifications: map[string]Notifier{
"webhook1": testNotifier,
},
Rules: testRules,
Rules: testRules,
Severity: highSeverity,
Category: testCategoryList,
K8sAdmissionControl: testK8sAdmControl,
},
},
assertGetters: true,
Expand All @@ -203,7 +217,7 @@ func TestNewTerrascanConfigReader(t *testing.T) {
{
name: "valid yaml config file with all fields and severity defined",
args: args{
fileName: "testdata/terrascan-config-severity.yml",
fileName: filepath.Join(testDataDir, "terrascan-config-severity.yml"),
},
want: &TerrascanConfigReader{
config: TerrascanConfig{
Expand All @@ -225,7 +239,7 @@ func TestNewTerrascanConfigReader(t *testing.T) {
{
name: "valid yaml config file with all fields and categories defined",
args: args{
fileName: "testdata/terrascan-config-category.yaml",
fileName: filepath.Join(testDataDir, "terrascan-config-category.yaml"),
},
want: &TerrascanConfigReader{
config: TerrascanConfig{
Expand All @@ -234,7 +248,7 @@ func TestNewTerrascanConfigReader(t *testing.T) {
"webhook1": testNotifier,
},
Rules: testRules,
Category: categoryList,
Category: testCategoryList,
},
},
assertGetters: true,
Expand Down
26 changes: 25 additions & 1 deletion pkg/config/global_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,15 @@
package config

import (
"path/filepath"
"reflect"
"testing"

"github.com/accurics/terrascan/pkg/utils"
)

func TestLoadGlobalConfig(t *testing.T) {
testConfigFile := "./testdata/terrascan-config.toml"
testConfigFile := filepath.Join(testDataDir, "terrascan-config-all-fields.toml")
absDefaultBasePolicyPath, absDefaultPolicyRepoPath, _ := utils.GetAbsPolicyConfigPaths(defaultBasePolicyPath, defaultPolicyRepoPath)
absCustomPath, absRegoSubdirPath, _ := utils.GetAbsPolicyConfigPaths("custom-path", "rego-subdir")

Expand All @@ -38,6 +40,12 @@ func TestLoadGlobalConfig(t *testing.T) {
policyRepoPath string
repoURL string
branchName string
scanRules []string
skipRules []string
severity string
categories []string
notifications map[string]Notifier
k8sAdmControl K8sAdmissionControl
}{
{
// no error expected
Expand Down Expand Up @@ -70,6 +78,14 @@ func TestLoadGlobalConfig(t *testing.T) {
policyRepoPath: absRegoSubdirPath,
repoURL: "https://repository/url",
branchName: "branch-name",
scanRules: testRules.ScanRules,
skipRules: testRules.SkipRules,
severity: highSeverity.Level,
categories: testCategoryList.List,
notifications: map[string]Notifier{
"webhook1": testNotifier,
},
k8sAdmControl: testK8sAdmControl,
},
}
for _, tt := range tests {
Expand All @@ -81,6 +97,14 @@ func TestLoadGlobalConfig(t *testing.T) {
if GetPolicyBasePath() != tt.policyBasePath || GetPolicyRepoPath() != tt.policyRepoPath || GetPolicyRepoURL() != tt.repoURL || GetPolicyBranch() != tt.branchName {
t.Errorf("LoadGlobalConfig() error = got BasePath: %v, RepoPath: %v, RepoURL: %v, BranchName: %v, want BasePath: %v, RepoPath: %v, RepoURL: %v, BranchName: %v", GetPolicyBasePath(), GetPolicyRepoPath(), GetPolicyRepoURL(), GetPolicyBranch(), tt.policyBasePath, tt.policyRepoPath, tt.repoURL, tt.branchName)
}

if !utils.IsSliceEqual(GetScanRules(), tt.scanRules) || !utils.IsSliceEqual(GetSkipRules(), tt.skipRules) || !utils.IsSliceEqual(GetCategoryList(), tt.categories) || GetSeverityLevel() != tt.severity {
t.Errorf("LoadGlobalConfig() error = got scan rules: %v, skip rules: %v, categories: %v, severity: %v, want scan rules: %v, skip rules: %v, categories: %v, severity: %v", GetScanRules(), GetSkipRules(), GetCategoryList(), GetSeverityLevel(), tt.scanRules, tt.skipRules, tt.categories, tt.severity)
}

if !reflect.DeepEqual(GetNotifications(), tt.notifications) || !reflect.DeepEqual(GetK8sAdmissionControl(), tt.k8sAdmControl) {
t.Errorf("LoadGlobalConfig() error = got notifications: %v, k8s admission control: %v, want notifications: %v, k8s admission control: %v", GetNotifications(), GetK8sAdmissionControl(), tt.notifications, tt.k8sAdmControl)
}
})
}
}
20 changes: 19 additions & 1 deletion pkg/config/testdata/terrascan-config-all-fields.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,22 @@ scan-rules = [
]
skip-rules = [
"rule.1"
]
]

[category]
list = [
"category.1",
"category.2",
]

[severity]
level = "high"

[k8s-admission-control]
dashboard = true
denied-categories = [
"category.1",
"category.2",
]
denied-severity = "high"
save-requests = true
13 changes: 13 additions & 0 deletions pkg/config/testdata/terrascan-config-all-fields.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,16 @@ rules:
- rule.5
skip-rules:
- rule.1
category:
list:
- category.1
- category.2
severity:
level: high
k8s-admission-control:
dashboard: true
denied-categories:
- "category.1"
- "category.2"
denied-severity: high
save-requests: true

0 comments on commit ff2c2a5

Please sign in to comment.