7927: Docker cleaner service uses Docker API v1.14.
authorBrett Smith <brett@curoverse.com>
Wed, 16 Dec 2015 16:07:24 +0000 (11:07 -0500)
committerBrett Smith <brett@curoverse.com>
Fri, 18 Dec 2015 18:18:22 +0000 (13:18 -0500)
This helps it work consistently across a variety of Docker versions.
See the comment in the tests for more background.

services/dockercleaner/arvados_docker/cleaner.py
services/dockercleaner/tests/test_cleaner.py

index 2435e6de806043b4e014071e8f9e05f06b159c4e..719cc2a8cba2c6f9bbd7fdb7dc2663a06b3c590f 100755 (executable)
@@ -288,7 +288,7 @@ def run(args, docker_client):
 def main(arguments):
     args = parse_arguments(arguments)
     setup_logging(args)
-    run(args, docker.Client())
+    run(args, docker.Client(version='1.14'))
 
 if __name__ == '__main__':
     main(sys.argv[1:])
index 43abe4f636dcb1076ee65e90f7a549f6616af834..31a48b27774004ac1c9c88116cef2f8f2b499639 100644 (file)
@@ -374,6 +374,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']