mirror of
				https://github.com/thib8956/nginx-proxy
				synced 2025-10-31 17:19:21 +00:00 
			
		
		
		
	TESTS: the docker_compose pytest fixture is now responsible for attaching the container running pytest to all docker networks
This commit is contained in:
		| @@ -68,6 +68,8 @@ The fixture will run the _docker-compose_ command with the `-f` option to load t | ||||
|  | ||||
|     docker-compose -f test_example.yml up -d | ||||
|  | ||||
| In the case you are running pytest from within a docker container, the `docker_compose` fixture will make sure the container running pytest is attached to all docker networks. That way, your test will be able to reach any of them. | ||||
|  | ||||
|  | ||||
| ### nginxproxy fixture | ||||
|  | ||||
|   | ||||
| @@ -258,25 +258,18 @@ def disconnect_from_network(network=None): | ||||
|             docker_client.disconnect_container_from_network(my_container_info['Id'], network) | ||||
|  | ||||
|  | ||||
| def connect_to_nginxproxy_network(): | ||||
| def connect_to_all_networks(): | ||||
|     """ | ||||
|     If we are running from a container, connect our container to the first network on the nginx-proxy | ||||
|     container. | ||||
|     If we are running from a container, connect our container to all current docker networks. | ||||
|  | ||||
|     :return: the name of the network we were connected to, or None | ||||
|     :return: a list of networks we connected to | ||||
|     """ | ||||
|     if I_AM_RUNNING_INSIDE_A_DOCKER_CONTAINER: | ||||
|         # find the jwilder/nginx-proxy:test container | ||||
|         nginx_proxy_containers = docker_client.containers(filters={"ancestor": "jwilder/nginx-proxy:test"}) | ||||
|         if len(nginx_proxy_containers) > 1: | ||||
|             pytest.failed("Too many running jwilder/nginx-proxy:test containers") | ||||
|         elif len(nginx_proxy_containers) == 0: | ||||
|             pytest.failed("No running jwilder/nginx-proxy:test container") | ||||
|          | ||||
|         # figure out the nginx-proxy container first network (we assume it has only one) | ||||
|         nproxy_network = nginx_proxy_containers[0]["NetworkSettings"]["Networks"].keys()[0] | ||||
|  | ||||
|         return connect_to_network(nproxy_network) | ||||
|     if not I_AM_RUNNING_INSIDE_A_DOCKER_CONTAINER: | ||||
|         return [] | ||||
|     else: | ||||
|         # find the list of docker networks | ||||
|         networks = map(lambda x: x['Name'], filter(lambda x: len(x['Containers'].keys()) > 0 and x['Name'] != 'bridge', docker_client.networks())) | ||||
|         return [connect_to_network(network) for network in networks] | ||||
|  | ||||
|  | ||||
| ############################################################################### | ||||
| @@ -291,6 +284,9 @@ def docker_compose(request): | ||||
|     pytest fixture providing containers described in a docker compose file. After the tests, remove the created containers | ||||
|      | ||||
|     A custom docker compose file name can be defined in a variable named `docker_compose_file`. | ||||
|      | ||||
|     Also, in the case where pytest is running from a docker container, this fixture makes sure | ||||
|     our container will be attached to all the docker networks. | ||||
|     """ | ||||
|     docker_compose_file = find_docker_compose_file(request) | ||||
|     original_dns_resolver = monkey_patch_urllib_dns_resolver() | ||||
| @@ -298,8 +294,11 @@ def docker_compose(request): | ||||
|         pytest.exit("The docker image 'jwilder/nginx-proxy:test' is missing") | ||||
|     remove_all_containers() | ||||
|     docker_compose_up(docker_compose_file) | ||||
|     networks = connect_to_all_networks() | ||||
|     wait_for_nginxproxy_to_be_ready() | ||||
|     yield | ||||
|     for network in networks: | ||||
|         disconnect_from_network(network) | ||||
|     docker_compose_down(docker_compose_file) | ||||
|     restore_urllib_dns_resolver(original_dns_resolver) | ||||
|  | ||||
| @@ -313,14 +312,8 @@ def nginxproxy(): | ||||
|  | ||||
|     The difference is that in case an HTTP requests has status code 404 or 502 (which mostly | ||||
|     indicates that nginx has just reloaded), we retry up to 30 times the query | ||||
|      | ||||
|     Also, in the case where pytest is running from a docker container, this fixture makes sure | ||||
|     that container will be attached to the jwilder/nginx-proxy:test container's network which  | ||||
|     is under test. | ||||
|     """ | ||||
|     network = connect_to_nginxproxy_network() | ||||
|     yield requests_for_docker() | ||||
|     disconnect_from_network(network) | ||||
|  | ||||
|  | ||||
| ############################################################################### | ||||
|   | ||||
		Reference in New Issue
	
	Block a user