86aea653c8
Since [1] some timings seem to have changed. This caused the unit tests
to fail intermittently, from my testings especially on Ubuntu systems
(much less often on e.g. Arch).
This commit adds the `dockergen_wait_for_event` helper-function to try
and wait for the configuration to be generated by docker-gen before
continuing on with the actual tests themselves.
Additionally, at the end of every test file, all containers spun up by
the bats-tests will be stopped. This required adding the `bats-type`
label to every container started during the bats-tests.
The stopping of the containers reduces the amount of events docker-gen
has to process, thus resulting in lower wait times for the generation to
happen.
[1]: 50435652b1
78 lines
2.1 KiB
Bash
78 lines
2.1 KiB
Bash
#!/usr/bin/env bats
|
|
load test_helpers
|
|
SUT_CONTAINER=bats-nginx-proxy-${TEST_FILE}
|
|
|
|
function setup {
|
|
# make sure to stop any web container before each test so we don't
|
|
# have any unexpected contaiener running with VIRTUAL_HOST or VIRUTAL_PORT set
|
|
stop_bats_containers web
|
|
}
|
|
|
|
|
|
@test "[$TEST_FILE] start a nginx-proxy container" {
|
|
# GIVEN
|
|
run nginxproxy $SUT_CONTAINER -v /var/run/docker.sock:/tmp/docker.sock:ro
|
|
assert_success
|
|
docker_wait_for_log $SUT_CONTAINER 9 "Watching docker events"
|
|
}
|
|
|
|
|
|
@test "[$TEST_FILE] VIRTUAL_HOST=*.wildcard.bats" {
|
|
# WHEN
|
|
prepare_web_container bats-wildcard-hosts-1 80 -e VIRTUAL_HOST=*.wildcard.bats
|
|
dockergen_wait_for_event $SUT_CONTAINER start bats-wildcard-hosts-1
|
|
sleep 1
|
|
|
|
# THEN
|
|
assert_200 f00.wildcard.bats
|
|
assert_200 bar.wildcard.bats
|
|
assert_503 unexpected.host.bats
|
|
}
|
|
|
|
@test "[$TEST_FILE] VIRTUAL_HOST=wildcard.bats.*" {
|
|
# WHEN
|
|
prepare_web_container bats-wildcard-hosts-2 80 -e VIRTUAL_HOST=wildcard.bats.*
|
|
dockergen_wait_for_event $SUT_CONTAINER start bats-wildcard-hosts-2
|
|
sleep 1
|
|
|
|
# THEN
|
|
assert_200 wildcard.bats.f00
|
|
assert_200 wildcard.bats.bar
|
|
assert_503 unexpected.host.bats
|
|
}
|
|
|
|
@test "[$TEST_FILE] VIRTUAL_HOST=~^foo\.bar\..*\.bats" {
|
|
# WHEN
|
|
prepare_web_container bats-wildcard-hosts-2 80 -e VIRTUAL_HOST=~^foo\.bar\..*\.bats
|
|
dockergen_wait_for_event $SUT_CONTAINER start bats-wildcard-hosts-2
|
|
sleep 1
|
|
|
|
# THEN
|
|
assert_200 foo.bar.whatever.bats
|
|
assert_200 foo.bar.why.not.bats
|
|
assert_503 unexpected.host.bats
|
|
|
|
}
|
|
|
|
@test "[$TEST_FILE] stop all bats containers" {
|
|
stop_bats_containers
|
|
}
|
|
|
|
|
|
# assert that querying nginx-proxy with the given Host header produces a `HTTP 200` response
|
|
# $1 Host HTTP header to use when querying nginx-proxy
|
|
function assert_200 {
|
|
local -r host=$1
|
|
|
|
run curl_container $SUT_CONTAINER / --head --header "Host: $host"
|
|
assert_output -l 0 $'HTTP/1.1 200 OK\r'
|
|
}
|
|
|
|
# assert that querying nginx-proxy with the given Host header produces a `HTTP 503` response
|
|
# $1 Host HTTP header to use when querying nginx-proxy
|
|
function assert_503 {
|
|
local -r host=$1
|
|
|
|
run curl_container $SUT_CONTAINER / --head --header "Host: $host"
|
|
assert_output -l 0 $'HTTP/1.1 503 Service Temporarily Unavailable\r'
|
|
}
|