mirror of
https://github.com/kubescape/kubescape.git
synced 2026-04-15 06:58:11 +00:00
@@ -1,11 +0,0 @@
|
||||
package resourcehandler
|
||||
|
||||
type QueryableResources map[string]QueryableResource
|
||||
|
||||
// QueryableResource is a struct that holds a representation of a resource we would like to query (from the K8S API, or from other sources)
|
||||
type QueryableResource struct {
|
||||
// <api group/api version/resource>
|
||||
GroupVersionResourceTriplet string
|
||||
// metadata.name==<resource name>, metadata.namespace==<resource namespace> etc.
|
||||
FieldSelectors string
|
||||
}
|
||||
+10
@@ -6,6 +6,16 @@ import (
|
||||
"github.com/kubescape/kubescape/v2/core/cautils"
|
||||
)
|
||||
|
||||
type QueryableResources map[string]QueryableResource
|
||||
|
||||
// QueryableResource is a struct that holds a representation of a resource we would like to query (from the K8S API, or from other sources)
|
||||
type QueryableResource struct {
|
||||
// <api group/api version/resource>
|
||||
GroupVersionResourceTriplet string
|
||||
// metadata.name==<resource name>, metadata.namespace==<resource namespace> etc.
|
||||
FieldSelectors string
|
||||
}
|
||||
|
||||
func (qr *QueryableResource) String() string {
|
||||
if qr.FieldSelectors == "" {
|
||||
return qr.GroupVersionResourceTriplet
|
||||
@@ -0,0 +1,126 @@
|
||||
package resourcehandler
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"github.com/kubescape/kubescape/v2/core/cautils"
|
||||
)
|
||||
|
||||
func TestString(t *testing.T) {
|
||||
tt := []struct {
|
||||
name string
|
||||
input QueryableResource
|
||||
output string
|
||||
}{
|
||||
{
|
||||
name: "Empty field selectors",
|
||||
input: QueryableResource{GroupVersionResourceTriplet: "/v1/pods", FieldSelectors: ""},
|
||||
output: "/v1/pods",
|
||||
},
|
||||
{
|
||||
name: "Non-empty field selectors",
|
||||
input: QueryableResource{GroupVersionResourceTriplet: "gvr1", FieldSelectors: "fs1"},
|
||||
output: "/v1/pods/fs1",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range tt {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
result := tc.input.String()
|
||||
if result != tc.output {
|
||||
t.Errorf("Expected: %s, got: %s", tc.output, result)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestCopy(t *testing.T) {
|
||||
rsrc := &QueryableResource{GroupVersionResourceTriplet: "gvr1", FieldSelectors: "fs1"}
|
||||
copy := rsrc.Copy()
|
||||
|
||||
if copy != *rsrc {
|
||||
t.Errorf("Expected: %v, got: %v", *rsrc, copy)
|
||||
}
|
||||
|
||||
if fmt.Sprintf("%p", rsrc) == fmt.Sprintf("%p", ©) {
|
||||
t.Errorf("pointers of original object and copy should not be same. object: %p, copy: %p", rsrc, ©)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAddFieldSelector(t *testing.T) {
|
||||
tt := []struct {
|
||||
name string
|
||||
initial QueryableResource
|
||||
fieldSelector string
|
||||
expected QueryableResource
|
||||
}{
|
||||
{
|
||||
name: "Add to empty FieldSelectors",
|
||||
initial: QueryableResource{GroupVersionResourceTriplet: "gvr1", FieldSelectors: ""},
|
||||
fieldSelector: "fs1",
|
||||
expected: QueryableResource{GroupVersionResourceTriplet: "gvr1", FieldSelectors: "fs1"},
|
||||
},
|
||||
{
|
||||
name: "Add to non-empty FieldSelectors",
|
||||
initial: QueryableResource{GroupVersionResourceTriplet: "gvr1", FieldSelectors: "fs1"},
|
||||
fieldSelector: "fs2",
|
||||
expected: QueryableResource{GroupVersionResourceTriplet: "gvr1", FieldSelectors: "fs1,fs2"},
|
||||
},
|
||||
{
|
||||
name: "Add empty FieldSelector to non-empty FieldSelectors",
|
||||
initial: QueryableResource{GroupVersionResourceTriplet: "gvr1", FieldSelectors: "fs1"},
|
||||
fieldSelector: "",
|
||||
expected: QueryableResource{GroupVersionResourceTriplet: "gvr1", FieldSelectors: "fs1"},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range tt {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
tc.initial.AddFieldSelector(tc.fieldSelector)
|
||||
|
||||
if tc.initial != tc.expected {
|
||||
t.Errorf("Expected: %v, got: %v", tc.expected, tc.initial)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestToK8sResourceMap(t *testing.T) {
|
||||
qrm := make(QueryableResources)
|
||||
qrm.Add(QueryableResource{GroupVersionResourceTriplet: "/v1/pods", FieldSelectors: "metadata.namespace=kube-system"})
|
||||
qrm.Add(QueryableResource{GroupVersionResourceTriplet: "/v1/pods", FieldSelectors: "metadata.namespace=default"})
|
||||
qrm.Add(QueryableResource{GroupVersionResourceTriplet: "/v1/nodes", FieldSelectors: ""})
|
||||
qrm.Add(QueryableResource{GroupVersionResourceTriplet: "batch/v1/jobs", FieldSelectors: ""})
|
||||
|
||||
expectedResult := cautils.K8SResources{
|
||||
"/v1/pods": nil,
|
||||
"/v1/nodes": nil,
|
||||
"batch/v1/jobs": nil,
|
||||
}
|
||||
|
||||
result := qrm.ToK8sResourceMap()
|
||||
|
||||
if len(result) != len(expectedResult) {
|
||||
t.Fatalf("Expected: %v, got: %v", expectedResult, result)
|
||||
}
|
||||
|
||||
for k, v := range result {
|
||||
if _, ok := expectedResult[k]; !ok || v != nil {
|
||||
t.Fatalf("Expected: %v, got: %v", expectedResult, result)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestAdd(t *testing.T) {
|
||||
qrMap := make(QueryableResources)
|
||||
qr := QueryableResource{GroupVersionResourceTriplet: "/v1/pods", FieldSelectors: "metadata.namespace=default"}
|
||||
qrMap.Add(qr)
|
||||
|
||||
if resource, ok := qrMap["/v1/pods/metadata.namespace=default"]; !ok {
|
||||
t.Fatalf("Expected resource was not added to the map")
|
||||
} else if !reflect.DeepEqual(resource, qr) {
|
||||
t.Fatalf("Expected: %v, got: %v", qr, resource)
|
||||
}
|
||||
}
|
||||
@@ -57,6 +57,23 @@ func TestToScanInfo(t *testing.T) {
|
||||
s := ToScanInfo(req)
|
||||
assert.True(t, s.ScanAll)
|
||||
assert.True(t, s.FrameworkScan)
|
||||
assert.Nil(t, s.WorkloadIdentifier)
|
||||
}
|
||||
{
|
||||
req := &utilsmetav1.PostScanRequest{
|
||||
Workload: &apisv1.WorkloadScan{
|
||||
ApiVersion: "apps/v1",
|
||||
Kind: "Deployment",
|
||||
Name: "nginx",
|
||||
Namespace: "ns1",
|
||||
},
|
||||
}
|
||||
s := ToScanInfo(req)
|
||||
assert.NotNil(t, s.WorkloadIdentifier)
|
||||
assert.Equal(t, "apps/v1", s.WorkloadIdentifier.ApiVersion)
|
||||
assert.Equal(t, "Deployment", s.WorkloadIdentifier.Kind)
|
||||
assert.Equal(t, "nginx", s.WorkloadIdentifier.Name)
|
||||
assert.Equal(t, "ns1", s.WorkloadIdentifier.Namespace)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user