Skip to content

Commit 890ae1e

Browse files
committed
Add integration tests for custom profiling in kubectl debug
1 parent e8f4730 commit 890ae1e

File tree

2 files changed

+93
-0
lines changed

2 files changed

+93
-0
lines changed

test/cmd/debug.sh

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -567,3 +567,95 @@ run_kubectl_debug_netadmin_node_tests() {
567567
set +o nounset
568568
set +o errexit
569569
}
570+
571+
run_kubectl_debug_custom_profile_tests() {
572+
set -o nounset
573+
set -o errexit
574+
575+
create_and_use_new_namespace
576+
kube::log::status "Testing kubectl debug custom profile"
577+
578+
### Pod Troubleshooting by ephemeral containers with netadmin profile
579+
# Pre-Condition: Pod "nginx" is created
580+
kubectl run target-debug "--image=${IMAGE_NGINX:?}" "${kube_flags[@]:?}"
581+
kube::test::get_object_assert pod "{{range.items}}{{${id_field:?}}}:{{end}}" 'target-debug:'
582+
583+
cat > "${TMPDIR:-/tmp}"/custom_profile.json << EOF
584+
{
585+
"env": [
586+
{
587+
"name": "ENV_VAR1",
588+
"value": "value1"
589+
},
590+
{
591+
"name": "ENV_VAR2",
592+
"value": "value2"
593+
}
594+
]
595+
}
596+
EOF
597+
598+
cat > "${TMPDIR:-/tmp}"/custom_profile.yaml << EOF
599+
env:
600+
- name: ENV_VAR3
601+
value: value3
602+
- name: ENV_VAR4
603+
value: value4
604+
EOF
605+
606+
# Command: add a new debug container with general profile
607+
output_message=$(kubectl debug target-debug -it --image=busybox --attach=false -c debug-container --profile=general --custom="${TMPDIR:-/tmp}"/custom_profile.json "${kube_flags[@]:?}")
608+
609+
# Post-Conditions
610+
kube::test::get_object_assert pod/target-debug '{{range.spec.ephemeralContainers}}{{.name}}:{{end}}' 'debug-container:'
611+
kube::test::get_object_assert pod/target-debug '{{((index (index .spec.ephemeralContainers 0).env 0)).name}}' 'ENV_VAR1'
612+
kube::test::get_object_assert pod/target-debug '{{((index (index .spec.ephemeralContainers 0).env 0)).value}}' 'value1'
613+
kube::test::get_object_assert pod/target-debug '{{((index (index .spec.ephemeralContainers 0).env 1)).name}}' 'ENV_VAR2'
614+
kube::test::get_object_assert pod/target-debug '{{((index (index .spec.ephemeralContainers 0).env 1)).value}}' 'value2'
615+
616+
# Command: add a new debug container with general profile
617+
kubectl debug target-debug -it --image=busybox --attach=false -c debug-container-2 --profile=general --custom="${TMPDIR:-/tmp}"/custom_profile.yaml "${kube_flags[@]:?}"
618+
619+
# Post-Conditions
620+
kube::test::get_object_assert pod/target-debug '{{range.spec.ephemeralContainers}}{{.name}}:{{end}}' 'debug-container:debug-container-2:'
621+
kube::test::get_object_assert pod/target-debug '{{((index (index .spec.ephemeralContainers 1).env 0)).name}}' 'ENV_VAR3'
622+
kube::test::get_object_assert pod/target-debug '{{((index (index .spec.ephemeralContainers 1).env 0)).value}}' 'value3'
623+
kube::test::get_object_assert pod/target-debug '{{((index (index .spec.ephemeralContainers 1).env 1)).name}}' 'ENV_VAR4'
624+
kube::test::get_object_assert pod/target-debug '{{((index (index .spec.ephemeralContainers 1).env 1)).value}}' 'value4'
625+
626+
# Command: create a copy of target with a new debug container
627+
kubectl debug target-debug -it --copy-to=target-copy --image=busybox --container=debug-container-3 --attach=false --profile=general --custom="${TMPDIR:-/tmp}"/custom_profile.json "${kube_flags[@]:?}"
628+
# Post-Conditions
629+
kube::test::get_object_assert pod/target-copy '{{range.spec.containers}}{{.name}}:{{end}}' 'target-debug:debug-container-3:'
630+
kube::test::get_object_assert pod/target-copy '{{((index (index .spec.containers 1).env 0)).name}}' 'ENV_VAR1'
631+
kube::test::get_object_assert pod/target-copy '{{((index (index .spec.containers 1).env 0)).value}}' 'value1'
632+
kube::test::get_object_assert pod/target-copy '{{((index (index .spec.containers 1).env 1)).name}}' 'ENV_VAR2'
633+
kube::test::get_object_assert pod/target-copy '{{((index (index .spec.containers 1).env 1)).value}}' 'value2'
634+
635+
# Clean up
636+
kubectl delete pod target-copy "${kube_flags[@]:?}"
637+
kubectl delete pod target-debug "${kube_flags[@]:?}"
638+
639+
### Debug node with custom profile
640+
# Pre-Condition: node exists
641+
kube::test::get_object_assert nodes "{{range.items}}{{${id_field:?}}}:{{end}}" '127.0.0.1:'
642+
# Command: create a new node debugger pod
643+
output_message=$(kubectl debug --profile general node/127.0.0.1 --image=busybox --custom="${TMPDIR:-/tmp}"/custom_profile.yaml --attach=false "${kube_flags[@]:?}" -- true)
644+
# Post-Conditions
645+
kube::test::get_object_assert pod "{{(len .items)}}" '1'
646+
debugger=$(kubectl get pod -o go-template="{{(index .items 0)${id_field:?}}}")
647+
kube::test::if_has_string "${output_message:?}" "${debugger:?}"
648+
kube::test::get_object_assert "pod/${debugger:?}" "{{${image_field:?}}}" 'busybox'
649+
kube::test::get_object_assert "pod/${debugger:?}" '{{.spec.nodeName}}' '127.0.0.1'
650+
kube::test::get_object_assert "pod/${debugger:?}" '{{((index (index .spec.containers 0).env 0)).name}}' 'ENV_VAR3'
651+
kube::test::get_object_assert "pod/${debugger:?}" '{{((index (index .spec.containers 0).env 0)).value}}' 'value3'
652+
kube::test::get_object_assert "pod/${debugger:?}" '{{((index (index .spec.containers 0).env 1)).name}}' 'ENV_VAR4'
653+
kube::test::get_object_assert "pod/${debugger:?}" '{{((index (index .spec.containers 0).env 1)).value}}' 'value4'
654+
# Clean up
655+
# pod.spec.nodeName is set by kubectl debug node which causes the delete to hang,
656+
# presumably waiting for a kubelet that's not present. Force the delete.
657+
kubectl delete --force pod "${debugger:?}" "${kube_flags[@]:?}"
658+
659+
set +o nounset
660+
set +o errexit
661+
}

test/cmd/legacy-script.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1046,6 +1046,7 @@ runTests() {
10461046
record_command run_kubectl_debug_baseline_tests
10471047
record_command run_kubectl_debug_restricted_tests
10481048
record_command run_kubectl_debug_netadmin_tests
1049+
record_command run_kubectl_debug_custom_profile_tests
10491050
fi
10501051
if kube::test::if_supports_resource "${nodes}" ; then
10511052
record_command run_kubectl_debug_node_tests

0 commit comments

Comments
 (0)