mirror of
https://github.com/kubescape/kubescape.git
synced 2026-04-15 06:58:11 +00:00
Wrote new tests for the following files: - controllink.go - display.go - fileutils.go - getter/getpoliciesutils.go - getter/utils.go Signed-off-by: VaibhavMalik4187 <vaibhavmalik2018@gmail.com>
215 lines
4.9 KiB
Go
215 lines
4.9 KiB
Go
package cautils
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/kubescape/opa-utils/objectsenvelopes/localworkload"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func onlineBoutiquePath() string {
|
|
o, _ := os.Getwd()
|
|
return filepath.Join(filepath.Dir(o), "..", "examples", "online-boutique")
|
|
}
|
|
|
|
func helmChartPath() string {
|
|
o, _ := os.Getwd()
|
|
return filepath.Join(filepath.Dir(o), "..", "examples", "helm_chart")
|
|
}
|
|
|
|
func TestListFiles(t *testing.T) {
|
|
|
|
filesPath := onlineBoutiquePath()
|
|
|
|
files, errs := listFiles(filesPath)
|
|
assert.Equal(t, 0, len(errs))
|
|
assert.Equal(t, 12, len(files))
|
|
}
|
|
|
|
func TestLoadResourcesFromFiles(t *testing.T) {
|
|
workloads := LoadResourcesFromFiles(context.TODO(), onlineBoutiquePath(), "")
|
|
assert.Equal(t, 12, len(workloads))
|
|
|
|
for i, w := range workloads {
|
|
switch filepath.Base(i) {
|
|
case "adservice.yaml":
|
|
assert.Equal(t, 2, len(w))
|
|
assert.Equal(t, "apps/v1//Deployment/adservice", getRelativePath(w[0].GetID()))
|
|
assert.Equal(t, "/v1//Service/adservice", getRelativePath(w[1].GetID()))
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestLoadResourcesFromHelmCharts(t *testing.T) {
|
|
sourceToWorkloads, sourceToChartName := LoadResourcesFromHelmCharts(context.TODO(), helmChartPath())
|
|
assert.Equal(t, 6, len(sourceToWorkloads))
|
|
|
|
for file, workloads := range sourceToWorkloads {
|
|
assert.Equalf(t, 1, len(workloads), "expected 1 workload in file %s", file)
|
|
|
|
w := workloads[0]
|
|
assert.True(t, localworkload.IsTypeLocalWorkload(w.GetObject()), "Expected localworkload as object type")
|
|
assert.Equal(t, "kubescape", sourceToChartName[file].Name)
|
|
assert.Equal(t, helmChartPath(), sourceToChartName[file].Path)
|
|
|
|
switch filepath.Base(file) {
|
|
case "serviceaccount.yaml":
|
|
assert.Equal(t, "/v1//ServiceAccount/kubescape-discovery", getRelativePath(w.GetID()))
|
|
case "clusterrole.yaml":
|
|
assert.Equal(t, "rbac.authorization.k8s.io/v1//ClusterRole/-kubescape", getRelativePath(w.GetID()))
|
|
case "cronjob.yaml":
|
|
assert.Equal(t, "batch/v1//CronJob/-kubescape", getRelativePath(w.GetID()))
|
|
case "role.yaml":
|
|
assert.Equal(t, "rbac.authorization.k8s.io/v1//Role/-kubescape", getRelativePath(w.GetID()))
|
|
case "rolebinding.yaml":
|
|
assert.Equal(t, "rbac.authorization.k8s.io/v1//RoleBinding/-kubescape", getRelativePath(w.GetID()))
|
|
case "clusterrolebinding.yaml":
|
|
assert.Equal(t, "rbac.authorization.k8s.io/v1//ClusterRoleBinding/-kubescape", getRelativePath(w.GetID()))
|
|
default:
|
|
assert.Failf(t, "missing case for file: %s", filepath.Base(file))
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestLoadFiles(t *testing.T) {
|
|
files, _ := listFiles(onlineBoutiquePath())
|
|
_, err := loadFiles("", files)
|
|
assert.Equal(t, 0, len(err))
|
|
}
|
|
|
|
func TestListDirs(t *testing.T) {
|
|
dirs, _ := listDirs(filepath.Join(onlineBoutiquePath(), "adservice.yaml"))
|
|
assert.Equal(t, 0, len(dirs))
|
|
|
|
expectedDirs := []string{filepath.Join("examples", "helm_chart"), filepath.Join("examples", "helm_chart", "templates")}
|
|
dirs, _ = listDirs(helmChartPath())
|
|
assert.Equal(t, len(expectedDirs), len(dirs))
|
|
for i := range expectedDirs {
|
|
assert.Contains(t, dirs[i], expectedDirs[i])
|
|
}
|
|
}
|
|
|
|
func TestLoadFile(t *testing.T) {
|
|
files, _ := listFiles(filepath.Join(onlineBoutiquePath(), "adservice.yaml"))
|
|
assert.Equal(t, 1, len(files))
|
|
|
|
_, err := loadFile(files[0])
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
func getRelativePath(p string) string {
|
|
pp := strings.SplitAfter(p, "api=")
|
|
return pp[1]
|
|
}
|
|
|
|
// Converts a YAML object to a JSON object
|
|
func TestConvertYamlToJson(t *testing.T) {
|
|
tests := []struct {
|
|
yamlObj map[interface{}]interface{}
|
|
jsonObj map[string]interface{}
|
|
}{
|
|
{
|
|
yamlObj: map[interface{}]interface{}{
|
|
"name": "John",
|
|
"age": 30,
|
|
"city": "New York",
|
|
},
|
|
jsonObj: map[string]interface{}{
|
|
"name": "John",
|
|
"age": 30,
|
|
"city": "New York",
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run("", func(t *testing.T) {
|
|
assert.Equal(t, tt.jsonObj, convertYamlToJson(tt.yamlObj))
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestIsYaml(t *testing.T) {
|
|
tests := []struct {
|
|
path string
|
|
want bool
|
|
}{
|
|
{
|
|
path: "temp.yaml",
|
|
want: true,
|
|
},
|
|
{
|
|
path: "temp.json",
|
|
want: false,
|
|
},
|
|
{
|
|
path: "random.txt",
|
|
want: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.path, func(t *testing.T) {
|
|
assert.Equal(t, tt.want, IsYaml(tt.path))
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestIsJson(t *testing.T) {
|
|
tests := []struct {
|
|
path string
|
|
want bool
|
|
}{
|
|
{
|
|
path: "temp.yaml",
|
|
want: false,
|
|
},
|
|
{
|
|
path: "temp.json",
|
|
want: true,
|
|
},
|
|
{
|
|
path: "random.txt",
|
|
want: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.path, func(t *testing.T) {
|
|
assert.Equal(t, tt.want, IsJson(tt.path))
|
|
})
|
|
}
|
|
|
|
}
|
|
|
|
func TestGetFileFormat(t *testing.T) {
|
|
tests := []struct {
|
|
path string
|
|
want FileFormat
|
|
}{
|
|
{
|
|
path: "temp.yaml",
|
|
want: YAML_FILE_FORMAT,
|
|
},
|
|
{
|
|
path: "temp.json",
|
|
want: JSON_FILE_FORMAT,
|
|
},
|
|
{
|
|
path: "random.txt",
|
|
want: "random.txt",
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.path, func(t *testing.T) {
|
|
assert.Equal(t, tt.want, GetFileFormat(tt.path))
|
|
})
|
|
}
|
|
|
|
}
|