This repository has been archived by the owner on Jul 25, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 40
/
test-runner.sh
executable file
·125 lines (105 loc) · 3.77 KB
/
test-runner.sh
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
#!/bin/bash
################################################################################
# Ensure our environment variables are set
################################################################################
if [ "$PHP_VERSION" == "" ]; then
echo "You must define a \$PHP_VERSION environment variable"
exit 1
fi
if [ "$IMAGE_FLAVOUR" == "" ]; then
echo "You must define a \$IMAGE_FLAVOUR environment variable"
exit 1
fi
if [ "$DOCKER_IP" == "" ]; then
if [ "$DOCKER_MACHINE_NAME" == "dinghy" ]; then
DOCKER_IP="$(dinghy ip)"
else
DOCKER_IP="127.0.0.1"
fi
fi
################################################################################
# Set our variables
################################################################################
IMAGE_NAME="test-$PHP_VERSION-$IMAGE_FLAVOUR"
TEST_DIR="$(pwd)/test"
TEST_OK_STRING="TEST OK"
TEST_PORT="8888"
################################################################################
# Kick off with some debug
################################################################################
echo ""
echo "Test Runner Configuration:"
echo ""
echo "PHP Version: $PHP_VERSION"
echo "Image Flavour: $IMAGE_FLAVOUR"
################################################################################
# Pull published image down so we can try and reuse layers
################################################################################
echo ""
echo "Pulling published images for layer cache.."
echo ""
docker pull meanbee/magento:${PHP_VERSION}-${IMAGE_FLAVOUR}
################################################################################
# Build our images
################################################################################
echo ""
echo "Building image.."
echo ""
cd $PHP_VERSION/$IMAGE_FLAVOUR && docker build -t $IMAGE_NAME . || exit 1
cd ../..
################################################################################
# Output the PHP version running in the image
################################################################################
echo ""
echo "Image PHP Version:"
echo ""
docker run --rm -h test.host $IMAGE_NAME php --version || exit 1
################################################################################
# Run CLI tests on all images
################################################################################
echo ""
echo "Running cli tests:"
echo ""
docker run --rm -h test.host --volume $TEST_DIR:/test $IMAGE_NAME php /test/test.php | tee /tmp/test.log
grep "$TEST_OK_STRING" /tmp/test.log > /dev/null || exit 1
rm -f /tmp/test.log
################################################################################
# Run web server tests on apache image
################################################################################
if [ "$IMAGE_FLAVOUR" == "apache" ]; then
echo ""
echo "Running web server tests:"
echo ""
# Start the web server
docker run -h test.host -d --volume $TEST_DIR:/var/www/html -p $TEST_PORT:80 $IMAGE_NAME > /tmp/$IMAGE_NAME.cid || exit 1
echo ""
# Spent up to a minute trying to connect to the web server
max_attempts=12
timeout=5
attempt=0
while (( $attempt < $max_attempts ))
do
curl $DOCKER_IP:$TEST_PORT/test.php | tee /tmp/test.log
grep "$TEST_OK_STRING" /tmp/test.log > /dev/null
curl_result=$?
rm -f /tmp/test.log
# Wait for a zero exit code before stopping
if [[ $curl_result == 0 ]]
then
break
fi
echo ""
echo "Failed to connect to web server. Retrying in $timeout.."
echo ""
sleep $timeout
attempt=$(( attempt + 1 ))
done
# Stop the web server
cat /tmp/$IMAGE_NAME.cid | xargs docker rm -f && rm /tmp/$IMAGE_NAME.cid
if [ "$attempt" -eq "$max_attempts" ]; then
echo ""
echo "Reached maximum web server connnection attempts"
echo ""
exit 1
fi
fi