-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtest-e2e-multi-version.sh
More file actions
executable file
·173 lines (139 loc) · 4.52 KB
/
test-e2e-multi-version.sh
File metadata and controls
executable file
·173 lines (139 loc) · 4.52 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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#!/bin/bash
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
print_status() {
echo -e "${GREEN}[INFO]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
print_version() {
echo -e "${BLUE}[VERSION]${NC} $1"
}
cleanup() {
print_status "Cleaning up..."
docker compose down -v
exit $1
}
trap 'cleanup $?' EXIT
# RabbitMQ versions to test (minor versions from 3.9 to latest 4.x)
RABBITMQ_VERSIONS=(
"3.9-management"
"3.10-management"
"3.11-management"
"3.12-management"
"3.13-management"
"4.0-management"
"4.1-management"
)
print_status "Starting RunMQ Multi-Version E2E Test Suite"
if ! docker info >/dev/null 2>&1; then
print_error "Docker is not running. Please start Docker and try again."
exit 1
fi
if ! command -v docker compose &> /dev/null; then
print_error "docker compose is not installed or not in PATH."
exit 1
fi
# Track test results
FAILED_VERSIONS=()
PASSED_VERSIONS=()
# Run tests for each version
for VERSION in "${RABBITMQ_VERSIONS[@]}"; do
print_version "Testing with RabbitMQ $VERSION"
# Export version for docker-compose
export RABBITMQ_VERSION="$VERSION"
print_status "Stopping any existing test containers..."
docker compose down -v
print_status "Starting RabbitMQ container (version: $VERSION)..."
docker compose up -d rabbitmq
print_status "Waiting for RabbitMQ to be ready..."
RETRY_COUNT=0
MAX_RETRIES=30
while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
# Check if container is running
CONTAINER_STATUS=$(docker compose ps -q rabbitmq | xargs docker inspect -f '{{.State.Status}}' 2>/dev/null || echo "not_found")
print_warning "RabbitMQ container status: $CONTAINER_STATUS"
if [ "$CONTAINER_STATUS" = "exited" ] || [ "$CONTAINER_STATUS" = "" ]; then
print_warning "RabbitMQ container exited or not found. Restarting..."
docker compose up -d rabbitmq
sleep 5
fi
if docker compose exec -T rabbitmq rabbitmq-diagnostics -q ping >/dev/null 2>&1; then
print_status "RabbitMQ is ready!"
break
fi
RETRY_COUNT=$((RETRY_COUNT + 1))
print_status "Waiting for RabbitMQ... (attempt $RETRY_COUNT/$MAX_RETRIES)"
sleep 2
done
if [ $RETRY_COUNT -eq $MAX_RETRIES ]; then
print_error "RabbitMQ $VERSION failed to start within expected time"
docker compose logs rabbitmq
FAILED_VERSIONS+=("$VERSION")
continue
fi
print_status "Waiting additional 5 seconds for RabbitMQ to fully initialize..."
sleep 5
print_status "Verifying RabbitMQ connection..."
if ! nc -z localhost 5673; then
print_error "Cannot connect to RabbitMQ $VERSION on port 5673"
print_status "RabbitMQ container logs:"
docker compose logs rabbitmq
FAILED_VERSIONS+=("$VERSION")
continue
fi
print_status "RabbitMQ is accessible on port 5673"
print_status "Running unit tests..."
if ! npm run test:unit; then
print_error "Unit tests failed for RabbitMQ $VERSION"
FAILED_VERSIONS+=("$VERSION")
continue
fi
print_status "Unit tests passed!"
print_status "Running E2E tests..."
if ! npm run test:e2e; then
print_error "E2E tests failed for RabbitMQ $VERSION"
print_status "RabbitMQ container logs:"
docker compose logs rabbitmq
FAILED_VERSIONS+=("$VERSION")
continue
fi
print_status "All tests passed for RabbitMQ $VERSION!"
PASSED_VERSIONS+=("$VERSION")
# Clean up before next version
docker compose down -v
sleep 2
done
# Summary
echo
echo -e "${BLUE}====== Test Summary ======${NC}"
echo
if [ ${#PASSED_VERSIONS[@]} -gt 0 ]; then
echo -e "${GREEN}Passed versions (${#PASSED_VERSIONS[@]}):${NC}"
for VERSION in "${PASSED_VERSIONS[@]}"; do
echo -e " ✓ $VERSION"
done
fi
if [ ${#FAILED_VERSIONS[@]} -gt 0 ]; then
echo
echo -e "${RED}Failed versions (${#FAILED_VERSIONS[@]}):${NC}"
for VERSION in "${FAILED_VERSIONS[@]}"; do
echo -e " ✗ $VERSION"
done
fi
echo
echo -e "${BLUE}=========================${NC}"
# Exit with error if any version failed
if [ ${#FAILED_VERSIONS[@]} -gt 0 ]; then
print_error "Some versions failed. Please check the logs above."
exit 1
else
print_status "All versions passed successfully!"
fi