-
Notifications
You must be signed in to change notification settings - Fork 133
/
Copy pathtest.sh
171 lines (144 loc) · 4.88 KB
/
test.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
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
#!/usr/bin/env bats
CONTAINER_NAME=bitnami-mariadb-test
IMAGE_NAME=bitnami/mariadb
SLEEP_TIME=5
MARIADB_DATABASE=test_database
MARIADB_USER=test_user
MARIADB_PASSWORD=test_password
VOL_PREFIX=/bitnami/mariadb
HOST_VOL_PREFIX=/tmp/bitnami/$CONTAINER_NAME
cleanup_running_containers() {
if [ "$(docker ps -a | grep $CONTAINER_NAME)" ]; then
docker rm -fv $CONTAINER_NAME
fi
}
setup() {
cleanup_running_containers
mkdir -p $HOST_VOL_PREFIX
}
teardown() {
cleanup_running_containers
}
cleanup_volumes_content() {
docker run --rm\
-v $HOST_VOL_PREFIX/data:$VOL_PREFIX/data\
-v $HOST_VOL_PREFIX/conf:$VOL_PREFIX/conf\
-v $HOST_VOL_PREFIX/logs:$VOL_PREFIX/logs\
$IMAGE_NAME rm -rf $VOL_PREFIX/data/ $VOL_PREFIX/logs/ $VOL_PREFIX/conf/
}
create_basic_container(){
docker run -d --name $CONTAINER_NAME $IMAGE_NAME; sleep $SLEEP_TIME
}
# $1 is the command
mysql_client(){
docker run --rm --link $CONTAINER_NAME:$CONTAINER_NAME $IMAGE_NAME mysql -h $CONTAINER_NAME "$@"
}
create_full_container(){
docker run -d --name $CONTAINER_NAME\
-e MARIADB_USER=$MARIADB_USER\
-e MARIADB_DATABASE=$MARIADB_DATABASE\
-e MARIADB_PASSWORD=$MARIADB_PASSWORD $IMAGE_NAME
sleep $SLEEP_TIME
}
create_full_container_mounted(){
docker run -d --name $CONTAINER_NAME\
-e MARIADB_USER=$MARIADB_USER\
-e MARIADB_DATABASE=$MARIADB_DATABASE\
-e MARIADB_PASSWORD=$MARIADB_PASSWORD\
-v $HOST_VOL_PREFIX/data:$VOL_PREFIX/data\
-v $HOST_VOL_PREFIX/conf:$VOL_PREFIX/conf\
-v $HOST_VOL_PREFIX/logs:$VOL_PREFIX/logs\
$IMAGE_NAME
sleep $SLEEP_TIME
}
@test "Root user created without password" {
create_basic_container
run mysql_client -e "select User from mysql.user where User=\"root\"\G"
[[ "$output" =~ "User: root" ]]
}
@test "Root user created with password" {
docker run -d --name $CONTAINER_NAME -e MARIADB_PASSWORD=$MARIADB_PASSWORD $IMAGE_NAME
sleep $SLEEP_TIME
# Can not login as root
run mysql_client -e 'show databases\G'
[ $status = 1 ]
run mysql_client -p$MARIADB_PASSWORD -e 'show databases\G'
[ $status = 0 ]
}
@test "Root user has access to admin database" {
create_basic_container
run mysql_client -e 'show databases\G'
[[ "$output" =~ 'Database: mysql' ]]
}
@test "Custom database created" {
docker run -d --name $CONTAINER_NAME -e MARIADB_DATABASE=$MARIADB_DATABASE $IMAGE_NAME
sleep $SLEEP_TIME
run mysql_client -e 'show databases\G'
[[ "$output" =~ "Database: $MARIADB_DATABASE" ]]
}
@test "Can't create a custom user without database" {
run docker run --name $CONTAINER_NAME -e MARIADB_USER=$MARIADB_USER $IMAGE_NAME
[[ "$output" =~ "you need to provide the MARIADB_DATABASE" ]]
[ $status = 255 ]
}
@test "Create custom user and database without password" {
docker run -d --name $CONTAINER_NAME\
-e MARIADB_USER=$MARIADB_USER\
-e MARIADB_DATABASE=$MARIADB_DATABASE $IMAGE_NAME
sleep $SLEEP_TIME
# Can not login as root
run mysql_client -e 'show databases\G'
[ $status = 1 ]
run mysql_client -u $MARIADB_USER -e 'show databases\G'
[[ "$output" =~ "Database: $MARIADB_DATABASE" ]]
}
@test "Create custom user and database with password" {
create_full_container
# Can not login as root
run mysql_client -u $MARIADB_USER -e 'show databases\G'
[ $status = 1 ]
run mysql_client -u $MARIADB_USER -p$MARIADB_PASSWORD -e 'show databases\G'
[ $status = 0 ]
}
@test "User and password settings are preserved after restart" {
create_full_container
docker stop $CONTAINER_NAME
docker start $CONTAINER_NAME
sleep $SLEEP_TIME
run docker logs $CONTAINER_NAME
[[ "$output" =~ "The credentials were set on first boot." ]]
run mysql_client -u $MARIADB_USER -p$MARIADB_PASSWORD -e 'show databases\G'
[ $status = 0 ]
}
@test "If host mounted, password and settings are preserved after deletion" {
cleanup_volumes_content
create_full_container_mounted
docker rm -fv $CONTAINER_NAME
docker run -d --name $CONTAINER_NAME\
-v $HOST_VOL_PREFIX/data:$VOL_PREFIX/data\
-v $HOST_VOL_PREFIX/conf:$VOL_PREFIX/conf\
$IMAGE_NAME
sleep $SLEEP_TIME
run mysql_client -u $MARIADB_USER -p$MARIADB_PASSWORD -e 'show databases\G'
[ $status = 0 ]
cleanup_volumes_content
}
@test "Port 3306 exposed and accepting external connections" {
create_basic_container
run docker run --rm --name 'linked' --link $CONTAINER_NAME:$CONTAINER_NAME $IMAGE_NAME\
mysql -h $CONTAINER_NAME -P 3306 -e 'show databases\G'
[ $status = 0 ]
}
@test "All the volumes exposed" {
create_basic_container
run docker inspect $CONTAINER_NAME
[[ "$output" =~ "$VOL_PREFIX/data" ]]
[[ "$output" =~ "$VOL_PREFIX/conf" ]]
[[ "$output" =~ "$VOL_PREFIX/logs" ]]
}
@test "Data gets generated in conf and data if bind mounted in the host" {
create_full_container_mounted
run docker run -v $HOST_VOL_PREFIX:$HOST_VOL_PREFIX --rm bitnami/mariadb ls -l $HOST_VOL_PREFIX/conf/my.cnf $HOST_VOL_PREFIX/logs/mysqld.log
[ $status = 0 ]
cleanup_volumes_content
}