Bläddra i källkod

Merge pull request #257 from appropriate/osx-fix-test-suite

Fix running test suite under Docker Machine
Jason Wilder 9 år sedan
förälder
incheckning
f819a4e2e7

+ 3 - 1
circle.yml

@@ -14,8 +14,10 @@ dependencies:
     - docker pull nginx
     - docker pull python:3
     - docker pull rancher/socat-docker
+    - docker pull appropriate/curl
+    - docker pull docker:1.7
 
 test:
   override:
     - docker build -t jwilder/nginx-proxy:bats .
-    - bats test
+    - bats test

+ 4 - 1
test/default-host.bats

@@ -4,7 +4,10 @@ load test_helpers
 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
-	docker ps -q --filter "label=bats-type=web" | xargs -r docker stop >&2
+	CIDS=( $(docker ps -q --filter "label=bats-type=web") )
+	if [ ${#CIDS[@]} -gt 0 ]; then
+		docker stop ${CIDS[@]} >&2
+	fi
 }
 
 

+ 1 - 1
test/docker.bats

@@ -62,7 +62,7 @@ load test_helpers
 		-v /etc/nginx/certs/ \
 		nginx:latest
 	assert_success
-	run retry 5 1s curl --silent --fail --head http://$(docker_ip bats-nginx)/
+	run retry 5 1s docker run appropriate/curl --silent --fail --head http://$(docker_ip bats-nginx)/
 	assert_output -l 0 $'HTTP/1.1 200 OK\r'
 
 	# WHEN docker-gen runs on our docker host

+ 1 - 1
test/lib/docker_helpers.bash

@@ -56,5 +56,5 @@ function docker_tcp {
 		--expose 2375 \
 		-v /var/run/docker.sock:/var/run/docker.sock \
 		rancher/socat-docker
-	docker -H tcp://$(docker_ip $container_name):2375 version
+	docker run --link "$container_name:docker" docker:1.7 version
 }

+ 4 - 1
test/multiple-hosts.bats

@@ -5,7 +5,10 @@ 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
-	docker ps -q --filter "label=bats-type=web" | xargs -r docker stop >&2
+	CIDS=( $(docker ps -q --filter "label=bats-type=web") )
+	if [ ${#CIDS[@]} -gt 0 ]; then
+		docker stop ${CIDS[@]} >&2
+	fi
 }
 
 

+ 57 - 54
test/multiple-ports.bats

@@ -1,54 +1,57 @@
-#!/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
-	docker ps -q --filter "label=bats-type=web" | xargs -r docker stop >&2
-}
-
-
-@test "[$TEST_FILE] start a nginx-proxy container" {
-	# GIVEN nginx-proxy
-	run nginxproxy $SUT_CONTAINER -v /var/run/docker.sock:/tmp/docker.sock:ro
-	assert_success
-	docker_wait_for_log $SUT_CONTAINER 3 "Watching docker events"
-}
-
-
-@test "[$TEST_FILE] nginx-proxy defaults to the service running on port 80" {
-	# WHEN
-	prepare_web_container bats-web-${TEST_FILE}-1 "80 90" -e VIRTUAL_HOST=web.bats
-
-	# THEN 
-	assert_response_is_from_port 80
-}
-
-
-@test "[$TEST_FILE] VIRTUAL_PORT=90 while port 80 is also exposed" {
-	# GIVEN
-	prepare_web_container bats-web-${TEST_FILE}-2 "80 90" -e VIRTUAL_HOST=web.bats -e VIRTUAL_PORT=90
-
-	# THEN 
-	assert_response_is_from_port 90
-}
-
-
-@test "[$TEST_FILE] single exposed port != 80" {
-	# GIVEN
-	prepare_web_container bats-web-${TEST_FILE}-3 1234 -e VIRTUAL_HOST=web.bats
-
-	# THEN 
-	assert_response_is_from_port 1234
-}
-
-
-# assert querying nginx-proxy provides a response from the expected port of the web container
-# $1 port we are expecting an response from
-function assert_response_is_from_port {
-	local -r port=$1
-	run curl_container $SUT_CONTAINER /data --header "Host: web.bats"
-	assert_output "answer from port $port"
-}
-
+#!/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
+	CIDS=( $(docker ps -q --filter "label=bats-type=web") )
+	if [ ${#CIDS[@]} -gt 0 ]; then
+		docker stop ${CIDS[@]} >&2
+	fi
+}
+
+
+@test "[$TEST_FILE] start a nginx-proxy container" {
+	# GIVEN nginx-proxy
+	run nginxproxy $SUT_CONTAINER -v /var/run/docker.sock:/tmp/docker.sock:ro
+	assert_success
+	docker_wait_for_log $SUT_CONTAINER 3 "Watching docker events"
+}
+
+
+@test "[$TEST_FILE] nginx-proxy defaults to the service running on port 80" {
+	# WHEN
+	prepare_web_container bats-web-${TEST_FILE}-1 "80 90" -e VIRTUAL_HOST=web.bats
+
+	# THEN
+	assert_response_is_from_port 80
+}
+
+
+@test "[$TEST_FILE] VIRTUAL_PORT=90 while port 80 is also exposed" {
+	# GIVEN
+	prepare_web_container bats-web-${TEST_FILE}-2 "80 90" -e VIRTUAL_HOST=web.bats -e VIRTUAL_PORT=90
+
+	# THEN
+	assert_response_is_from_port 90
+}
+
+
+@test "[$TEST_FILE] single exposed port != 80" {
+	# GIVEN
+	prepare_web_container bats-web-${TEST_FILE}-3 1234 -e VIRTUAL_HOST=web.bats
+
+	# THEN
+	assert_response_is_from_port 1234
+}
+
+
+# assert querying nginx-proxy provides a response from the expected port of the web container
+# $1 port we are expecting an response from
+function assert_response_is_from_port {
+	local -r port=$1
+	run curl_container $SUT_CONTAINER /data --header "Host: web.bats"
+	assert_output "answer from port $port"
+}
+

+ 5 - 4
test/test_helpers.bash

@@ -1,7 +1,6 @@
 # Test if requirements are met
 (
 	type docker &>/dev/null || ( echo "docker is not available"; exit 1 )
-	type curl &>/dev/null || ( echo "curl is not available"; exit 1 )
 )>&2
 
 
@@ -67,7 +66,7 @@ function curl_container {
 	local -r container=$1
 	local -r path=$2
 	shift 2
-	curl --silent \
+	docker run appropriate/curl --silent \
 		--connect-timeout 5 \
 		--max-time 20 \
 		"$@" \
@@ -87,6 +86,7 @@ function prepare_web_container {
 	local -r options="$@"
 
 	local expose_option=""
+	IFS=$' \t\n' # See https://github.com/sstephenson/bats/issues/89
 	for port in $ports; do
 		expose_option="${expose_option}--expose=$port "
 	done
@@ -121,8 +121,9 @@ function prepare_web_container {
 	assert_success
 
 	# THEN querying directly port works
+	IFS=$' \t\n' # See https://github.com/sstephenson/bats/issues/89
 	for port in $ports; do
-		run retry 5 1s curl --silent --fail http://$(docker_ip $container_name):$port/data
+		run retry 5 1s docker run appropriate/curl --silent --fail http://$(docker_ip $container_name):$port/data
 		assert_output "answer from port $port"
 	done
-}
+}

+ 71 - 68
test/wildcard-hosts.bats

@@ -1,68 +1,71 @@
-#!/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
-	docker ps -q --filter "label=bats-type=web" | xargs -r docker stop >&2
-}
-
-
-@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 3 "Watching docker events"
-}
-
-
-@test "[$TEST_FILE] VIRTUAL_HOST=*.wildcard.bats" {
-	# WHEN
-	prepare_web_container bats-wildcard-hosts-1 80 -e VIRTUAL_HOST=*.wildcard.bats
-
-	# 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.*
-
-	# 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
-
-	# THEN
-	assert_200 foo.bar.whatever.bats
-	assert_200 foo.bar.why.not.bats
-	assert_503 unexpected.host.bats
-
-}
-
-
-# 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'
-}
+#!/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
+	CIDS=( $(docker ps -q --filter "label=bats-type=web") )
+	if [ ${#CIDS[@]} -gt 0 ]; then
+		docker stop ${CIDS[@]} >&2
+	fi
+}
+
+
+@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 3 "Watching docker events"
+}
+
+
+@test "[$TEST_FILE] VIRTUAL_HOST=*.wildcard.bats" {
+	# WHEN
+	prepare_web_container bats-wildcard-hosts-1 80 -e VIRTUAL_HOST=*.wildcard.bats
+
+	# 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.*
+
+	# 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
+
+	# THEN
+	assert_200 foo.bar.whatever.bats
+	assert_200 foo.bar.why.not.bats
+	assert_503 unexpected.host.bats
+
+}
+
+
+# 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'
+}