diff --git a/tests/metrics/network/README.md b/tests/metrics/network/README.md index c109a68411..05acd4cd67 100644 --- a/tests/metrics/network/README.md +++ b/tests/metrics/network/README.md @@ -10,6 +10,7 @@ bandwidth, jitter, latency and parallel bandwidth. ## Networking tests - `k8s-network-metrics-iperf3.sh` measures bandwidth which is the speed of the data transfer. +- `latency-network.sh` measures network latency. ## Running the tests diff --git a/tests/metrics/network/latency_kubernetes/latency-client.yaml b/tests/metrics/network/latency_kubernetes/latency-client.yaml new file mode 100644 index 0000000000..8e1f3bd0ea --- /dev/null +++ b/tests/metrics/network/latency_kubernetes/latency-client.yaml @@ -0,0 +1,17 @@ +# Copyright (c) 2022-2023 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 +# +apiVersion: v1 +kind: Pod +metadata: + name: latency-client +spec: + terminationGracePeriodSeconds: 0 + runtimeClassName: kata + containers: + - name: client-container + image: quay.io/prometheus/busybox:latest + command: + - sleep + - "180" diff --git a/tests/metrics/network/latency_kubernetes/latency-network.sh b/tests/metrics/network/latency_kubernetes/latency-network.sh new file mode 100755 index 0000000000..19c84ef14e --- /dev/null +++ b/tests/metrics/network/latency_kubernetes/latency-network.sh @@ -0,0 +1,85 @@ +#!/bin/bash +# +# Copyright (c) 2022 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 + +set -o pipefail + +SCRIPT_PATH=$(dirname "$(readlink -f "$0")") + +source "${SCRIPT_PATH}/../../lib/common.bash" +latency_file=$(mktemp latencyresults.XXXXXXXXXX) +TEST_NAME="${TEST_NAME:-latency}" + +function remove_tmp_file() { + rm -rf "${latency_file}" +} + +trap remove_tmp_file EXIT + +function main() { + init_env + cmds=("bc" "jq") + check_cmds "${cmds[@]}" + + # Check no processes are left behind + check_processes + + wait_time=20 + sleep_time=2 + + # Create server + kubectl create -f "${SCRIPT_PATH}/runtimeclass_workloads/latency-server.yaml" + + # Get the names of the server pod + export server_pod_name="latency-server" + + # Verify the server pod is working + local cmd="kubectl get pod $server_pod_name -o yaml | grep 'phase: Running'" + waitForProcess "$wait_time" "$sleep_time" "$cmd" + + # Create client + kubectl create -f "${SCRIPT_PATH}/runtimeclass_workloads/latency-client.yaml" + + # Get the names of the client pod + export client_pod_name="latency-client" + + # Verify the client pod is working + local cmd="kubectl get pod $client_pod_name -o yaml | grep 'phase: Running'" + waitForProcess "$wait_time" "$sleep_time" "$cmd" + + # Get the ip address of the server pod + export server_ip_add=$(kubectl get pod "$server_pod_name" -o jsonpath='{.status.podIP}') + + # Number of packets (sent) + local number="${number:-30}" + + local client_command="ping -c ${number} ${server_ip_add}" + + kubectl exec "$client_pod_name" -- sh -c "$client_command" > "$latency_file" + + metrics_json_init + + local latency=$(cat $latency_file | grep avg | cut -f2 -d'=' | sed 's/[[:blank:]]//g' | cut -f2 -d'/') + + metrics_json_start_array + + local json="$(cat << EOF + { + "latency": { + "Result" : $latency, + "Units" : "ms" + } + } +EOF +)" + + metrics_json_add_array_element "$json" + metrics_json_end_array "Results" + metrics_json_save + + kubectl delete pod "$client_pod_name" "$server_pod_name" + check_processes +} +main "$@" diff --git a/tests/metrics/network/latency_kubernetes/latency-server.yaml b/tests/metrics/network/latency_kubernetes/latency-server.yaml new file mode 100644 index 0000000000..ce301f6535 --- /dev/null +++ b/tests/metrics/network/latency_kubernetes/latency-server.yaml @@ -0,0 +1,18 @@ +# +# Copyright (c) 2022-2023 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 +# +apiVersion: v1 +kind: Pod +metadata: + name: latency-server +spec: + terminationGracePeriodSeconds: 0 + runtimeClassName: kata + containers: + - name: server-container + image: quay.io/prometheus/busybox:latest + command: + - sleep + - "180"