8709: Docker cleaner cleans container volumes.
[arvados.git] / services / dockercleaner / tests / test_cleaner.py
index a9ecc92441f700532370cdce7b6b61c01e03bd76..3cb172e1e686d550206f8e21a49616ed71990fc4 100644 (file)
@@ -313,7 +313,13 @@ class DockerImageCleanerTestCase(DockerImageUseRecorderTestCase):
 
 class DockerContainerCleanerTestCase(DockerImageUseRecorderTestCase):
     TEST_CLASS = cleaner.DockerImageCleaner
-    TEST_CLASS_INIT_KWARGS = {'remove_stopped_containers': True}
+    TEST_CLASS_INIT_KWARGS = {'remove_containers_onexit': True}
+
+    def test_container_deletion_deletes_volumes(self):
+        cid = MockDockerId()
+        self.events.append(MockEvent('die', docker_id=cid))
+        self.recorder.run()
+        self.docker_client.remove_container.assert_called_with(cid, v=True)
 
     @mock.patch('arvados_docker.cleaner.logger')
     def test_failed_container_deletion_handling(self, mockLogger):
@@ -321,7 +327,7 @@ class DockerContainerCleanerTestCase(DockerImageUseRecorderTestCase):
         self.docker_client.remove_container.side_effect = MockException(500)
         self.events.append(MockEvent('die', docker_id=cid))
         self.recorder.run()
-        self.docker_client.remove_container.assert_called_with(cid)
+        self.docker_client.remove_container.assert_called_with(cid, v=True)
         self.assertEqual("Failed to remove container %s: %s",
                          mockLogger.warning.call_args[0][0])
         self.assertEqual(cid,
@@ -374,6 +380,21 @@ class RunTestCase(unittest.TestCase):
         self.assertEqual(event_kwargs[0]['until'], event_kwargs[1]['since'])
 
 
+@mock.patch('docker.Client', name='docker_client')
+@mock.patch('arvados_docker.cleaner.run', name='cleaner_run')
+class MainTestCase(unittest.TestCase):
+    def test_client_api_version(self, run_mock, docker_client):
+        cleaner.main(['--quota', '1000T'])
+        self.assertEqual(1, docker_client.call_count)
+        # 1.14 is the first version that's well defined, going back to
+        # Docker 1.2, and still supported up to at least Docker 1.9.
+        # See <https://docs.docker.com/engine/reference/api/docker_remote_api/>.
+        self.assertEqual('1.14',
+                         docker_client.call_args[1].get('version'))
+        self.assertEqual(1, run_mock.call_count)
+        self.assertIs(run_mock.call_args[0][1], docker_client())
+
+
 class ContainerRemovalTestCase(unittest.TestCase):
     LIFECYCLE = ['create', 'attach', 'start', 'resize', 'die', 'destroy']
 
@@ -398,13 +419,13 @@ class ContainerRemovalTestCase(unittest.TestCase):
     def test_remove_onexit(self):
         self.args.remove_stopped_containers = 'onexit'
         cleaner.run(self.args, self.docker_client)
-        self.docker_client.remove_container.assert_called_once_with(self.newCID)
+        self.docker_client.remove_container.assert_called_once_with(self.newCID, v=True)
 
     def test_remove_always(self):
         self.args.remove_stopped_containers = 'always'
         cleaner.run(self.args, self.docker_client)
-        self.docker_client.remove_container.assert_any_call(self.existingCID)
-        self.docker_client.remove_container.assert_any_call(self.newCID)
+        self.docker_client.remove_container.assert_any_call(self.existingCID, v=True)
+        self.docker_client.remove_container.assert_any_call(self.newCID, v=True)
         self.assertEqual(2, self.docker_client.remove_container.call_count)
 
     def test_remove_never(self):
@@ -424,5 +445,5 @@ class ContainerRemovalTestCase(unittest.TestCase):
             mock.call.events(since=mock.ANY),
             mock.call.containers(filters={'status':'exited'})])
         # Asked to delete the container twice?
-        self.docker_client.remove_container.assert_has_calls([mock.call(self.existingCID)] * 2)
+        self.docker_client.remove_container.assert_has_calls([mock.call(self.existingCID, v=True)] * 2)
         self.assertEqual(2, self.docker_client.remove_container.call_count)