docker.bats 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #!/usr/bin/env bats
  2. load test_helpers
  3. @test "[$TEST_FILE] start 2 web containers" {
  4. prepare_web_container bats-web1 81 -e VIRTUAL_HOST=web1.bats
  5. prepare_web_container bats-web2 82 -e VIRTUAL_HOST=web2.bats
  6. }
  7. @test "[$TEST_FILE] -v /var/run/docker.sock:/tmp/docker.sock:ro" {
  8. SUT_CONTAINER=bats-nginx-proxy-${TEST_FILE}-1
  9. # WHEN nginx-proxy runs on our docker host using the default unix socket
  10. run nginxproxy $SUT_CONTAINER -v /var/run/docker.sock:/tmp/docker.sock:ro
  11. assert_success
  12. docker_wait_for_log $SUT_CONTAINER 3 "Watching docker events"
  13. # THEN
  14. assert_nginxproxy_behaves $SUT_CONTAINER
  15. }
  16. @test "[$TEST_FILE] -v /var/run/docker.sock:/f00.sock:ro -e DOCKER_HOST=unix:///f00.sock" {
  17. SUT_CONTAINER=bats-nginx-proxy-${TEST_FILE}-2
  18. # WHEN nginx-proxy runs on our docker host using a custom unix socket
  19. run nginxproxy $SUT_CONTAINER -v /var/run/docker.sock:/f00.sock:ro -e DOCKER_HOST=unix:///f00.sock
  20. assert_success
  21. docker_wait_for_log $SUT_CONTAINER 3 "Watching docker events"
  22. # THEN
  23. assert_nginxproxy_behaves $SUT_CONTAINER
  24. }
  25. @test "[$TEST_FILE] -e DOCKER_HOST=tcp://..." {
  26. SUT_CONTAINER=bats-nginx-proxy-${TEST_FILE}-3
  27. # GIVEN a container exposing our docker host over TCP
  28. run docker_tcp bats-docker-tcp
  29. assert_success
  30. sleep 1s
  31. # WHEN nginx-proxy runs on our docker host using tcp to connect to our docker host
  32. run nginxproxy $SUT_CONTAINER -e DOCKER_HOST="tcp://bats-docker-tcp:2375" --link bats-docker-tcp:bats-docker-tcp
  33. assert_success
  34. docker_wait_for_log $SUT_CONTAINER 3 "Watching docker events"
  35. # THEN
  36. assert_nginxproxy_behaves $SUT_CONTAINER
  37. }
  38. @test "[$TEST_FILE] separated containers (nginx + docker-gen + nginx.tmpl)" {
  39. docker_clean bats-nginx
  40. docker_clean bats-docker-gen
  41. # GIVEN a simple nginx container
  42. run docker run -d \
  43. --name bats-nginx \
  44. -v /etc/nginx/conf.d/ \
  45. -v /etc/nginx/certs/ \
  46. nginx:latest
  47. assert_success
  48. run retry 5 1s curl --silent --fail -A "before-docker-gen" --head http://$(docker_ip bats-nginx)/
  49. assert_output -l 0 $'HTTP/1.1 200 OK\r'
  50. # WHEN docker-gen runs on our docker host
  51. run docker run -d \
  52. --name bats-docker-gen \
  53. -v /var/run/docker.sock:/tmp/docker.sock:ro \
  54. -v $BATS_TEST_DIRNAME/../nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl:ro \
  55. --volumes-from bats-nginx \
  56. jwilder/docker-gen:latest \
  57. -notify-sighup bats-nginx \
  58. -watch \
  59. -only-exposed \
  60. /etc/docker-gen/templates/nginx.tmpl \
  61. /etc/nginx/conf.d/default.conf
  62. assert_success
  63. docker_wait_for_log bats-docker-gen 6 "Watching docker events"
  64. # Give some time to the docker-gen container to notify bats-nginx so it
  65. # reloads its config
  66. sleep 2s
  67. run docker_running_state bats-nginx
  68. assert_output "true" || {
  69. docker logs bats-docker-gen
  70. false
  71. } >&2
  72. # THEN
  73. assert_nginxproxy_behaves bats-nginx
  74. }
  75. # $1 nginx-proxy container
  76. function assert_nginxproxy_behaves {
  77. local -r container=$1
  78. # Querying the proxy without Host header → 503
  79. run curl_container $container / --head
  80. assert_output -l 0 $'HTTP/1.1 503 Service Temporarily Unavailable\r'
  81. # Querying the proxy with Host header → 200
  82. run curl_container $container /data --header "Host: web1.bats"
  83. assert_output "answer from port 81"
  84. run curl_container $container /data --header "Host: web2.bats"
  85. assert_output "answer from port 82"
  86. # Querying the proxy with unknown Host header → 503
  87. run curl_container $container /data --header "Host: webFOO.bats" --head
  88. assert_output -l 0 $'HTTP/1.1 503 Service Temporarily Unavailable\r'
  89. }