argo-cd/util/argo/normalizers/diff_normalizer_test.go
Alexander Matyushentsev 192ee93fc4
feat: Gitops engine (#3066)
* Move utils packages that are required for gitops engine under engine/pkg/utils package.
Following changes were implemented:
* util/health package is split into two parts: resource health assessement & resource health assessement and moved into engine/pkg/utils
* utils packages moved: Closer and Close method of util package moved into engine/pkg/utils/io package
* packages diff, errors, exec, json, kube and tracing moved into engine/pkg/utils

* Move single cluster caching into engine/kube/cache package

* move sync functionality to engine/kube/sync package

* remove dependency on metrics package from engine/pkg/utils/kube/cache

* move annotation label definitions into engine/pkg/utils/kube/sync

* make sure engine/pkg has no dependencies on other argo-cd packages

* allow importing engine as a go module

* implement a high-level interface that might be consumed by flux

* fix deadlock caused by cluster cache event handler

* ClusterCache should return error if requested group kind not found

* remove obsolete tests

* apply reviewer notes
2020-05-15 10:01:18 -07:00

117 lines
3.2 KiB
Go

package normalizers
import (
"testing"
"github.com/ghodss/yaml"
"github.com/stretchr/testify/assert"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1"
"github.com/argoproj/argo-cd/test"
)
func TestNormalizeObjectWithMatchedGroupKind(t *testing.T) {
normalizer, err := NewIgnoreNormalizer([]v1alpha1.ResourceIgnoreDifferences{{
Group: "apps",
Kind: "Deployment",
JSONPointers: []string{"/not-matching-path", "/spec/template/spec/containers"},
}}, make(map[string]v1alpha1.ResourceOverride))
assert.Nil(t, err)
deployment := test.NewDeployment()
_, has, err := unstructured.NestedSlice(deployment.Object, "spec", "template", "spec", "containers")
assert.Nil(t, err)
assert.True(t, has)
err = normalizer.Normalize(deployment)
assert.Nil(t, err)
_, has, err = unstructured.NestedSlice(deployment.Object, "spec", "template", "spec", "containers")
assert.Nil(t, err)
assert.False(t, has)
}
func TestNormalizeNoMatchedGroupKinds(t *testing.T) {
normalizer, err := NewIgnoreNormalizer([]v1alpha1.ResourceIgnoreDifferences{{
Group: "",
Kind: "Service",
JSONPointers: []string{"/spec"},
}}, make(map[string]v1alpha1.ResourceOverride))
assert.Nil(t, err)
deployment := test.NewDeployment()
err = normalizer.Normalize(deployment)
assert.Nil(t, err)
_, hasSpec, err := unstructured.NestedMap(deployment.Object, "spec")
assert.Nil(t, err)
assert.True(t, hasSpec)
}
func TestNormalizeMatchedResourceOverrides(t *testing.T) {
normalizer, err := NewIgnoreNormalizer([]v1alpha1.ResourceIgnoreDifferences{}, map[string]v1alpha1.ResourceOverride{
"apps/Deployment": {
IgnoreDifferences: `jsonPointers: ["/spec/template/spec/containers"]`,
},
})
assert.Nil(t, err)
deployment := test.NewDeployment()
_, has, err := unstructured.NestedSlice(deployment.Object, "spec", "template", "spec", "containers")
assert.Nil(t, err)
assert.True(t, has)
err = normalizer.Normalize(deployment)
assert.Nil(t, err)
_, has, err = unstructured.NestedSlice(deployment.Object, "spec", "template", "spec", "containers")
assert.Nil(t, err)
assert.False(t, has)
}
const testCRDYAML = `
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: certificates.cert-manager.io
spec:
group: cert-manager.io
names:
kind: Certificate
listKind: CertificateList
plural: certificates
shortNames:
- cert
- certs
singular: certificate
scope: Namespaced
version: v1alpha1`
func TestNormalizeMissingJsonPointer(t *testing.T) {
normalizer, err := NewIgnoreNormalizer([]v1alpha1.ResourceIgnoreDifferences{}, map[string]v1alpha1.ResourceOverride{
"apps/Deployment": {
IgnoreDifferences: `jsonPointers: ["/garbage"]`,
},
"apiextensions.k8s.io/CustomResourceDefinition": {
IgnoreDifferences: `jsonPointers: ["/spec/additionalPrinterColumns/0/priority"]`,
},
})
assert.NoError(t, err)
deployment := test.NewDeployment()
err = normalizer.Normalize(deployment)
assert.NoError(t, err)
crd := unstructured.Unstructured{}
err = yaml.Unmarshal([]byte(testCRDYAML), &crd)
assert.NoError(t, err)
err = normalizer.Normalize(&crd)
assert.NoError(t, err)
}