create.sh 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. #!/usr/bin/env bash
  2. # Copyright 2018 The Kubernetes Authors.
  3. #
  4. # Licensed under the Apache License, Version 2.0 (the "License");
  5. # you may not use this file except in compliance with the License.
  6. # You may obtain a copy of the License at
  7. #
  8. # http://www.apache.org/licenses/LICENSE-2.0
  9. #
  10. # Unless required by applicable law or agreed to in writing, software
  11. # distributed under the License is distributed on an "AS IS" BASIS,
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. # See the License for the specific language governing permissions and
  14. # limitations under the License.
  15. set -o errexit
  16. set -o nounset
  17. set -o pipefail
  18. # Runs tests related to kubectl create --dry-run.
  19. run_kubectl_create_dry_run_tests() {
  20. set -o nounset
  21. set -o errexit
  22. create_and_use_new_namespace
  23. kube::log::status "Testing kubectl create dry-run"
  24. # Pre-Condition: no POD exists
  25. kube::test::get_object_assert pods "{{range.items}}{{${id_field:?}}}:{{end}}" ''
  26. # dry-run create
  27. kubectl create --dry-run=client -f hack/testdata/pod.yaml "${kube_flags[@]:?}"
  28. kubectl create --dry-run=server -f hack/testdata/pod.yaml "${kube_flags[@]:?}"
  29. # check no POD exists
  30. kube::test::get_object_assert pods "{{range.items}}{{${id_field:?}}}:{{end}}" ''
  31. set +o nounset
  32. set +o errexit
  33. }
  34. # Runs tests related to kubectl create --filename(-f) --selector(-l).
  35. run_kubectl_create_filter_tests() {
  36. set -o nounset
  37. set -o errexit
  38. create_and_use_new_namespace
  39. kube::log::status "Testing kubectl create filter"
  40. ## kubectl create -f with label selector should only create matching objects
  41. # Pre-Condition: no POD exists
  42. kube::test::get_object_assert pods "{{range.items}}{{${id_field:?}}}:{{end}}" ''
  43. # create
  44. kubectl create -l unique-label=bingbang -f hack/testdata/filter "${kube_flags[@]:?}"
  45. # check right pod exists
  46. kube::test::get_object_assert 'pods selector-test-pod' "{{${labels_field:?}.name}}" 'selector-test-pod'
  47. # check wrong pod doesn't exist
  48. output_message=$(! kubectl get pods selector-test-pod-dont-apply 2>&1 "${kube_flags[@]}")
  49. kube::test::if_has_string "${output_message}" 'pods "selector-test-pod-dont-apply" not found'
  50. # cleanup
  51. kubectl delete pods selector-test-pod
  52. set +o nounset
  53. set +o errexit
  54. }
  55. run_kubectl_create_error_tests() {
  56. set -o nounset
  57. set -o errexit
  58. create_and_use_new_namespace
  59. kube::log::status "Testing kubectl create with error"
  60. # Passing no arguments to create is an error
  61. ! kubectl create || exit 1
  62. ## kubectl create should not panic on empty string lists in a template
  63. ERROR_FILE="${KUBE_TEMP}/validation-error"
  64. kubectl create -f hack/testdata/invalid-rc-with-empty-args.yaml "${kube_flags[@]}" 2> "${ERROR_FILE}" || true
  65. # Post-condition: should get an error reporting the empty string
  66. if grep -q "unknown object type \"nil\" in ReplicationController" "${ERROR_FILE}"; then
  67. kube::log::status "\"kubectl create with empty string list returns error as expected: $(cat "${ERROR_FILE}")"
  68. else
  69. kube::log::status "\"kubectl create with empty string list returns unexpected error or non-error: $(cat "${ERROR_FILE}")"
  70. exit 1
  71. fi
  72. rm "${ERROR_FILE}"
  73. # Posting a pod to namespaces should fail. Also tests --raw forcing the post location
  74. grep -q "cannot be handled as a Namespace: converting (v1.Pod)" <<< "$( kubectl convert -f test/fixtures/doc-yaml/admin/limitrange/valid-pod.yaml -o json | kubectl create "${kube_flags[@]}" --raw /api/v1/namespaces -f - --v=8 2>&1 )"
  75. grep -q "raw and --edit are mutually exclusive" <<< "$( kubectl create "${kube_flags[@]}" --raw /api/v1/namespaces -f test/fixtures/doc-yaml/admin/limitrange/valid-pod.yaml --edit 2>&1 )"
  76. set +o nounset
  77. set +o errexit
  78. }
  79. # Runs kubectl create job tests
  80. run_create_job_tests() {
  81. set -o nounset
  82. set -o errexit
  83. create_and_use_new_namespace
  84. # Test kubectl create job
  85. kubectl create job test-job --image=k8s.gcr.io/nginx:test-cmd
  86. # Post-Condition: job nginx is created
  87. kube::test::get_object_assert 'job test-job' "{{${image_field0:?}}}" 'k8s.gcr.io/nginx:test-cmd'
  88. # Clean up
  89. kubectl delete job test-job "${kube_flags[@]}"
  90. # Test kubectl create job with command
  91. kubectl create job test-job-pi "--image=$IMAGE_PERL" -- perl -Mbignum=bpi -wle 'print bpi(20)'
  92. kube::test::get_object_assert 'job test-job-pi' "{{$image_field0}}" "$IMAGE_PERL"
  93. # Clean up
  94. kubectl delete job test-job-pi
  95. # Test kubectl create job from cronjob
  96. # Pre-Condition: create a cronjob
  97. kubectl create cronjob test-pi --schedule="* */5 * * *" "--image=$IMAGE_PERL" -- perl -Mbignum=bpi -wle 'print bpi(10)'
  98. kubectl create job my-pi --from=cronjob/test-pi
  99. # Post-condition: container args contain expected command
  100. output_message=$(kubectl get job my-pi -o go-template='{{(index .spec.template.spec.containers 0).command}}' "${kube_flags[@]}")
  101. kube::test::if_has_string "${output_message}" "perl -Mbignum=bpi -wle print bpi(10)"
  102. # Clean up
  103. kubectl delete job my-pi
  104. kubectl delete cronjob test-pi
  105. set +o nounset
  106. set +o errexit
  107. }
  108. run_kubectl_create_kustomization_directory_tests() {
  109. set -o nounset
  110. set -o errexit
  111. ## kubectl create -k <dir> for kustomization directory
  112. # Pre-condition: no ConfigMap, Deployment, Service exist
  113. kube::test::get_object_assert configmaps "{{range.items}}{{$id_field}}:{{end}}" ''
  114. kube::test::get_object_assert deployment "{{range.items}}{{$id_field}}:{{end}}" ''
  115. kube::test::get_object_assert services "{{range.items}}{{$id_field}}:{{end}}" ''
  116. # Command
  117. kubectl create -k hack/testdata/kustomize
  118. # Post-condition: test-the-map, test-the-deployment, test-the-service exist
  119. # Check that all items in the list are printed
  120. kube::test::get_object_assert 'configmap test-the-map' "{{${id_field}}}" 'test-the-map'
  121. kube::test::get_object_assert 'deployment test-the-deployment' "{{${id_field}}}" 'test-the-deployment'
  122. kube::test::get_object_assert 'service test-the-service' "{{${id_field}}}" 'test-the-service'
  123. # cleanup
  124. kubectl delete -k hack/testdata/kustomize
  125. set +o nounset
  126. set +o errexit
  127. }