From 637e4260ca96881e723e4de2e7357a394584d52d Mon Sep 17 00:00:00 2001
From: Thomas Herve <therve@redhat.com>
Date: Tue, 6 Nov 2018 15:02:12 +0100
Subject: [PATCH] Change docker-cmd for recent paunch changes

paunch was changed to support podman, it breaks some arguments, and
expectations in our tests. Let's fix that.

Change-Id: I7127cc2edb9af785e0533e0a1e5f2608417390e7
---
 .../install.d/hook-docker-cmd.py              |  6 +-
 .../configure.d/50-heat-config-docker-cmd     |  4 +-
 tests/test_hook_docker_cmd.py                 | 76 +++++++++++++++----
 3 files changed, 68 insertions(+), 18 deletions(-)

diff --git a/heat-config-docker-cmd/install.d/hook-docker-cmd.py b/heat-config-docker-cmd/install.d/hook-docker-cmd.py
index dda7bc2..b60e55c 100755
--- a/heat-config-docker-cmd/install.d/hook-docker-cmd.py
+++ b/heat-config-docker-cmd/install.d/hook-docker-cmd.py
@@ -76,9 +76,9 @@ def main(argv=sys.argv):
     stdout, stderr, deploy_status_code = paunch.apply(
         cid,
         config,
-        managed_by='docker-cmd',
-        labels=labels,
-        docker_cmd=DOCKER_CMD
+        'docker-cmd',
+        labels,
+        DOCKER_CMD
     )
 
     json.dump(build_response(
diff --git a/heat-config-docker-cmd/os-refresh-config/configure.d/50-heat-config-docker-cmd b/heat-config-docker-cmd/os-refresh-config/configure.d/50-heat-config-docker-cmd
index 4526139..86b7d64 100755
--- a/heat-config-docker-cmd/os-refresh-config/configure.d/50-heat-config-docker-cmd
+++ b/heat-config-docker-cmd/os-refresh-config/configure.d/50-heat-config-docker-cmd
@@ -53,8 +53,8 @@ def main(argv=sys.argv):
 
     paunch.cleanup(
         cmd_config_ids,
-        managed_by='docker-cmd',
-        docker_cmd=DOCKER_CMD
+        'docker-cmd',
+        DOCKER_CMD
     )
 
 
diff --git a/tests/test_hook_docker_cmd.py b/tests/test_hook_docker_cmd.py
index a01e915..db93ff1 100644
--- a/tests/test_hook_docker_cmd.py
+++ b/tests/test_hook_docker_cmd.py
@@ -234,6 +234,8 @@ class HookDockerCmdTest(common.RunScriptTest):
                 {},
                 # docker run web
                 {'stderr': 'Creating web...'},
+                # inspect
+                {},
                 # name lookup for exec web
                 {'stdout': 'web'},
                 # docker exec web
@@ -253,7 +255,7 @@ class HookDockerCmdTest(common.RunScriptTest):
             'deploy_status_code': 0
         }, json.loads(stdout.decode('utf-8')))
 
-        state = list(self.json_from_files(self.test_state_path, 13))
+        state = list(self.json_from_files(self.test_state_path, 14))
         self.check_basic_response(state)
         self.assert_args_and_labels([
             self.fake_tool_path,
@@ -308,6 +310,15 @@ class HookDockerCmdTest(common.RunScriptTest):
             u'container_name=web',
             u'managed_by=docker-cmd',
         ], state[10]['args'])
+        self.assertEqual([
+            self.fake_tool_path,
+            'inspect',
+            '--type',
+            'container',
+            '--format',
+            'exists',
+            'web-ls'
+        ], state[11]['args'])
         self.assertEqual([
             self.fake_tool_path,
             u'ps',
@@ -318,14 +329,14 @@ class HookDockerCmdTest(common.RunScriptTest):
             u'label=config_id=abc123',
             u'--format',
             u'{{.Names}}',
-        ], state[11]['args'])
+        ], state[12]['args'])
         self.assertEqual([
             self.fake_tool_path,
             u'exec',
             u'web',
             u'/bin/ls',
             u'-l'
-        ], state[12]['args'])
+        ], state[13]['args'])
 
     def test_hook_exit_codes(self):
 
@@ -337,6 +348,7 @@ class HookDockerCmdTest(common.RunScriptTest):
                 {},
                 # ps for currently running containers
                 {},
+                {},
                 {'stdout': 'web'},
                 {
                     'stdout': '',
@@ -354,7 +366,7 @@ class HookDockerCmdTest(common.RunScriptTest):
             'deploy_status_code': 0
         }, json.loads(stdout.decode('utf-8')))
 
-        state = list(self.json_from_files(self.test_state_path, 5))
+        state = list(self.json_from_files(self.test_state_path, 6))
         self.assertEqual([
             self.fake_tool_path,
             'ps',
@@ -386,6 +398,15 @@ class HookDockerCmdTest(common.RunScriptTest):
             '--format',
             '{{.Names}} {{.Label "container_name"}}'
         ], state[2]['args'])
+        self.assertEqual([
+            self.fake_tool_path,
+            'inspect',
+            '--type',
+            'container',
+            '--format',
+            'exists',
+            'web-ls'
+        ], state[3]['args'])
         self.assertEqual([
             self.fake_tool_path,
             'ps',
@@ -396,14 +417,14 @@ class HookDockerCmdTest(common.RunScriptTest):
             'label=config_id=abc123',
             '--format',
             '{{.Names}}',
-        ], state[3]['args'])
+        ], state[4]['args'])
         self.assertEqual([
             self.fake_tool_path,
             'exec',
             'web',
             '/bin/ls',
             '-l'
-        ], state[4]['args'])
+        ], state[5]['args'])
 
     def test_hook_failed(self):
 
@@ -431,6 +452,8 @@ class HookDockerCmdTest(common.RunScriptTest):
                 {},
                 # docker run web
                 {'stderr': 'Creating web...'},
+                # inspect
+                {},
                 # name lookup for exec web
                 {'stdout': 'web'},
                 # docker exec web fails
@@ -452,7 +475,7 @@ class HookDockerCmdTest(common.RunScriptTest):
             'deploy_status_code': 2
         }, json.loads(stdout.decode('utf-8')))
 
-        state = list(self.json_from_files(self.test_state_path, 13))
+        state = list(self.json_from_files(self.test_state_path, 14))
         self.check_basic_response(state)
         self.assert_args_and_labels([
             self.fake_tool_path,
@@ -507,6 +530,15 @@ class HookDockerCmdTest(common.RunScriptTest):
             u'container_name=web',
             u'managed_by=docker-cmd',
         ], state[10]['args'])
+        self.assertEqual([
+            self.fake_tool_path,
+            'inspect',
+            '--type',
+            'container',
+            '--format',
+            'exists',
+            'web-ls'
+        ], state[11]['args'])
         self.assertEqual([
             self.fake_tool_path,
             u'ps',
@@ -517,14 +549,14 @@ class HookDockerCmdTest(common.RunScriptTest):
             u'label=config_id=abc123',
             u'--format',
             u'{{.Names}}',
-        ], state[11]['args'])
+        ], state[12]['args'])
         self.assertEqual([
             self.fake_tool_path,
             u'exec',
             u'web',
             u'/bin/ls',
             u'-l'
-        ], state[12]['args'])
+        ], state[13]['args'])
 
     def test_hook_unique_names(self):
         self.env.update({
@@ -571,7 +603,7 @@ class HookDockerCmdTest(common.RunScriptTest):
 
         self.assertEqual(0, returncode, stderr)
 
-        state = list(self.json_from_files(self.test_state_path, 15))
+        state = list(self.json_from_files(self.test_state_path, 17))
         dd = []
         for i in state:
             dd.append(i['args'])
@@ -651,6 +683,24 @@ class HookDockerCmdTest(common.RunScriptTest):
             u'container_name=web',
             u'managed_by=docker-cmd',
         ], state[12]['args'])
+        self.assertEqual([
+            self.fake_tool_path,
+            'inspect',
+            '--type',
+            'container',
+            '--format',
+            'exists',
+            'web-ls'
+        ], state[13]['args'])
+        self.assertEqual([
+            self.fake_tool_path,
+            'inspect',
+            '--type',
+            'container',
+            '--format',
+            'exists',
+            state[14]['args'][6]
+        ], state[14]['args'])
         self.assertEqual([
             self.fake_tool_path,
             u'ps',
@@ -661,14 +711,14 @@ class HookDockerCmdTest(common.RunScriptTest):
             u'label=config_id=abc123',
             u'--format',
             u'{{.Names}}',
-        ], state[13]['args'])
+        ], state[15]['args'])
         self.assertEqual([
             self.fake_tool_path,
             u'exec',
-            u'web-asdf1234',
+            u'web',
             u'/bin/ls',
             u'-l'
-        ], state[14]['args'])
+        ], state[16]['args'])
 
     def test_cleanup_deleted(self):
         self.env.update({