2023-09-05 01:25:06 +02:00
|
|
|
package test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
"github.com/go-git/go-billy/v5"
|
2024-12-04 07:09:19 +01:00
|
|
|
"github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/log"
|
2023-09-05 01:25:06 +02:00
|
|
|
"github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/resource"
|
2024-12-04 07:09:19 +01:00
|
|
|
"github.com/sergi/go-diff/diffmatchpatch"
|
|
|
|
"gopkg.in/yaml.v2"
|
2023-09-05 01:25:06 +02:00
|
|
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
|
|
|
)
|
|
|
|
|
2024-12-04 07:09:19 +01:00
|
|
|
func getAndCompareResource(actualResources []*unstructured.Unstructured, fs billy.Filesystem, path string) (bool, string, error) {
|
2024-10-15 12:29:18 +05:30
|
|
|
expectedResources, err := resource.GetResourceFromPath(fs, path)
|
2023-09-05 01:25:06 +02:00
|
|
|
if err != nil {
|
2024-12-04 07:09:19 +01:00
|
|
|
return false, "", fmt.Errorf("error: failed to load resource (%s)", err)
|
2023-09-05 01:25:06 +02:00
|
|
|
}
|
2024-10-15 12:29:18 +05:30
|
|
|
|
|
|
|
expectedResourcesMap := map[string]unstructured.Unstructured{}
|
|
|
|
for _, expectedResource := range expectedResources {
|
|
|
|
if expectedResource == nil {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
r := *expectedResource
|
|
|
|
resource.FixupGenerateLabels(r)
|
|
|
|
expectedResourcesMap[expectedResource.GetNamespace()+"/"+expectedResource.GetName()] = r
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, actualResource := range actualResources {
|
|
|
|
if actualResource == nil {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
r := *actualResource
|
|
|
|
resource.FixupGenerateLabels(r)
|
|
|
|
equals, err := resource.Compare(r, expectedResourcesMap[r.GetNamespace()+"/"+r.GetName()], true)
|
|
|
|
if err != nil {
|
2024-12-04 07:09:19 +01:00
|
|
|
return false, "", fmt.Errorf("error: failed to compare resources (%s)", err)
|
2024-10-15 12:29:18 +05:30
|
|
|
}
|
|
|
|
if !equals {
|
2024-12-04 07:09:19 +01:00
|
|
|
log.Log.V(4).Info("Resource diff", "expected", expectedResourcesMap[r.GetNamespace()+"/"+r.GetName()], "actual", r)
|
|
|
|
es, _ := yaml.Marshal(expectedResourcesMap[r.GetNamespace()+"/"+r.GetName()])
|
|
|
|
as, _ := yaml.Marshal(r)
|
|
|
|
dmp := diffmatchpatch.New()
|
|
|
|
diffs := dmp.DiffMain(string(es), string(as), false)
|
|
|
|
log.Log.V(4).Info("\n" + dmp.DiffPrettyText(diffs) + "\n")
|
|
|
|
return false, dmp.DiffPrettyText(diffs), nil
|
2024-10-15 12:29:18 +05:30
|
|
|
}
|
2023-09-05 01:25:06 +02:00
|
|
|
}
|
2024-12-04 07:09:19 +01:00
|
|
|
return true, "", nil
|
2023-09-05 01:25:06 +02:00
|
|
|
}
|