public void WaitForDeploymentStatus(DeploymentSlotUri deploymentUri, AzureDeploymentCheckOutcome status)
            {
                Assert.That(WaitCompleted, Is.False);

                Assert.That(deploymentUri, Is.EqualTo(ExpectedDeploymentUri));
                Assert.That(status, Is.EqualTo(CurrentState));

                WaitCompleted = true;
            }
            public void Suspend(DeploymentSlotUri deploymentUri)
            {
                if (CurrentState != AzureDeploymentCheckOutcome.Suspended)
                {
                    Assert.That(WaitCompleted, Is.True);

                    Assert.That(deploymentUri, Is.EqualTo(ExpectedDeploymentUri));
                    Assert.That(CurrentState, Is.EqualTo(AzureDeploymentCheckOutcome.Running));
                }

                WaitCompleted = false;
                CurrentState = AzureDeploymentCheckOutcome.Suspended;
            }
            public bool WaitCompleted = true; // always start with true.

            #endregion Fields

            #region Methods

            public void Create(DeploymentSlotUri deploymentUri, IDeploymentConfiguration configuration)
            {
                Assert.That(WaitCompleted, Is.True);

                LastDeploymentConfiguration = configuration;

                Assert.That(deploymentUri, Is.EqualTo(ExpectedDeploymentUri));
                Assert.That(CurrentState, Is.EqualTo(AzureDeploymentCheckOutcome.NotFound));

                WaitCompleted = false;
                CurrentState = AzureDeploymentCheckOutcome.Running;
            }
            public void Delete(DeploymentSlotUri deploymentUri)
            {
                Assert.That(WaitCompleted, Is.True);

                Assert.That(deploymentUri, Is.EqualTo(ExpectedDeploymentUri));
                Assert.That(CurrentState, Is.EqualTo(AzureDeploymentCheckOutcome.Suspended));

                WaitCompleted = false;
                CurrentState = AzureDeploymentCheckOutcome.NotFound;
                DeletedAtLeastOnce = true;
            }
        public void WaitForDeploymentStatus(DeploymentSlotUri deploymentUri, AzureDeploymentCheckOutcome status)
        {
            FailFast.Unless(
                status != AzureDeploymentCheckOutcome.Failed,
                "can't wait on Failed!");

            var outcome = AzureDeploymentCheckOutcome.None;

            var retry = new RetryLogic(_maxRetries, _sleepIntervalMilliseconds);
            retry.Execute(
                () => outcome = _managementLowLevelApi.CheckDeploymentStatus(deploymentUri),
                ex => RetryOrRethrow.Rethrow,
                () => outcome == status);
        }