Wait for metadata actually set to server

It is possible that at the time when deployment set its
resource_id metadata will not actually be set at the server. Wait until
metadata actually set at the server. This patch makes test more stable.

Change-Id: Iba8c1c47b0cb78798a1c46a3daef5cb3cc3cc9a2
diff --git a/functional/test_software_config.py b/functional/test_software_config.py
index 019e6c9..af7d671 100644
--- a/functional/test_software_config.py
+++ b/functional/test_software_config.py
@@ -83,7 +83,7 @@
             2,
             5,
             deploy_count)
-        deploy_count = self.deploy_many_configs(
+        self.deploy_many_configs(
             stack_identifier,
             server,
             config_stacks,
@@ -95,24 +95,15 @@
         for config_stack in config_stacks:
             self._wait_for_stack_status(config_stack, 'CREATE_COMPLETE')
 
-    def deploy_many_configs(self, stack_identifier, server, config_stacks,
+    def deploy_many_configs(self, stack, server, config_stacks,
                             stack_count, deploys_per_stack,
                             deploy_count_start):
         for a in range(stack_count):
             config_stacks.append(
                 self.deploy_config(server, deploys_per_stack))
 
-        for config_stack in config_stacks:
-            self.wait_for_deploy_physical_id(config_stack)
-
         new_count = deploy_count_start + stack_count * deploys_per_stack
-        server_metadata = self.client.resources.metadata(
-            stack_identifier, 'server')
-        self.assertEqual(
-            new_count,
-            len(server_metadata['deployments']),
-            '%s stacks with %s deployments' % (stack_count, deploys_per_stack)
-        )
+        self.wait_for_deploy_metadata_set(stack, new_count)
         return new_count
 
     def deploy_config(self, server, deploy_count):
@@ -128,19 +119,16 @@
             enable_cleanup=self.enable_cleanup,
             expected_status=None)
 
-    def wait_for_deploy_physical_id(self, stack):
+    def wait_for_deploy_metadata_set(self, stack, deploy_count):
         build_timeout = self.conf.build_timeout
         build_interval = self.conf.build_interval
 
         start = timeutils.utcnow()
         while timeutils.delta_seconds(start,
                                       timeutils.utcnow()) < build_timeout:
-            created = True
-            for res in self.client.resources.list(stack, nested_depth='2'):
-                if not res.physical_resource_id:
-                    created = False
-                    break
-            if created:
+            server_metadata = self.client.resources.metadata(
+                stack, 'server')
+            if len(server_metadata['deployments']) == deploy_count:
                 return
             time.sleep(build_interval)