/// <exception cref="System.Exception"/> /// <exception cref="System.IO.IOException"/> public virtual void TestStartReconfigurationFailureDueToExistingRunningTask() { TestReconfiguration.AsyncReconfigurableDummy dummy = Org.Mockito.Mockito.Spy(new TestReconfiguration.AsyncReconfigurableDummy(conf1)); IList <ReconfigurationUtil.PropertyChange> changes = Lists.NewArrayList(new ReconfigurationUtil.PropertyChange (Prop1, "new1", "old1")); Org.Mockito.Mockito.DoReturn(changes).When(dummy).GetChangedProperties(Matchers.Any <Configuration>(), Matchers.Any <Configuration>()); ReconfigurationTaskStatus status = dummy.GetReconfigurationTaskStatus(); NUnit.Framework.Assert.IsFalse(status.HasTask()); dummy.StartReconfigurationTask(); status = dummy.GetReconfigurationTaskStatus(); Assert.True(status.HasTask()); NUnit.Framework.Assert.IsFalse(status.Stopped()); // An active reconfiguration task is running. try { dummy.StartReconfigurationTask(); NUnit.Framework.Assert.Fail("Expect to throw IOException."); } catch (IOException e) { GenericTestUtils.AssertExceptionContains("Another reconfiguration task is running" , e); } status = dummy.GetReconfigurationTaskStatus(); Assert.True(status.HasTask()); NUnit.Framework.Assert.IsFalse(status.Stopped()); dummy.latch.CountDown(); WaitAsyncReconfigureTaskFinish(dummy); status = dummy.GetReconfigurationTaskStatus(); Assert.True(status.HasTask()); Assert.True(status.Stopped()); // The first task has finished. dummy.StartReconfigurationTask(); WaitAsyncReconfigureTaskFinish(dummy); ReconfigurationTaskStatus status2 = dummy.GetReconfigurationTaskStatus(); Assert.True(status2.GetStartTime() >= status.GetEndTime()); dummy.ShutdownReconfigurationTask(); try { dummy.StartReconfigurationTask(); NUnit.Framework.Assert.Fail("Expect to throw IOException"); } catch (IOException e) { GenericTestUtils.AssertExceptionContains("The server is stopped", e); } }
/// <exception cref="System.Exception"/> private static void WaitAsyncReconfigureTaskFinish(ReconfigurableBase rb) { ReconfigurationTaskStatus status = null; int count = 20; while (count > 0) { status = rb.GetReconfigurationTaskStatus(); if (status.Stopped()) { break; } count--; Thread.Sleep(500); } System.Diagnostics.Debug.Assert((status.Stopped())); }