Skip to content

Commit

Permalink
raised assert
Browse files Browse the repository at this point in the history
Signed-off-by: Shubham Gupta <[email protected]>
  • Loading branch information
shubham-cmyk committed Oct 14, 2023
1 parent 275e69c commit 2c02adb
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 1 deletion.
38 changes: 38 additions & 0 deletions pkg/client/assert.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package client

import (
"context"

"github.com/kyverno/chainsaw/pkg/utils/kubernetes"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
ctrlclient "sigs.k8s.io/controller-runtime/pkg/client"
)

func Assert(ctx context.Context, client Client, expected ctrlclient.Object, namespace string) (bool, error) {

// Step 1: Get the object from the cluster
// Step 2 We need to make sure that obj is cluster scoped or namespaced
// Step 3: Compare the object with the expected object
// Step 4: Return true if the objects are equal, false otherwise

// Try to check if the object is namespaced or cluster scoped and get the name and namespace
name, ns, err := kubernetes.Namespaced(expected, namespace)
if err != nil {
return false, err
}

gvk := expected.GetObjectKind().GroupVersionKind()

actualObj := unstructured.Unstructured{}

err = client.Get(ctx, ctrlclient.ObjectKey{Name: name, Namespace: ns}, &actualObj)
if err != nil {
return false, err
}

expectedObj, _ := runtime.DefaultUnstructuredConverter.ToUnstructured(expected)

kubernetes.IsSubset(actualObj, expectedObj)
return true, nil
}
28 changes: 27 additions & 1 deletion pkg/runner/runner.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ func runTest(t *testing.T, cfg *rest.Config, test discovery.Test) {
step := test.Spec.Steps[i]
t.Run(fmt.Sprintf("step-%d", i+1), func(t *testing.T) {
t.Helper()
executeStep(t, test.BasePath, namespace.Name, step, c)
executeStep(t, test.BasePath, step, c, "")
})
}
}
Expand All @@ -86,6 +86,17 @@ func executeStep(t *testing.T, basePath string, namespace string, step v1alpha1.
t.Fatal(err)
}
for i := range resources {
resource := &resources[i]
if resource.GetNamespace() == "" {
namespaced, err := c.IsObjectNamespaced(resource)
if err != nil {
t.Fatal(err)
}
if namespaced {
resource.SetNamespace(namespace)
}
}
_, err := client.CreateOrUpdate(context.Background(), c, resource)
resource := &resources[i]
if resource.GetNamespace() == "" {
namespaced, err := c.IsObjectNamespaced(resource)
Expand All @@ -102,4 +113,19 @@ func executeStep(t *testing.T, basePath string, namespace string, step v1alpha1.
}
}
}

for _, assert := range step.Assert {
resources, err := resource.Load(assert.File)
if err != nil {
t.Fatal(err)
}

for i := range resources {
_, err := client.Assert(context.Background(), c, &resources[i])
if err != nil {
t.Fatal(err)
}
}

}
}
14 changes: 14 additions & 0 deletions pkg/utils/kubernetes/kubernetes.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package kubernetes

import (
ctrlclient "sigs.k8s.io/controller-runtime/pkg/client"
)

// This determine if the resource is clustered or namespaced
// if the resource is namespaced and doesn't have a namespace set, use the pet namespace
// if the resource is namespaced and has a namespace set, use the namespace set
// return namespace, name, error
func Namespaced(obj ctrlclient.Object, petNamespace string) (string, string, error) {

return "", "", nil
}
5 changes: 5 additions & 0 deletions pkg/utils/kubernetes/subset.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package kubernetes

func IsSubset(actual, expected interface{}) bool {
return false
}

0 comments on commit 2c02adb

Please sign in to comment.