From ffb5791a4fa8ef1fadbfc85fa9dea07f008419f3 Mon Sep 17 00:00:00 2001
From: "Austin S. Hemmelgarn" <austin@netdata.cloud>
Date: Wed, 17 Jan 2024 08:24:22 -0500
Subject: [PATCH] CI runtime check cleanup (#16713)

* Centralize runtime check code used throughout CI.

* Add checks to confirm that each of the agent dashboards can be fetched.
---
 .github/scripts/docker-test.sh                | 50 +++----------------
 .github/scripts/pkg-test.sh                   | 41 ++-------------
 .../makeself/jobs/90-netdata-runtime-check.sh | 39 +--------------
 packaging/runtime-check.sh                    | 50 +++++++++++++++++++
 4 files changed, 62 insertions(+), 118 deletions(-)
 create mode 100755 packaging/runtime-check.sh

diff --git a/.github/scripts/docker-test.sh b/.github/scripts/docker-test.sh
index 0f5fa469cf..0ef0645010 100755
--- a/.github/scripts/docker-test.sh
+++ b/.github/scripts/docker-test.sh
@@ -1,42 +1,9 @@
 #!/bin/sh
 
+SCRIPT_DIR="$(CDPATH='' cd -- "$(dirname -- "$0")" && pwd -P)"
+
 export DEBIAN_FRONTEND=noninteractive
 
-wait_for() {
-  host="${1}"
-  port="${2}"
-  name="${3}"
-  timeout="30"
-
-  if command -v nc > /dev/null ; then
-    netcat="nc"
-  elif command -v netcat > /dev/null ; then
-    netcat="netcat"
-  else
-    printf "Unable to find a usable netcat command.\n"
-    return 1
-  fi
-
-  printf "Waiting for %s on %s:%s ... " "${name}" "${host}" "${port}"
-
-  sleep 30
-
-  i=0
-  while ! ${netcat} -z "${host}" "${port}"; do
-    sleep 1
-    if [ "$i" -gt "$timeout" ]; then
-      printf "Timed out!\n"
-      docker ps -a
-      echo "::group::Netdata container logs"
-      docker logs netdata 2>&1
-      echo "::endgroup::"
-      return 1
-    fi
-    i="$((i + 1))"
-  done
-  printf "OK\n"
-}
-
 if [ -z "$(command -v nc 2>/dev/null)" ] && [ -z "$(command -v netcat 2>/dev/null)" ]; then
     sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get install -y netcat
 fi
@@ -55,10 +22,9 @@ docker run -d --name=netdata \
            --security-opt apparmor=unconfined \
            netdata/netdata:test
 
-wait_for localhost 19999 netdata || exit 1
-
-curl -sS http://127.0.0.1:19999/api/v1/info > ./response || exit 1
-
-cat ./response
-
-jq '.version' ./response || exit 1
+if ! "${SCRIPT_DIR}/../../packaging/runtime-check.sh"; then
+  docker ps -a
+  echo "::group::Netdata container logs"
+  docker logs netdata 2>&1
+  echo "::endgroup::"
+fi
diff --git a/.github/scripts/pkg-test.sh b/.github/scripts/pkg-test.sh
index 35767bf2ef..6120d3fc3f 100755
--- a/.github/scripts/pkg-test.sh
+++ b/.github/scripts/pkg-test.sh
@@ -1,5 +1,7 @@
 #!/bin/sh
 
+SCRIPT_DIR="$(CDPATH='' cd -- "$(dirname -- "$0")" && pwd -P)"
+
 install_debian_like() {
   # This is needed to ensure package installs don't prompt for any user input.
   export DEBIAN_FRONTEND=noninteractive
@@ -94,37 +96,6 @@ dump_log() {
   cat ./netdata.log
 }
 
-wait_for() {
-  host="${1}"
-  port="${2}"
-  name="${3}"
-  timeout="30"
-
-  if command -v nc > /dev/null ; then
-    netcat="nc"
-  elif command -v netcat > /dev/null ; then
-    netcat="netcat"
-  else
-    printf "Unable to find a usable netcat command.\n"
-    return 1
-  fi
-
-  printf "Waiting for %s on %s:%s ... " "${name}" "${host}" "${port}"
-
-  sleep 30
-
-  i=0
-  while ! ${netcat} -z "${host}" "${port}"; do
-    sleep 1
-    if [ "$i" -gt "$timeout" ]; then
-      printf "Timed out!\n"
-      return 1
-    fi
-    i="$((i + 1))"
-  done
-  printf "OK\n"
-}
-
 case "${DISTRO}" in
   debian | ubuntu)
     install_debian_like
@@ -151,12 +122,6 @@ trap dump_log EXIT
 
 /usr/sbin/netdata -D > ./netdata.log 2>&1 &
 
-wait_for localhost 19999 netdata || exit 1
-
-curl -sS http://127.0.0.1:19999/api/v1/info > ./response || exit 1
-
-cat ./response
-
-jq '.version' ./response || exit 1
+"${SCRIPT_DIR}/../../packaging/runtime-check.sh" || exit 1
 
 trap - EXIT
diff --git a/packaging/makeself/jobs/90-netdata-runtime-check.sh b/packaging/makeself/jobs/90-netdata-runtime-check.sh
index a3c94ffcb7..fc1b239b37 100755
--- a/packaging/makeself/jobs/90-netdata-runtime-check.sh
+++ b/packaging/makeself/jobs/90-netdata-runtime-check.sh
@@ -8,47 +8,10 @@ dump_log() {
   cat ./netdata.log
 }
 
-wait_for() {
-  host="${1}"
-  port="${2}"
-  name="${3}"
-  timeout="30"
-
-  if command -v nc > /dev/null ; then
-    netcat="nc"
-  elif command -v netcat > /dev/null ; then
-    netcat="netcat"
-  else
-    printf "Unable to find a usable netcat command.\n"
-    return 1
-  fi
-
-  printf "Waiting for %s on %s:%s ... " "${name}" "${host}" "${port}"
-
-  sleep 30
-
-  i=0
-  while ! ${netcat} -z "${host}" "${port}"; do
-    sleep 1
-    if [ "$i" -gt "$timeout" ]; then
-      printf "Timed out!\n"
-      return 1
-    fi
-    i="$((i + 1))"
-  done
-  printf "OK\n"
-}
-
 trap dump_log EXIT
 
 "${NETDATA_INSTALL_PATH}/bin/netdata" -D > ./netdata.log 2>&1 &
 
-wait_for localhost 19999 netdata || exit 1
-
-curl -sS http://127.0.0.1:19999/api/v1/info > ./response || exit 1
-
-cat ./response
-
-jq '.version' ./response || exit 1
+"${NETDATA_SOURCE_PATH}/packaging/runtime-check.sh" || exit 1
 
 trap - EXIT
diff --git a/packaging/runtime-check.sh b/packaging/runtime-check.sh
new file mode 100755
index 0000000000..de6e220719
--- /dev/null
+++ b/packaging/runtime-check.sh
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+wait_for() {
+  host="${1}"
+  port="${2}"
+  name="${3}"
+  timeout="30"
+
+  if command -v nc > /dev/null ; then
+    netcat="nc"
+  elif command -v netcat > /dev/null ; then
+    netcat="netcat"
+  else
+    printf "Unable to find a usable netcat command.\n"
+    return 1
+  fi
+
+  printf "Waiting for %s on %s:%s ... " "${name}" "${host}" "${port}"
+
+  sleep 30
+
+  i=0
+  while ! ${netcat} -z "${host}" "${port}"; do
+    sleep 1
+    if [ "$i" -gt "$timeout" ]; then
+      printf "Timed out!\n"
+      return 2
+    fi
+    i="$((i + 1))"
+  done
+  printf "OK\n"
+}
+
+wait_for localhost 19999 netdata
+
+case $? in
+    1) exit 2 ;;
+    2) exit 3 ;;
+esac
+
+curl -sfS http://127.0.0.1:19999/api/v1/info > ./response || exit 1
+
+cat ./response
+
+jq '.version' ./response || exit 1
+
+curl -sfS http://127.0.0.1:19999/index.html || exit 1
+curl -sfS http://127.0.0.1:19999/v0/index.html || exit 1
+curl -sfS http://127.0.0.1:19999/v1/index.html || exit 1
+curl -sfS http://127.0.0.1:19999/v2/index.html || exit 1