fix async delay for initializer, and intermittent failing test
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/WorkflowYamlTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/WorkflowYamlTest.java
index f69138a..f5d93fb 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/WorkflowYamlTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/WorkflowYamlTest.java
@@ -1000,9 +1000,6 @@
     }
 
     @Test
-    // non-deterministic failure seen once:
-    // testInitializerDelay:1031 failed succeeds-eventually, 75 attempts, 30000ms elapsed:
-    // AssertionError: entity=BasicEntityImpl{id=v65dmc7x81}; attribute=Sensor: x (java.lang.Integer) expected [6] but found [3]
     public void testInitializerDelay() throws Exception {
         Entity app = createAndStartApplication(
                 "services:",
@@ -1020,6 +1017,7 @@
                 "    brooklyn.config:",
                 "      name: pre-init",
                 "      steps:",
+                //"        - sleep 1s",   // to check that 'async' really does always wait
                 "        - set-sensor integer x = 3");
         waitForApplicationTasks(app);
         Entity entity = Iterables.getOnlyElement(app.getChildren());
diff --git a/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowInitializer.java b/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowInitializer.java
index 5c1c82b..0e80227 100644
--- a/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowInitializer.java
+++ b/core/src/main/java/org/apache/brooklyn/core/workflow/WorkflowInitializer.java
@@ -35,6 +35,7 @@
 import org.apache.brooklyn.util.core.task.Tasks;
 import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.guava.Maybe;
+import org.apache.brooklyn.util.repeat.Repeater;
 import org.apache.brooklyn.util.text.Strings;
 import org.apache.brooklyn.util.time.Duration;
 import org.apache.brooklyn.util.time.Time;
@@ -101,6 +102,12 @@
                     if (delayed) {
                         DynamicTasks.queue(Tasks.create("Delaying until " + delaySummary, () -> {
                             ((EntityInternal) entity).getManagementContext().waitForManagementStartupComplete(null);
+                            while (!Entities.isManagedActive(entity)) {
+                                if (!Entities.isManagedActiveOrComingUp(entity)) {
+                                    return;
+                                }
+                                Time.sleep(Repeater.DEFAULT_REAL_QUICK_PERIOD);
+                            }
                             if (delayDuration.isPositive()) Time.sleep(delayDuration);
                         }));
                     }