-
Notifications
You must be signed in to change notification settings - Fork 228
Expand file tree
/
Copy pathpackage-tests.sh
More file actions
executable file
·145 lines (116 loc) · 4.23 KB
/
package-tests.sh
File metadata and controls
executable file
·145 lines (116 loc) · 4.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/bin/bash
# Copyright The OpenTelemetry Authors
# SPDX-License-Identifier: Apache-2.0
set -euov pipefail
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
REPO_DIR="$( cd "$SCRIPT_DIR/../../../../" && pwd )"
export REPO_DIR
PKG_PATH="${1:-}"
DISTRO="${2:-}"
SERVICE_NAME=$DISTRO
PROCESS_NAME=$DISTRO
# Global array for trap functions
TRAP_FUNCS=()
# Helper to add functions to the trap list
add_trap_func() {
TRAP_FUNCS+=("$1")
}
# Wrapper that calls each trap'ed function.
# It uses LIFO order, like Go's `defer`.
run_traps() {
if [ "${#TRAP_FUNCS[@]}" -gt 0 ]; then
for ((i = ${#TRAP_FUNCS[@]} - 1; i >= 0; i--)); do
"${TRAP_FUNCS[i]}"
done
fi
}
trap 'run_traps' EXIT
# shellcheck source=scripts/package-tests/common.sh
source "$SCRIPT_DIR"/common.sh
if [[ -z "$PKG_PATH" ]]; then
echo "usage: ${BASH_SOURCE[0]} DEB_OR_RPM_PATH" >&2
exit 1
fi
if [[ ! -f "$PKG_PATH" ]]; then
echo "$PKG_PATH not found!" >&2
exit 1
fi
pkg_base="$( basename "$PKG_PATH" )"
pkg_type="${pkg_base##*.}"
if [[ ! "$pkg_type" =~ ^(deb|rpm)$ ]]; then
echo "$PKG_PATH not supported!" >&2
exit 1
fi
image_name="otelcontribcol-$pkg_type-test"
container_name="$image_name"
container_exec="podman exec $container_name"
podman_cleanup() {
podman rm -fv "$container_name" >/dev/null 2>&1 || true
}
add_trap_func podman_cleanup
podman_logs() {
echo "Container logs:"
podman logs "$container_name" || true
}
add_trap_func podman_logs
podman build -t "$image_name" -f "$SCRIPT_DIR/Dockerfile.test.$pkg_type" "$SCRIPT_DIR"
podman rm -fv "$container_name" >/dev/null 2>&1 || true
# test install
podman run --name "$container_name" --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro -d "$image_name"
# ensure that the system is up and running by checking if systemctl is running
# TODO(MovieStoreGuy): re-enable when we have a way validate that systemd is fully running
# $container_exec systemctl is-system-running --wait --quiet
install_pkg "$container_name" "$PKG_PATH"
if [[ "$pkg_type" == "rpm" ]]; then
echo "Checking $SERVICE_NAME service state after install ..."
if $container_exec systemctl is-active "$SERVICE_NAME"; then
echo "$SERVICE_NAME service running after rpm install" >&2
exit 1
fi
echo "$SERVICE_NAME service correctly not running after rpm install"
if $container_exec systemctl is-enabled "$SERVICE_NAME"; then
echo "$SERVICE_NAME service enabled after rpm install" >&2
exit 1
fi
echo "$SERVICE_NAME service correctly not enabled after rpm install"
$container_exec systemctl start "$SERVICE_NAME"
fi
# If we got to this point, we might need to check the logs of the systemd service
# when it's not properly active. This is added as a trap because the check
# for service status below will return an error exitcode if the service is
# not active, triggering the end of this script because of the shell option `-e`
journalctl_logs() {
$container_exec journalctl -u "$SERVICE_NAME" || true
}
add_trap_func journalctl_logs
# ensure service has started and still running after 5 seconds
sleep 5
echo "Checking $SERVICE_NAME service status ..."
$container_exec systemctl --no-pager status "$SERVICE_NAME"
echo "Checking $PROCESS_NAME process ..."
if [ "$DISTRO" = "otelcol" ]; then
$container_exec pgrep -a -u otel "$PROCESS_NAME"
else
$container_exec pgrep -a -u otelcol-contrib "$PROCESS_NAME"
fi
# test uninstall
echo
uninstall_pkg "$container_name" "$pkg_type" "$DISTRO"
echo "Checking $SERVICE_NAME service status after uninstall ..."
if $container_exec systemctl --no-pager status "$SERVICE_NAME"; then
echo "$SERVICE_NAME service still running after uninstall" >&2
exit 1
fi
echo "$SERVICE_NAME service successfully stopped after uninstall"
echo "Checking $SERVICE_NAME service existence after uninstall ..."
if $container_exec systemctl list-unit-files --all | grep "$SERVICE_NAME"; then
echo "$SERVICE_NAME service still exists after uninstall" >&2
exit 1
fi
echo "$SERVICE_NAME service successfully removed after uninstall"
echo "Checking $PROCESS_NAME process after uninstall ..."
if $container_exec pgrep "$PROCESS_NAME"; then
echo "$PROCESS_NAME process still running after uninstall"
exit 1
fi
echo "$PROCESS_NAME process successfully killed after uninstall"