From 0f234154c24da87d524e39255e659ae340227278 Mon Sep 17 00:00:00 2001
From: Daniel Nephin <dnephin@docker.com>
Date: Thu, 14 Jan 2016 14:35:02 -0500
Subject: [PATCH] Remove all non-external networks on down.

Also moves the shutdown test fixtures to be a more general v2-full fixture.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
---
 compose/network.py                            |  5 ++++-
 compose/project.py                            |  8 ++++----
 tests/acceptance/cli_test.py                  | 18 ++++++++++-------
 tests/fixtures/shutdown/docker-compose.yml    | 10 ----------
 .../fixtures/{shutdown => v2-full}/Dockerfile |  0
 tests/fixtures/v2-full/docker-compose.yml     | 20 +++++++++++++++++++
 6 files changed, 39 insertions(+), 22 deletions(-)
 delete mode 100644 tests/fixtures/shutdown/docker-compose.yml
 rename tests/fixtures/{shutdown => v2-full}/Dockerfile (100%)
 create mode 100644 tests/fixtures/v2-full/docker-compose.yml

diff --git a/compose/network.py b/compose/network.py
index b2ba2e9b7..eaad770cf 100644
--- a/compose/network.py
+++ b/compose/network.py
@@ -65,7 +65,10 @@ class Network(object):
             )
 
     def remove(self):
-        # TODO: don't remove external networks
+        if self.external_name:
+            log.info("Network %s is external, skipping", self.full_name)
+            return
+
         log.info("Removing network {}".format(self.full_name))
         self.client.remove_network(self.full_name)
 
diff --git a/compose/project.py b/compose/project.py
index 12d52cc26..1322c9902 100644
--- a/compose/project.py
+++ b/compose/project.py
@@ -275,7 +275,7 @@ class Project(object):
     def down(self, remove_image_type, include_volumes):
         self.stop()
         self.remove_stopped(v=include_volumes)
-        self.remove_default_network()
+        self.remove_networks()
 
         if include_volumes:
             self.remove_volumes()
@@ -286,11 +286,11 @@ class Project(object):
         for service in self.get_services():
             service.remove_image(remove_image_type)
 
-    def remove_default_network(self):
+    def remove_networks(self):
         if not self.use_networking:
             return
-        if self.uses_default_network():
-            self.default_network.remove()
+        for network in self.networks:
+            network.remove()
 
     def remove_volumes(self):
         for volume in self.volumes:
diff --git a/tests/acceptance/cli_test.py b/tests/acceptance/cli_test.py
index 9c9ced8ce..548c6b939 100644
--- a/tests/acceptance/cli_test.py
+++ b/tests/acceptance/cli_test.py
@@ -340,16 +340,20 @@ class CLITestCase(DockerClientTestCase):
         assert '--rmi flag must be' in result.stderr
 
     def test_down(self):
-        self.base_dir = 'tests/fixtures/shutdown'
+        self.base_dir = 'tests/fixtures/v2-full'
         self.dispatch(['up', '-d'])
-        wait_on_condition(ContainerCountCondition(self.project, 1))
+        wait_on_condition(ContainerCountCondition(self.project, 2))
 
         result = self.dispatch(['down', '--rmi=local', '--volumes'])
-        assert 'Stopping shutdown_web_1' in result.stderr
-        assert 'Removing shutdown_web_1' in result.stderr
-        assert 'Removing volume shutdown_data' in result.stderr
-        assert 'Removing image shutdown_web' in result.stderr
-        assert 'Removing network shutdown_default' in result.stderr
+        assert 'Stopping v2full_web_1' in result.stderr
+        assert 'Stopping v2full_other_1' in result.stderr
+        assert 'Removing v2full_web_1' in result.stderr
+        assert 'Removing v2full_other_1' in result.stderr
+        assert 'Removing volume v2full_data' in result.stderr
+        assert 'Removing image v2full_web' in result.stderr
+        assert 'Removing image busybox' not in result.stderr
+        assert 'Removing network v2full_default' in result.stderr
+        assert 'Removing network v2full_front' in result.stderr
 
     def test_up_detached(self):
         self.dispatch(['up', '-d'])
diff --git a/tests/fixtures/shutdown/docker-compose.yml b/tests/fixtures/shutdown/docker-compose.yml
deleted file mode 100644
index c83c3d637..000000000
--- a/tests/fixtures/shutdown/docker-compose.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-version: 2
-
-volumes:
-  data:
-    driver: local
-
-services:
-  web:
-    build: .
diff --git a/tests/fixtures/shutdown/Dockerfile b/tests/fixtures/v2-full/Dockerfile
similarity index 100%
rename from tests/fixtures/shutdown/Dockerfile
rename to tests/fixtures/v2-full/Dockerfile
diff --git a/tests/fixtures/v2-full/docker-compose.yml b/tests/fixtures/v2-full/docker-compose.yml
new file mode 100644
index 000000000..86d1c2c22
--- /dev/null
+++ b/tests/fixtures/v2-full/docker-compose.yml
@@ -0,0 +1,20 @@
+
+version: 2
+
+volumes:
+  data:
+    driver: local
+
+networks:
+  front: {}
+
+services:
+  web:
+    build: .
+    networks:
+      - front
+      - default
+
+  other:
+    image: busybox:latest
+    command: top