From 710d904998f95f83c66d39470dbe1efd0d25a42e Mon Sep 17 00:00:00 2001 From: ymqytw Date: Thu, 2 Feb 2017 15:20:45 -0800 Subject: [PATCH] add apply cmd tests for TPR --- hack/make-rules/test-cmd-util.sh | 162 +++++++++++++++--- hack/testdata/TPR/bar.yaml | 8 + hack/testdata/TPR/foo-added-subfield.yaml | 11 ++ hack/testdata/TPR/foo-deleted-subfield.yaml | 10 ++ hack/testdata/TPR/foo-updated-subfield.yaml | 11 ++ hack/testdata/TPR/foo.yaml | 11 ++ .../TPR/multi-tpr-list-added-field.yaml | 19 ++ .../TPR/multi-tpr-list-deleted-field.yaml | 17 ++ .../TPR/multi-tpr-list-updated-field.yaml | 19 ++ hack/testdata/TPR/multi-tpr-list.yaml | 19 ++ 10 files changed, 261 insertions(+), 26 deletions(-) create mode 100644 hack/testdata/TPR/bar.yaml create mode 100644 hack/testdata/TPR/foo-added-subfield.yaml create mode 100644 hack/testdata/TPR/foo-deleted-subfield.yaml create mode 100644 hack/testdata/TPR/foo-updated-subfield.yaml create mode 100644 hack/testdata/TPR/foo.yaml create mode 100644 hack/testdata/TPR/multi-tpr-list-added-field.yaml create mode 100644 hack/testdata/TPR/multi-tpr-list-deleted-field.yaml create mode 100644 hack/testdata/TPR/multi-tpr-list-updated-field.yaml create mode 100644 hack/testdata/TPR/multi-tpr-list.yaml diff --git a/hack/make-rules/test-cmd-util.sh b/hack/make-rules/test-cmd-util.sh index 403c03d2012..7b9494c548c 100644 --- a/hack/make-rules/test-cmd-util.sh +++ b/hack/make-rules/test-cmd-util.sh @@ -1259,17 +1259,7 @@ __EOF__ kube::test::get_object_assert bars "{{range.items}}{{$id_field}}:{{end}}" '' # Test that we can create a new resource of type Foo - kubectl "${kube_flags[@]}" create -f - "${kube_flags[@]}" << __EOF__ -{ - "kind": "Foo", - "apiVersion": "company.com/v1", - "metadata": { - "name": "test" - }, - "some-field": "field1", - "other-field": "field2" -} -__EOF__ + kubectl "${kube_flags[@]}" create -f hack/testdata/TPR/foo.yaml "${kube_flags[@]}" # Test that we can list this new third party resource kube::test::get_object_assert foos "{{range.items}}{{$id_field}}:{{end}}" 'test:' @@ -1291,10 +1281,10 @@ __EOF__ kubectl "${kube_flags[@]}" get foos/test -o json kubectl "${kube_flags[@]}" get foos -o yaml kubectl "${kube_flags[@]}" get foos/test -o yaml - kubectl "${kube_flags[@]}" get foos -o "jsonpath={.items[*].some-field}" --allow-missing-template-keys=false - kubectl "${kube_flags[@]}" get foos/test -o "jsonpath={.some-field}" --allow-missing-template-keys=false - kubectl "${kube_flags[@]}" get foos -o "go-template={{range .items}}{{index . \"some-field\"}}{{end}}" --allow-missing-template-keys=false - kubectl "${kube_flags[@]}" get foos/test -o "go-template={{index . \"some-field\"}}" --allow-missing-template-keys=false + kubectl "${kube_flags[@]}" get foos -o "jsonpath={.items[*].someField}" --allow-missing-template-keys=false + kubectl "${kube_flags[@]}" get foos/test -o "jsonpath={.someField}" --allow-missing-template-keys=false + kubectl "${kube_flags[@]}" get foos -o "go-template={{range .items}}{{.someField}}{{end}}" --allow-missing-template-keys=false + kubectl "${kube_flags[@]}" get foos/test -o "go-template={{.someField}}" --allow-missing-template-keys=false # Test patching kube::log::status "Testing ThirdPartyResource patching" @@ -1348,17 +1338,7 @@ __EOF__ kube::test::get_object_assert foos "{{range.items}}{{$id_field}}:{{end}}" '' # Test that we can create a new resource of type Bar - kubectl "${kube_flags[@]}" create -f - "${kube_flags[@]}" << __EOF__ -{ - "kind": "Bar", - "apiVersion": "company.com/v1", - "metadata": { - "name": "test" - }, - "some-field": "field1", - "other-field": "field2" -} -__EOF__ + kubectl "${kube_flags[@]}" create -f hack/testdata/TPR/bar.yaml "${kube_flags[@]}" # Test that we can list this new third party resource kube::test::get_object_assert bars "{{range.items}}{{$id_field}}:{{end}}" 'test:' @@ -1369,6 +1349,136 @@ __EOF__ # Make sure it's gone kube::test::get_object_assert bars "{{range.items}}{{$id_field}}:{{end}}" '' + # Test that we can create single item via apply + kubectl "${kube_flags[@]}" apply -f hack/testdata/TPR/foo.yaml + + # Test that we have create a foo named test + kube::test::get_object_assert foos "{{range.items}}{{$id_field}}:{{end}}" 'test:' + + # Test that the field has the expected value + kube::test::get_object_assert foos/test '{{.someField}}' 'field1' + + # Test that apply an empty patch doesn't change fields + kubectl "${kube_flags[@]}" apply -f hack/testdata/TPR/foo.yaml + + # Test that the field has the same value after re-apply + kube::test::get_object_assert foos/test '{{.someField}}' 'field1' + + # Test that apply has updated the subfield + kube::test::get_object_assert foos/test '{{.nestedField.someSubfield}}' 'subfield1' + + # Update a subfield and then apply the change + kubectl "${kube_flags[@]}" apply -f hack/testdata/TPR/foo-updated-subfield.yaml + + # Test that apply has updated the subfield + kube::test::get_object_assert foos/test '{{.nestedField.someSubfield}}' 'modifiedSubfield' + + # Test that the field has the expected value + kube::test::get_object_assert foos/test '{{.nestedField.otherSubfield}}' 'subfield2' + + # Delete a subfield and then apply the change + kubectl "${kube_flags[@]}" apply -f hack/testdata/TPR/foo-deleted-subfield.yaml + + # Test that apply has deleted the field + kube::test::get_object_assert foos/test '{{.nestedField.otherSubfield}}' '' + + # Test that the field does not exist + kube::test::get_object_assert foos/test '{{.nestedField.newSubfield}}' '' + + # Add a field and then apply the change + kubectl "${kube_flags[@]}" apply -f hack/testdata/TPR/foo-added-subfield.yaml + + # Test that apply has added the field + kube::test::get_object_assert foos/test '{{.nestedField.newSubfield}}' 'subfield3' + + # Delete the resource + kubectl "${kube_flags[@]}" delete -f hack/testdata/TPR/foo.yaml + + # Make sure it's gone + kube::test::get_object_assert foos "{{range.items}}{{$id_field}}:{{end}}" '' + + # Test that we can create list via apply + kubectl "${kube_flags[@]}" apply -f hack/testdata/TPR/multi-tpr-list.yaml + + # Test that we have create a foo and a bar from a list + kube::test::get_object_assert foos "{{range.items}}{{$id_field}}:{{end}}" 'test-list:' + kube::test::get_object_assert bars "{{range.items}}{{$id_field}}:{{end}}" 'test-list:' + + # Test that the field has the expected value + kube::test::get_object_assert foos/test-list '{{.someField}}' 'field1' + kube::test::get_object_assert bars/test-list '{{.someField}}' 'field1' + + # Test that re-apply an list doesn't change anything + kubectl "${kube_flags[@]}" apply -f hack/testdata/TPR/multi-tpr-list.yaml + + # Test that the field has the same value after re-apply + kube::test::get_object_assert foos/test-list '{{.someField}}' 'field1' + kube::test::get_object_assert bars/test-list '{{.someField}}' 'field1' + + # Test that the fields have the expected value + kube::test::get_object_assert foos/test-list '{{.someField}}' 'field1' + kube::test::get_object_assert bars/test-list '{{.someField}}' 'field1' + + # Update fields and then apply the change + kubectl "${kube_flags[@]}" apply -f hack/testdata/TPR/multi-tpr-list-updated-field.yaml + + # Test that apply has updated the fields + kube::test::get_object_assert foos/test-list '{{.someField}}' 'modifiedField' + kube::test::get_object_assert bars/test-list '{{.someField}}' 'modifiedField' + + # Test that the field has the expected value + kube::test::get_object_assert foos/test-list '{{.otherField}}' 'field2' + kube::test::get_object_assert bars/test-list '{{.otherField}}' 'field2' + + # Delete fields and then apply the change + kubectl "${kube_flags[@]}" apply -f hack/testdata/TPR/multi-tpr-list-deleted-field.yaml + + # Test that apply has deleted the fields + kube::test::get_object_assert foos/test-list '{{.otherField}}' '' + kube::test::get_object_assert bars/test-list '{{.otherField}}' '' + + # Test that the fields does not exist + kube::test::get_object_assert foos/test-list '{{.newField}}' '' + kube::test::get_object_assert bars/test-list '{{.newField}}' '' + + # Add a field and then apply the change + kubectl "${kube_flags[@]}" apply -f hack/testdata/TPR/multi-tpr-list-added-field.yaml + + # Test that apply has added the field + kube::test::get_object_assert foos/test-list '{{.newField}}' 'field3' + kube::test::get_object_assert bars/test-list '{{.newField}}' 'field3' + + # Delete the resource + kubectl "${kube_flags[@]}" delete -f hack/testdata/TPR/multi-tpr-list.yaml + + # Make sure it's gone + kube::test::get_object_assert foos "{{range.items}}{{$id_field}}:{{end}}" '' + kube::test::get_object_assert bars "{{range.items}}{{$id_field}}:{{end}}" '' + + ## kubectl apply --prune + # Test that no foo or bar exist + kube::test::get_object_assert foos "{{range.items}}{{$id_field}}:{{end}}" '' + kube::test::get_object_assert bars "{{range.items}}{{$id_field}}:{{end}}" '' + + # apply --prune on foo.yaml that has foo/test + kubectl apply --prune -l pruneGroup=true -f hack/testdata/TPR/foo.yaml "${kube_flags[@]}" --prune-whitelist=company.com/v1/Foo --prune-whitelist=company.com/v1/Bar + # check right tprs exist + kube::test::get_object_assert foos "{{range.items}}{{$id_field}}:{{end}}" 'test:' + kube::test::get_object_assert bars "{{range.items}}{{$id_field}}:{{end}}" '' + + # apply --prune on bar.yaml that has bar/test + kubectl apply --prune -l pruneGroup=true -f hack/testdata/TPR/bar.yaml "${kube_flags[@]}" --prune-whitelist=company.com/v1/Foo --prune-whitelist=company.com/v1/Bar + # check right tprs exist + kube::test::get_object_assert foos "{{range.items}}{{$id_field}}:{{end}}" '' + kube::test::get_object_assert bars "{{range.items}}{{$id_field}}:{{end}}" 'test:' + + # Delete the resource + kubectl "${kube_flags[@]}" delete -f hack/testdata/TPR/bar.yaml + + # Make sure it's gone + kube::test::get_object_assert foos "{{range.items}}{{$id_field}}:{{end}}" '' + kube::test::get_object_assert bars "{{range.items}}{{$id_field}}:{{end}}" '' + # teardown kubectl delete thirdpartyresources foo.company.com "${kube_flags[@]}" kubectl delete thirdpartyresources bar.company.com "${kube_flags[@]}" diff --git a/hack/testdata/TPR/bar.yaml b/hack/testdata/TPR/bar.yaml new file mode 100644 index 00000000000..6707f45d424 --- /dev/null +++ b/hack/testdata/TPR/bar.yaml @@ -0,0 +1,8 @@ +kind: Bar +apiVersion: company.com/v1 +metadata: + name: test + labels: + pruneGroup: "true" +someField: field1 +otherField: field2 diff --git a/hack/testdata/TPR/foo-added-subfield.yaml b/hack/testdata/TPR/foo-added-subfield.yaml new file mode 100644 index 00000000000..cc0439fda3e --- /dev/null +++ b/hack/testdata/TPR/foo-added-subfield.yaml @@ -0,0 +1,11 @@ +kind: Foo +apiVersion: company.com/v1 +metadata: + name: test + labels: + pruneGroup: "true" +someField: field1 +otherField: field2 +nestedField: + someSubfield: modifiedSubfield + newSubfield: subfield3 diff --git a/hack/testdata/TPR/foo-deleted-subfield.yaml b/hack/testdata/TPR/foo-deleted-subfield.yaml new file mode 100644 index 00000000000..0adb8c67f59 --- /dev/null +++ b/hack/testdata/TPR/foo-deleted-subfield.yaml @@ -0,0 +1,10 @@ +kind: Foo +apiVersion: company.com/v1 +metadata: + name: test + labels: + pruneGroup: "true" +someField: field1 +otherField: field2 +nestedField: + someSubfield: modifiedSubfield diff --git a/hack/testdata/TPR/foo-updated-subfield.yaml b/hack/testdata/TPR/foo-updated-subfield.yaml new file mode 100644 index 00000000000..a497fdb3831 --- /dev/null +++ b/hack/testdata/TPR/foo-updated-subfield.yaml @@ -0,0 +1,11 @@ +kind: Foo +apiVersion: company.com/v1 +metadata: + name: test + labels: + pruneGroup: "true" +someField: field1 +otherField: field2 +nestedField: + someSubfield: modifiedSubfield + otherSubfield: subfield2 diff --git a/hack/testdata/TPR/foo.yaml b/hack/testdata/TPR/foo.yaml new file mode 100644 index 00000000000..0a436e2d347 --- /dev/null +++ b/hack/testdata/TPR/foo.yaml @@ -0,0 +1,11 @@ +kind: Foo +apiVersion: company.com/v1 +metadata: + name: test + labels: + pruneGroup: "true" +someField: field1 +otherField: field2 +nestedField: + someSubfield: subfield1 + otherSubfield: subfield2 diff --git a/hack/testdata/TPR/multi-tpr-list-added-field.yaml b/hack/testdata/TPR/multi-tpr-list-added-field.yaml new file mode 100644 index 00000000000..ab37130ad10 --- /dev/null +++ b/hack/testdata/TPR/multi-tpr-list-added-field.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: List +items: +- kind: Foo + apiVersion: company.com/v1 + metadata: + name: test-list + labels: + pruneGroup: "true" + someField: modifiedField + newField: field3 +- kind: Bar + apiVersion: company.com/v1 + metadata: + name: test-list + labels: + pruneGroup: "true" + someField: modifiedField + newField: field3 diff --git a/hack/testdata/TPR/multi-tpr-list-deleted-field.yaml b/hack/testdata/TPR/multi-tpr-list-deleted-field.yaml new file mode 100644 index 00000000000..30c802e0cd0 --- /dev/null +++ b/hack/testdata/TPR/multi-tpr-list-deleted-field.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: List +items: +- kind: Foo + apiVersion: company.com/v1 + metadata: + name: test-list + labels: + pruneGroup: "true" + someField: modifiedField +- kind: Bar + apiVersion: company.com/v1 + metadata: + name: test-list + labels: + pruneGroup: "true" + someField: modifiedField diff --git a/hack/testdata/TPR/multi-tpr-list-updated-field.yaml b/hack/testdata/TPR/multi-tpr-list-updated-field.yaml new file mode 100644 index 00000000000..aefdd0b8230 --- /dev/null +++ b/hack/testdata/TPR/multi-tpr-list-updated-field.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: List +items: +- kind: Foo + apiVersion: company.com/v1 + metadata: + name: test-list + labels: + pruneGroup: "true" + someField: modifiedField + otherField: field2 +- kind: Bar + apiVersion: company.com/v1 + metadata: + name: test-list + labels: + pruneGroup: "true" + someField: modifiedField + otherField: field2 diff --git a/hack/testdata/TPR/multi-tpr-list.yaml b/hack/testdata/TPR/multi-tpr-list.yaml new file mode 100644 index 00000000000..5b2160835ca --- /dev/null +++ b/hack/testdata/TPR/multi-tpr-list.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: List +items: +- kind: Foo + apiVersion: company.com/v1 + metadata: + name: test-list + labels: + pruneGroup: "true" + someField: field1 + otherField: field2 +- kind: Bar + apiVersion: company.com/v1 + metadata: + name: test-list + labels: + pruneGroup: "true" + someField: field1 + otherField: field2