diff --git a/hack/test-cmd.sh b/hack/test-cmd.sh index ba94d607c9a..b3d9f58ab78 100755 --- a/hack/test-cmd.sh +++ b/hack/test-cmd.sh @@ -748,7 +748,9 @@ __EOF__ FILES="hack/testdata/multi-resource-yaml hack/testdata/multi-resource-list - hack/testdata/multi-resource-json" + hack/testdata/multi-resource-json + hack/testdata/multi-resource-rclist + hack/testdata/multi-resource-svclist" YAML=".yaml" JSON=".json" for file in $FILES; do @@ -761,40 +763,97 @@ __EOF__ replace_file="${file%.json}-modify.json" fi - ### Create, get, describe, replace, label, annotate, and then delete service nginxsvc and replication controller my-nginx from 3 types of files: + has_svc=true + has_rc=true + two_rcs=false + two_svcs=false + if [[ "${file}" == *rclist* ]]; then + has_svc=false + two_rcs=true + fi + if [[ "${file}" == *svclist* ]]; then + has_rc=false + two_svcs=true + fi + + ### Create, get, describe, replace, label, annotate, and then delete service nginxsvc and replication controller my-nginx from 5 types of files: ### 1) YAML, separated by ---; 2) JSON, with a List type; 3) JSON, with JSON object concatenation + ### 4) JSON, with a ReplicationControllerList type; 5) JSON, with a ServiceList type + echo "Testing with file ${file} and replace with file ${replace_file}" # Pre-condition: no service (other than default kubernetes services) or replication controller is running kube::test::get_object_assert services "{{range.items}}{{$id_field}}:{{end}}" 'kubernetes:' kube::test::get_object_assert rc "{{range.items}}{{$id_field}}:{{end}}" '' # Command # TODO: remove --validate=false when PR "Add validate support for list kind #14726" is merged - kubectl create -f $file --validate=false "${kube_flags[@]}" - # Post-condition: mock service is running - kube::test::get_object_assert services "{{range.items}}{{$id_field}}:{{end}}" 'kubernetes:mock:' - # Post-condition: mock rc is running - kube::test::get_object_assert rc "{{range.items}}{{$id_field}}:{{end}}" 'mock:' + kubectl create -f "${file}" --validate=false "${kube_flags[@]}" + # Post-condition: mock service (and mock2) is running + if [ "$has_svc" = true ]; then + if [ "$two_svcs" = true ]; then + kube::test::get_object_assert services "{{range.items}}{{$id_field}}:{{end}}" 'kubernetes:mock:mock2:' + else + kube::test::get_object_assert services "{{range.items}}{{$id_field}}:{{end}}" 'kubernetes:mock:' + fi + fi + # Post-condition: mock rc (and mock2) is running + if [ "$has_rc" = true ]; then + if [ "$two_rcs" = true ]; then + kube::test::get_object_assert rc "{{range.items}}{{$id_field}}:{{end}}" 'mock:mock2:' + else + kube::test::get_object_assert rc "{{range.items}}{{$id_field}}:{{end}}" 'mock:' + fi + fi # Command - # kubectl create -f $file "${kube_flags[@]}" # test fails here now - kubectl get -f $file "${kube_flags[@]}" - kubectl describe -f $file "${kube_flags[@]}" + # kubectl create -f "${file}" "${kube_flags[@]}" # test fails here now + kubectl get -f "${file}" "${kube_flags[@]}" + kubectl describe -f "${file}" "${kube_flags[@]}" # Command # TODO: remove --validate=false when PR "Add validate support for list kind #14726" is merged kubectl replace -f $replace_file --force --validate=false "${kube_flags[@]}" - # Post-condition: mock service and mock rc are replaced - kube::test::get_object_assert 'services mock' "{{${labels_field}.status}}" 'replaced' - kube::test::get_object_assert 'rc mock' "{{${labels_field}.status}}" 'replaced' + # Post-condition: mock service (and mock2) and mock rc (and mock2) are replaced + if [ "$has_svc" = true ]; then + kube::test::get_object_assert 'services mock' "{{${labels_field}.status}}" 'replaced' + if [ "$two_svcs" = true ]; then + kube::test::get_object_assert 'services mock2' "{{${labels_field}.status}}" 'replaced' + fi + fi + if [ "$has_rc" = true ]; then + kube::test::get_object_assert 'rc mock' "{{${labels_field}.status}}" 'replaced' + if [ "$two_rcs" = true ]; then + kube::test::get_object_assert 'rc mock2' "{{${labels_field}.status}}" 'replaced' + fi + fi # Command - kubectl label -f $file labeled=true "${kube_flags[@]}" - # Post-condition: mock service and mock rc are labeled - kube::test::get_object_assert 'services mock' "{{${labels_field}.labeled}}" 'true' - kube::test::get_object_assert 'rc mock' "{{${labels_field}.labeled}}" 'true' + kubectl label -f "${file}" labeled=true "${kube_flags[@]}" + # Post-condition: mock service and mock rc (and mock2) are labeled + if [ "$has_svc" = true ]; then + kube::test::get_object_assert 'services mock' "{{${labels_field}.labeled}}" 'true' + if [ "$two_svcs" = true ]; then + kube::test::get_object_assert 'services mock2' "{{${labels_field}.labeled}}" 'true' + fi + fi + if [ "$has_rc" = true ]; then + kube::test::get_object_assert 'rc mock' "{{${labels_field}.labeled}}" 'true' + if [ "$two_rcs" = true ]; then + kube::test::get_object_assert 'rc mock2' "{{${labels_field}.labeled}}" 'true' + fi + fi # Command - kubectl annotate -f $file annotated=true "${kube_flags[@]}" - # Post-condition: mock service and mock rc are annotated - kube::test::get_object_assert 'services mock' "{{${annotations_field}.annotated}}" 'true' - kube::test::get_object_assert 'rc mock' "{{${annotations_field}.annotated}}" 'true' - # Cleanup services and rc - kubectl delete -f $file "${kube_flags[@]}" + kubectl annotate -f "${file}" annotated=true "${kube_flags[@]}" + # Post-condition: mock service (and mock2) and mock rc (and mock2) are annotated + if [ "$has_svc" = true ]; then + kube::test::get_object_assert 'services mock' "{{${annotations_field}.annotated}}" 'true' + if [ "$two_svcs" = true ]; then + kube::test::get_object_assert 'services mock2' "{{${annotations_field}.annotated}}" 'true' + fi + fi + if [ "$has_rc" = true ]; then + kube::test::get_object_assert 'rc mock' "{{${annotations_field}.annotated}}" 'true' + if [ "$two_rcs" = true ]; then + kube::test::get_object_assert 'rc mock2' "{{${annotations_field}.annotated}}" 'true' + fi + fi + # Cleanup resources created + kubectl delete -f "${file}" "${kube_flags[@]}" done ###################### diff --git a/hack/testdata/multi-resource-rclist-modify.json b/hack/testdata/multi-resource-rclist-modify.json new file mode 100644 index 00000000000..b58a7424ee6 --- /dev/null +++ b/hack/testdata/multi-resource-rclist-modify.json @@ -0,0 +1,70 @@ +{ + "kind":"ReplicationControllerList", + "apiVersion":"v1", + "items":[ + { + "metadata":{ + "name":"mock", + "labels":{ + "app":"mock", + "status":"replaced" + } + }, + "spec":{ + "replicas":1, + "selector":{ + "app":"mock" + }, + "template":{ + "metadata":{ + "labels":{ + "app":"mock" + } + }, + "spec":{ + "containers":[{ + "name": "mock-container", + "image": "kubernetes/pause", + "ports":[{ + "containerPort":9949, + "protocol":"TCP" + }] + }] + } + } + } + }, + { + "metadata":{ + "name":"mock2", + "labels":{ + "app":"mock2", + "status":"replaced" + } + }, + "spec":{ + "replicas":1, + "selector":{ + "app":"mock2" + }, + "template":{ + "metadata":{ + "labels":{ + "app":"mock2" + } + }, + "spec":{ + "containers":[{ + "name": "mock-container", + "image": "kubernetes/pause", + "ports":[{ + "containerPort":9949, + "protocol":"TCP" + }] + }] + } + } + } + } + ] +} diff --git a/hack/testdata/multi-resource-rclist.json b/hack/testdata/multi-resource-rclist.json new file mode 100644 index 00000000000..b58a7424ee6 --- /dev/null +++ b/hack/testdata/multi-resource-rclist.json @@ -0,0 +1,70 @@ +{ + "kind":"ReplicationControllerList", + "apiVersion":"v1", + "items":[ + { + "metadata":{ + "name":"mock", + "labels":{ + "app":"mock", + "status":"replaced" + } + }, + "spec":{ + "replicas":1, + "selector":{ + "app":"mock" + }, + "template":{ + "metadata":{ + "labels":{ + "app":"mock" + } + }, + "spec":{ + "containers":[{ + "name": "mock-container", + "image": "kubernetes/pause", + "ports":[{ + "containerPort":9949, + "protocol":"TCP" + }] + }] + } + } + } + }, + { + "metadata":{ + "name":"mock2", + "labels":{ + "app":"mock2", + "status":"replaced" + } + }, + "spec":{ + "replicas":1, + "selector":{ + "app":"mock2" + }, + "template":{ + "metadata":{ + "labels":{ + "app":"mock2" + } + }, + "spec":{ + "containers":[{ + "name": "mock-container", + "image": "kubernetes/pause", + "ports":[{ + "containerPort":9949, + "protocol":"TCP" + }] + }] + } + } + } + } + ] +} diff --git a/hack/testdata/multi-resource-svclist-modify.json b/hack/testdata/multi-resource-svclist-modify.json new file mode 100644 index 00000000000..32c65b143cc --- /dev/null +++ b/hack/testdata/multi-resource-svclist-modify.json @@ -0,0 +1,44 @@ +{ + "kind":"ServiceList", + "apiVersion":"v1", + "items":[ + { + "metadata":{ + "name":"mock", + "labels":{ + "app":"mock", + "status":"replaced" + } + }, + "spec":{ + "ports": [{ + "protocol": "TCP", + "port": 99, + "targetPort": 9949 + }], + "selector":{ + "app":"mock" + } + } + }, + { + "metadata":{ + "name":"mock2", + "labels":{ + "app":"mock2", + "status":"replaced" + } + }, + "spec":{ + "ports": [{ + "protocol": "TCP", + "port": 99, + "targetPort": 9949 + }], + "selector":{ + "app":"mock2" + } + } + } + ] +} diff --git a/hack/testdata/multi-resource-svclist.json b/hack/testdata/multi-resource-svclist.json new file mode 100644 index 00000000000..d9e0abc9b0f --- /dev/null +++ b/hack/testdata/multi-resource-svclist.json @@ -0,0 +1,42 @@ +{ + "kind":"ServiceList", + "apiVersion":"v1", + "items":[ + { + "metadata":{ + "name":"mock", + "labels":{ + "app":"mock" + } + }, + "spec":{ + "ports": [{ + "protocol": "TCP", + "port": 99, + "targetPort": 9949 + }], + "selector":{ + "app":"mock" + } + } + }, + { + "metadata":{ + "name":"mock2", + "labels":{ + "app":"mock2" + } + }, + "spec":{ + "ports": [{ + "protocol": "TCP", + "port": 99, + "targetPort": 9949 + }], + "selector":{ + "app":"mock2" + } + } + } + ] +}