Merge branch 'master' of https://github.com/jwilder/nginx-proxy
This commit is contained in:
commit
f294582ae8
11 changed files with 121 additions and 37 deletions
22
.travis.yml
Normal file
22
.travis.yml
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
sudo: required
|
||||||
|
services:
|
||||||
|
- docker
|
||||||
|
|
||||||
|
env:
|
||||||
|
global:
|
||||||
|
- DOCKER_VERSION=1.10.1-0~trusty
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
# list docker-engine versions
|
||||||
|
- apt-cache madison docker-engine
|
||||||
|
# upgrade docker-engine to specific version
|
||||||
|
- sudo apt-get -o Dpkg::Options::="--force-confnew" install -y docker-engine=${DOCKER_VERSION}
|
||||||
|
- docker version
|
||||||
|
- docker info
|
||||||
|
- sudo add-apt-repository ppa:duggan/bats --yes
|
||||||
|
- sudo apt-get update -qq
|
||||||
|
- sudo apt-get install -qq bats
|
||||||
|
- make update-dependencies
|
||||||
|
|
||||||
|
script:
|
||||||
|
- make test
|
|
@ -1,4 +1,4 @@
|
||||||
FROM nginx:1.9.9
|
FROM nginx:1.9.12
|
||||||
MAINTAINER Jason Wilder mail@jasonwilder.com
|
MAINTAINER Jason Wilder mail@jasonwilder.com
|
||||||
|
|
||||||
# Install wget and install/updates certificates
|
# Install wget and install/updates certificates
|
||||||
|
@ -14,10 +14,10 @@ RUN echo "daemon off;" >> /etc/nginx/nginx.conf \
|
||||||
&& sed -i 's/^http {/&\n server_names_hash_bucket_size 128;/g' /etc/nginx/nginx.conf
|
&& sed -i 's/^http {/&\n server_names_hash_bucket_size 128;/g' /etc/nginx/nginx.conf
|
||||||
|
|
||||||
# Install Forego
|
# Install Forego
|
||||||
RUN wget -P /usr/local/bin https://godist.herokuapp.com/projects/ddollar/forego/releases/current/linux-amd64/forego \
|
ADD https://github.com/jwilder/forego/releases/download/v0.16.1/forego /usr/local/bin/forego
|
||||||
&& chmod u+x /usr/local/bin/forego
|
RUN chmod u+x /usr/local/bin/forego
|
||||||
|
|
||||||
ENV DOCKER_GEN_VERSION 0.4.2
|
ENV DOCKER_GEN_VERSION 0.7.0
|
||||||
|
|
||||||
RUN wget https://github.com/jwilder/docker-gen/releases/download/$DOCKER_GEN_VERSION/docker-gen-linux-amd64-$DOCKER_GEN_VERSION.tar.gz \
|
RUN wget https://github.com/jwilder/docker-gen/releases/download/$DOCKER_GEN_VERSION/docker-gen-linux-amd64-$DOCKER_GEN_VERSION.tar.gz \
|
||||||
&& tar -C /usr/local/bin -xvzf docker-gen-linux-amd64-$DOCKER_GEN_VERSION.tar.gz \
|
&& tar -C /usr/local/bin -xvzf docker-gen-linux-amd64-$DOCKER_GEN_VERSION.tar.gz \
|
||||||
|
|
4
Makefile
4
Makefile
|
@ -2,8 +2,8 @@
|
||||||
.PHONY : test
|
.PHONY : test
|
||||||
|
|
||||||
update-dependencies:
|
update-dependencies:
|
||||||
docker pull jwilder/docker-gen:latest
|
docker pull jwilder/docker-gen:0.7.0
|
||||||
docker pull nginx:latest
|
docker pull nginx:1.9.12
|
||||||
docker pull python:3
|
docker pull python:3
|
||||||
docker pull rancher/socat-docker:latest
|
docker pull rancher/socat-docker:latest
|
||||||
docker pull appropriate/curl:latest
|
docker pull appropriate/curl:latest
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
![nginx 1.9.6](https://img.shields.io/badge/nginx-1.9.6-brightgreen.svg) ![License MIT](https://img.shields.io/badge/license-MIT-blue.svg) [![Build](https://circleci.com/gh/jwilder/nginx-proxy.svg?&style=shield&circle-token=2da3ee844076a47371bd45da81cf27409ca7306a)](https://circleci.com/gh/jwilder/nginx-proxy)
|
![nginx 1.9.12](https://img.shields.io/badge/nginx-1.9.12-brightgreen.svg) ![License MIT](https://img.shields.io/badge/license-MIT-blue.svg) [![Build](https://circleci.com/gh/jwilder/nginx-proxy.svg?&style=shield&circle-token=2da3ee844076a47371bd45da81cf27409ca7306a)](https://circleci.com/gh/jwilder/nginx-proxy) [![Build Status](https://travis-ci.org/jwilder/nginx-proxy.svg?branch=master)](https://travis-ci.org/jwilder/nginx-proxy)
|
||||||
|
|
||||||
nginx-proxy sets up a container running nginx and [docker-gen][1]. docker-gen generates reverse proxy configs for nginx and reloads nginx when containers are started and stopped.
|
nginx-proxy sets up a container running nginx and [docker-gen][1]. docker-gen generates reverse proxy configs for nginx and reloads nginx when containers are started and stopped.
|
||||||
|
|
||||||
|
@ -236,4 +236,3 @@ Before submitting pull requests or issues, please check github to make sure an e
|
||||||
To run tests, you'll need to install [bats 0.4.0](https://github.com/sstephenson/bats).
|
To run tests, you'll need to install [bats 0.4.0](https://github.com/sstephenson/bats).
|
||||||
|
|
||||||
make test
|
make test
|
||||||
|
|
||||||
|
|
|
@ -4,10 +4,7 @@ load test_helpers
|
||||||
function setup {
|
function setup {
|
||||||
# make sure to stop any web container before each test so we don't
|
# 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
|
# have any unexpected contaiener running with VIRTUAL_HOST or VIRUTAL_PORT set
|
||||||
CIDS=( $(docker ps -q --filter "label=bats-type=web") )
|
stop_bats_containers web
|
||||||
if [ ${#CIDS[@]} -gt 0 ]; then
|
|
||||||
docker stop ${CIDS[@]} >&2
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -20,7 +17,7 @@ function setup {
|
||||||
# WHEN nginx-proxy runs with DEFAULT_HOST set to web.bats
|
# WHEN nginx-proxy runs with DEFAULT_HOST set to web.bats
|
||||||
run nginxproxy $SUT_CONTAINER -v /var/run/docker.sock:/tmp/docker.sock:ro -e DEFAULT_HOST=web.bats
|
run nginxproxy $SUT_CONTAINER -v /var/run/docker.sock:/tmp/docker.sock:ro -e DEFAULT_HOST=web.bats
|
||||||
assert_success
|
assert_success
|
||||||
docker_wait_for_log $SUT_CONTAINER 3 "Watching docker events"
|
docker_wait_for_log $SUT_CONTAINER 9 "Watching docker events"
|
||||||
|
|
||||||
# THEN querying the proxy without Host header → 200
|
# THEN querying the proxy without Host header → 200
|
||||||
run curl_container $SUT_CONTAINER / --head
|
run curl_container $SUT_CONTAINER / --head
|
||||||
|
@ -30,3 +27,7 @@ function setup {
|
||||||
run curl_container $SUT_CONTAINER / --head --header "Host: something.I.just.made.up"
|
run curl_container $SUT_CONTAINER / --head --header "Host: something.I.just.made.up"
|
||||||
assert_output -l 0 $'HTTP/1.1 200 OK\r'
|
assert_output -l 0 $'HTTP/1.1 200 OK\r'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test "[$TEST_FILE] stop all bats containers" {
|
||||||
|
stop_bats_containers
|
||||||
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@ load test_helpers
|
||||||
# WHEN nginx-proxy runs on our docker host using the default unix socket
|
# WHEN nginx-proxy runs on our docker host using the default unix socket
|
||||||
run nginxproxy $SUT_CONTAINER -v /var/run/docker.sock:/tmp/docker.sock:ro
|
run nginxproxy $SUT_CONTAINER -v /var/run/docker.sock:/tmp/docker.sock:ro
|
||||||
assert_success
|
assert_success
|
||||||
docker_wait_for_log $SUT_CONTAINER 3 "Watching docker events"
|
docker_wait_for_log $SUT_CONTAINER 9 "Watching docker events"
|
||||||
|
|
||||||
# THEN
|
# THEN
|
||||||
assert_nginxproxy_behaves $SUT_CONTAINER
|
assert_nginxproxy_behaves $SUT_CONTAINER
|
||||||
|
@ -27,7 +27,7 @@ load test_helpers
|
||||||
# WHEN nginx-proxy runs on our docker host using a custom unix socket
|
# WHEN nginx-proxy runs on our docker host using a custom unix socket
|
||||||
run nginxproxy $SUT_CONTAINER -v /var/run/docker.sock:/f00.sock:ro -e DOCKER_HOST=unix:///f00.sock
|
run nginxproxy $SUT_CONTAINER -v /var/run/docker.sock:/f00.sock:ro -e DOCKER_HOST=unix:///f00.sock
|
||||||
assert_success
|
assert_success
|
||||||
docker_wait_for_log $SUT_CONTAINER 3 "Watching docker events"
|
docker_wait_for_log $SUT_CONTAINER 9 "Watching docker events"
|
||||||
|
|
||||||
# THEN
|
# THEN
|
||||||
assert_nginxproxy_behaves $SUT_CONTAINER
|
assert_nginxproxy_behaves $SUT_CONTAINER
|
||||||
|
@ -44,7 +44,7 @@ load test_helpers
|
||||||
# WHEN nginx-proxy runs on our docker host using tcp to connect to our docker host
|
# WHEN nginx-proxy runs on our docker host using tcp to connect to our docker host
|
||||||
run nginxproxy $SUT_CONTAINER -e DOCKER_HOST="tcp://bats-docker-tcp:2375" --link bats-docker-tcp:bats-docker-tcp
|
run nginxproxy $SUT_CONTAINER -e DOCKER_HOST="tcp://bats-docker-tcp:2375" --link bats-docker-tcp:bats-docker-tcp
|
||||||
assert_success
|
assert_success
|
||||||
docker_wait_for_log $SUT_CONTAINER 3 "Watching docker events"
|
docker_wait_for_log $SUT_CONTAINER 9 "Watching docker events"
|
||||||
|
|
||||||
# THEN
|
# THEN
|
||||||
assert_nginxproxy_behaves $SUT_CONTAINER
|
assert_nginxproxy_behaves $SUT_CONTAINER
|
||||||
|
@ -57,28 +57,30 @@ load test_helpers
|
||||||
|
|
||||||
# GIVEN a simple nginx container
|
# GIVEN a simple nginx container
|
||||||
run docker run -d \
|
run docker run -d \
|
||||||
|
--label bats-type="nginx" \
|
||||||
--name bats-nginx \
|
--name bats-nginx \
|
||||||
-v /etc/nginx/conf.d/ \
|
-v /etc/nginx/conf.d/ \
|
||||||
-v /etc/nginx/certs/ \
|
-v /etc/nginx/certs/ \
|
||||||
nginx:latest
|
nginx:latest
|
||||||
assert_success
|
assert_success
|
||||||
run retry 5 1s docker run appropriate/curl --silent --fail --head http://$(docker_ip bats-nginx)/
|
run retry 5 1s docker run --label bats-type="curl" appropriate/curl --silent --fail --head http://$(docker_ip bats-nginx)/
|
||||||
assert_output -l 0 $'HTTP/1.1 200 OK\r'
|
assert_output -l 0 $'HTTP/1.1 200 OK\r'
|
||||||
|
|
||||||
# WHEN docker-gen runs on our docker host
|
# WHEN docker-gen runs on our docker host
|
||||||
run docker run -d \
|
run docker run -d \
|
||||||
|
--label bats-type="docker-gen" \
|
||||||
--name bats-docker-gen \
|
--name bats-docker-gen \
|
||||||
-v /var/run/docker.sock:/tmp/docker.sock:ro \
|
-v /var/run/docker.sock:/tmp/docker.sock:ro \
|
||||||
-v $BATS_TEST_DIRNAME/../nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl:ro \
|
-v $BATS_TEST_DIRNAME/../nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl:ro \
|
||||||
--volumes-from bats-nginx \
|
--volumes-from bats-nginx \
|
||||||
jwilder/docker-gen:latest \
|
jwilder/docker-gen:0.7.0 \
|
||||||
-notify-sighup bats-nginx \
|
-notify-sighup bats-nginx \
|
||||||
-watch \
|
-watch \
|
||||||
-only-exposed \
|
-only-exposed \
|
||||||
/etc/docker-gen/templates/nginx.tmpl \
|
/etc/docker-gen/templates/nginx.tmpl \
|
||||||
/etc/nginx/conf.d/default.conf
|
/etc/nginx/conf.d/default.conf
|
||||||
assert_success
|
assert_success
|
||||||
docker_wait_for_log bats-docker-gen 6 "Watching docker events"
|
docker_wait_for_log bats-docker-gen 9 "Watching docker events"
|
||||||
|
|
||||||
# Give some time to the docker-gen container to notify bats-nginx so it
|
# Give some time to the docker-gen container to notify bats-nginx so it
|
||||||
# reloads its config
|
# reloads its config
|
||||||
|
@ -94,6 +96,10 @@ load test_helpers
|
||||||
assert_nginxproxy_behaves bats-nginx
|
assert_nginxproxy_behaves bats-nginx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test "[$TEST_FILE] stop all bats containers" {
|
||||||
|
stop_bats_containers
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# $1 nginx-proxy container
|
# $1 nginx-proxy container
|
||||||
function assert_nginxproxy_behaves {
|
function assert_nginxproxy_behaves {
|
||||||
|
|
|
@ -13,6 +13,11 @@ function docker_ip {
|
||||||
docker inspect --format '{{ .NetworkSettings.IPAddress }}' $1
|
docker inspect --format '{{ .NetworkSettings.IPAddress }}' $1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# get the ip of docker container $1
|
||||||
|
function docker_id {
|
||||||
|
docker inspect --format '{{ .ID }}' $1
|
||||||
|
}
|
||||||
|
|
||||||
# get the running state of container $1
|
# get the running state of container $1
|
||||||
# → true/false
|
# → true/false
|
||||||
# fails if the container does not exist
|
# fails if the container does not exist
|
||||||
|
@ -52,9 +57,10 @@ function docker_tcp {
|
||||||
local container_name="$1"
|
local container_name="$1"
|
||||||
docker_clean $container_name
|
docker_clean $container_name
|
||||||
docker run -d \
|
docker run -d \
|
||||||
|
--label bats-type="socat" \
|
||||||
--name $container_name \
|
--name $container_name \
|
||||||
--expose 2375 \
|
--expose 2375 \
|
||||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||||
rancher/socat-docker
|
rancher/socat-docker
|
||||||
docker run --link "$container_name:docker" docker:1.9 version
|
docker run --label bats-type="docker" --link "$container_name:docker" docker:1.9 version
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,22 +5,21 @@ SUT_CONTAINER=bats-nginx-proxy-${TEST_FILE}
|
||||||
function setup {
|
function setup {
|
||||||
# make sure to stop any web container before each test so we don't
|
# 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
|
# have any unexpected contaiener running with VIRTUAL_HOST or VIRUTAL_PORT set
|
||||||
CIDS=( $(docker ps -q --filter "label=bats-type=web") )
|
stop_bats_containers web
|
||||||
if [ ${#CIDS[@]} -gt 0 ]; then
|
|
||||||
docker stop ${CIDS[@]} >&2
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@test "[$TEST_FILE] start a nginx-proxy container" {
|
@test "[$TEST_FILE] start a nginx-proxy container" {
|
||||||
run nginxproxy $SUT_CONTAINER -v /var/run/docker.sock:/tmp/docker.sock:ro
|
run nginxproxy $SUT_CONTAINER -v /var/run/docker.sock:/tmp/docker.sock:ro
|
||||||
assert_success
|
assert_success
|
||||||
docker_wait_for_log $SUT_CONTAINER 3 "Watching docker events"
|
docker_wait_for_log $SUT_CONTAINER 9 "Watching docker events"
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "[$TEST_FILE] nginx-proxy forwards requests for 2 hosts" {
|
@test "[$TEST_FILE] nginx-proxy forwards requests for 2 hosts" {
|
||||||
# WHEN a container runs a web server with VIRTUAL_HOST set for multiple hosts
|
# WHEN a container runs a web server with VIRTUAL_HOST set for multiple hosts
|
||||||
prepare_web_container bats-multiple-hosts-1 80 -e VIRTUAL_HOST=multiple-hosts-1-A.bats,multiple-hosts-1-B.bats
|
prepare_web_container bats-multiple-hosts-1 80 -e VIRTUAL_HOST=multiple-hosts-1-A.bats,multiple-hosts-1-B.bats
|
||||||
|
dockergen_wait_for_event $SUT_CONTAINER start bats-multiple-hosts-1
|
||||||
|
sleep 1
|
||||||
|
|
||||||
# THEN querying the proxy without Host header → 503
|
# THEN querying the proxy without Host header → 503
|
||||||
run curl_container $SUT_CONTAINER / --head
|
run curl_container $SUT_CONTAINER / --head
|
||||||
|
@ -38,3 +37,7 @@ function setup {
|
||||||
run curl_container $SUT_CONTAINER /data --header 'Host: multiple-hosts-1-B.bats'
|
run curl_container $SUT_CONTAINER /data --header 'Host: multiple-hosts-1-B.bats'
|
||||||
assert_output "answer from port 80"
|
assert_output "answer from port 80"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test "[$TEST_FILE] stop all bats containers" {
|
||||||
|
stop_bats_containers
|
||||||
|
}
|
||||||
|
|
|
@ -5,10 +5,7 @@ SUT_CONTAINER=bats-nginx-proxy-${TEST_FILE}
|
||||||
function setup {
|
function setup {
|
||||||
# make sure to stop any web container before each test so we don't
|
# 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
|
# have any unexpected contaiener running with VIRTUAL_HOST or VIRUTAL_PORT set
|
||||||
CIDS=( $(docker ps -q --filter "label=bats-type=web") )
|
stop_bats_containers web
|
||||||
if [ ${#CIDS[@]} -gt 0 ]; then
|
|
||||||
docker stop ${CIDS[@]} >&2
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,13 +13,15 @@ function setup {
|
||||||
# GIVEN nginx-proxy
|
# GIVEN nginx-proxy
|
||||||
run nginxproxy $SUT_CONTAINER -v /var/run/docker.sock:/tmp/docker.sock:ro
|
run nginxproxy $SUT_CONTAINER -v /var/run/docker.sock:/tmp/docker.sock:ro
|
||||||
assert_success
|
assert_success
|
||||||
docker_wait_for_log $SUT_CONTAINER 3 "Watching docker events"
|
docker_wait_for_log $SUT_CONTAINER 9 "Watching docker events"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@test "[$TEST_FILE] nginx-proxy defaults to the service running on port 80" {
|
@test "[$TEST_FILE] nginx-proxy defaults to the service running on port 80" {
|
||||||
# WHEN
|
# WHEN
|
||||||
prepare_web_container bats-web-${TEST_FILE}-1 "80 90" -e VIRTUAL_HOST=web.bats
|
prepare_web_container bats-web-${TEST_FILE}-1 "80 90" -e VIRTUAL_HOST=web.bats
|
||||||
|
dockergen_wait_for_event $SUT_CONTAINER start bats-web-${TEST_FILE}-1
|
||||||
|
sleep 1
|
||||||
|
|
||||||
# THEN
|
# THEN
|
||||||
assert_response_is_from_port 80
|
assert_response_is_from_port 80
|
||||||
|
@ -32,6 +31,8 @@ function setup {
|
||||||
@test "[$TEST_FILE] VIRTUAL_PORT=90 while port 80 is also exposed" {
|
@test "[$TEST_FILE] VIRTUAL_PORT=90 while port 80 is also exposed" {
|
||||||
# GIVEN
|
# GIVEN
|
||||||
prepare_web_container bats-web-${TEST_FILE}-2 "80 90" -e VIRTUAL_HOST=web.bats -e VIRTUAL_PORT=90
|
prepare_web_container bats-web-${TEST_FILE}-2 "80 90" -e VIRTUAL_HOST=web.bats -e VIRTUAL_PORT=90
|
||||||
|
dockergen_wait_for_event $SUT_CONTAINER start bats-web-${TEST_FILE}-2
|
||||||
|
sleep 1
|
||||||
|
|
||||||
# THEN
|
# THEN
|
||||||
assert_response_is_from_port 90
|
assert_response_is_from_port 90
|
||||||
|
@ -41,11 +42,17 @@ function setup {
|
||||||
@test "[$TEST_FILE] single exposed port != 80" {
|
@test "[$TEST_FILE] single exposed port != 80" {
|
||||||
# GIVEN
|
# GIVEN
|
||||||
prepare_web_container bats-web-${TEST_FILE}-3 1234 -e VIRTUAL_HOST=web.bats
|
prepare_web_container bats-web-${TEST_FILE}-3 1234 -e VIRTUAL_HOST=web.bats
|
||||||
|
dockergen_wait_for_event $SUT_CONTAINER start bats-web-${TEST_FILE}-3
|
||||||
|
sleep 1
|
||||||
|
|
||||||
# THEN
|
# THEN
|
||||||
assert_response_is_from_port 1234
|
assert_response_is_from_port 1234
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test "[$TEST_FILE] stop all bats containers" {
|
||||||
|
stop_bats_containers
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# assert querying nginx-proxy provides a response from the expected port of the web container
|
# assert querying nginx-proxy provides a response from the expected port of the web container
|
||||||
# $1 port we are expecting an response from
|
# $1 port we are expecting an response from
|
||||||
|
|
|
@ -33,6 +33,7 @@ function nginxproxy {
|
||||||
shift
|
shift
|
||||||
docker_clean $container_name \
|
docker_clean $container_name \
|
||||||
&& docker run -d \
|
&& docker run -d \
|
||||||
|
--label bats-type="nginx-proxy" \
|
||||||
--name $container_name \
|
--name $container_name \
|
||||||
"$@" \
|
"$@" \
|
||||||
$SUT_IMAGE \
|
$SUT_IMAGE \
|
||||||
|
@ -66,7 +67,7 @@ function curl_container {
|
||||||
local -r container=$1
|
local -r container=$1
|
||||||
local -r path=$2
|
local -r path=$2
|
||||||
shift 2
|
shift 2
|
||||||
docker run appropriate/curl --silent \
|
docker run --label bats-type="curl" appropriate/curl --silent \
|
||||||
--connect-timeout 5 \
|
--connect-timeout 5 \
|
||||||
--max-time 20 \
|
--max-time 20 \
|
||||||
"$@" \
|
"$@" \
|
||||||
|
@ -128,7 +129,39 @@ function prepare_web_container {
|
||||||
# THEN querying directly port works
|
# THEN querying directly port works
|
||||||
IFS=$' \t\n' # See https://github.com/sstephenson/bats/issues/89
|
IFS=$' \t\n' # See https://github.com/sstephenson/bats/issues/89
|
||||||
for port in $ports; do
|
for port in $ports; do
|
||||||
run retry 5 1s docker run appropriate/curl --silent --fail http://$(docker_ip $container_name):$port/data
|
run retry 5 1s docker run --label bats-type="curl" appropriate/curl --silent --fail http://$(docker_ip $container_name):$port/data
|
||||||
assert_output "answer from port $port"
|
assert_output "answer from port $port"
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# stop all containers with the "bats-type" label (matching the optionally supplied value)
|
||||||
|
#
|
||||||
|
# $1 optional label value
|
||||||
|
function stop_bats_containers {
|
||||||
|
local -r value=$1
|
||||||
|
|
||||||
|
if [ -z "$value" ]; then
|
||||||
|
CIDS=( $(docker ps -q --filter "label=bats-type") )
|
||||||
|
else
|
||||||
|
CIDS=( $(docker ps -q --filter "label=bats-type=$value") )
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ${#CIDS[@]} -gt 0 ]; then
|
||||||
|
docker stop ${CIDS[@]} >&2
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# wait for a docker-gen container to receive a specified event from a
|
||||||
|
# container with the specified ID/name
|
||||||
|
#
|
||||||
|
# $1 docker-gen container name
|
||||||
|
# $2 event
|
||||||
|
# $3 ID/name of container to receive event from
|
||||||
|
function dockergen_wait_for_event {
|
||||||
|
local -r container=$1
|
||||||
|
local -r event=$2
|
||||||
|
local -r other=$3
|
||||||
|
local -r did=$(docker_id "$other")
|
||||||
|
docker_wait_for_log "$container" 9 "Received event $event for container ${did:0:12}"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,10 +5,7 @@ SUT_CONTAINER=bats-nginx-proxy-${TEST_FILE}
|
||||||
function setup {
|
function setup {
|
||||||
# make sure to stop any web container before each test so we don't
|
# 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
|
# have any unexpected contaiener running with VIRTUAL_HOST or VIRUTAL_PORT set
|
||||||
CIDS=( $(docker ps -q --filter "label=bats-type=web") )
|
stop_bats_containers web
|
||||||
if [ ${#CIDS[@]} -gt 0 ]; then
|
|
||||||
docker stop ${CIDS[@]} >&2
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,13 +13,15 @@ function setup {
|
||||||
# GIVEN
|
# GIVEN
|
||||||
run nginxproxy $SUT_CONTAINER -v /var/run/docker.sock:/tmp/docker.sock:ro
|
run nginxproxy $SUT_CONTAINER -v /var/run/docker.sock:/tmp/docker.sock:ro
|
||||||
assert_success
|
assert_success
|
||||||
docker_wait_for_log $SUT_CONTAINER 3 "Watching docker events"
|
docker_wait_for_log $SUT_CONTAINER 9 "Watching docker events"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@test "[$TEST_FILE] VIRTUAL_HOST=*.wildcard.bats" {
|
@test "[$TEST_FILE] VIRTUAL_HOST=*.wildcard.bats" {
|
||||||
# WHEN
|
# WHEN
|
||||||
prepare_web_container bats-wildcard-hosts-1 80 -e VIRTUAL_HOST=*.wildcard.bats
|
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
|
# THEN
|
||||||
assert_200 f00.wildcard.bats
|
assert_200 f00.wildcard.bats
|
||||||
|
@ -33,6 +32,8 @@ function setup {
|
||||||
@test "[$TEST_FILE] VIRTUAL_HOST=wildcard.bats.*" {
|
@test "[$TEST_FILE] VIRTUAL_HOST=wildcard.bats.*" {
|
||||||
# WHEN
|
# WHEN
|
||||||
prepare_web_container bats-wildcard-hosts-2 80 -e VIRTUAL_HOST=wildcard.bats.*
|
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
|
# THEN
|
||||||
assert_200 wildcard.bats.f00
|
assert_200 wildcard.bats.f00
|
||||||
|
@ -43,6 +44,8 @@ function setup {
|
||||||
@test "[$TEST_FILE] VIRTUAL_HOST=~^foo\.bar\..*\.bats" {
|
@test "[$TEST_FILE] VIRTUAL_HOST=~^foo\.bar\..*\.bats" {
|
||||||
# WHEN
|
# WHEN
|
||||||
prepare_web_container bats-wildcard-hosts-2 80 -e VIRTUAL_HOST=~^foo\.bar\..*\.bats
|
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
|
# THEN
|
||||||
assert_200 foo.bar.whatever.bats
|
assert_200 foo.bar.whatever.bats
|
||||||
|
@ -51,6 +54,10 @@ function setup {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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
|
# 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
|
# $1 Host HTTP header to use when querying nginx-proxy
|
||||||
|
|
Reference in a new issue