public async Task Rem_Azure_GT_Basic() { log.Info(TestContext.TestName); IReminderTestGrain2 g1 = GrainClient.GrainFactory.GetGrain <IReminderTestGrain2>(Guid.NewGuid()); IReminderTestCopyGrain g2 = GrainClient.GrainFactory.GetGrain <IReminderTestCopyGrain>(Guid.NewGuid()); TimeSpan period = await g1.GetReminderPeriod(DR); // using same period await g1.StartReminder(DR); Thread.Sleep(period.Multiply(2) + LEEWAY); // giving some leeway await g2.StartReminder(DR); Thread.Sleep(period.Multiply(2) + LEEWAY); // giving some leeway long last1 = await g1.GetCounter(DR); Assert.AreEqual(4, last1, string.Format("{0} Grain fault", Time())); long last2 = await g2.GetCounter(DR); Assert.AreEqual(2, last2, string.Format("{0} CopyGrain fault", Time())); await g1.StopReminder(DR); Thread.Sleep(period.Multiply(2) + LEEWAY); // giving some leeway await g2.StopReminder(DR); long curr1 = await g1.GetCounter(DR); Assert.AreEqual(last1, curr1, string.Format("{0} Grain fault", Time())); long curr2 = await g2.GetCounter(DR); Assert.AreEqual(4, curr2, string.Format("{0} CopyGrain fault", Time())); }
public async Task Rem_Azure_GT_Basic() { IReminderTestGrain2 g1 = GrainClient.GrainFactory.GetGrain <IReminderTestGrain2>(Guid.NewGuid()); IReminderTestCopyGrain g2 = GrainClient.GrainFactory.GetGrain <IReminderTestCopyGrain>(Guid.NewGuid()); TimeSpan period = await g1.GetReminderPeriod(DR); // using same period await g1.StartReminder(DR); Thread.Sleep(period.Multiply(2) + LEEWAY); // giving some leeway await g2.StartReminder(DR); Thread.Sleep(period.Multiply(2) + LEEWAY); // giving some leeway long last1 = await g1.GetCounter(DR); Assert.Equal(4, last1); long last2 = await g2.GetCounter(DR); Assert.Equal(2, last2); // CopyGrain fault await g1.StopReminder(DR); Thread.Sleep(period.Multiply(2) + LEEWAY); // giving some leeway await g2.StopReminder(DR); long curr1 = await g1.GetCounter(DR); Assert.Equal(last1, curr1); long curr2 = await g2.GetCounter(DR); Assert.Equal(4, curr2); // CopyGrain fault }
public async Task Rem_Azure_GT_1F1J_MultiGrain() { List <SiloHandle> silos = await this.HostedCluster.StartAdditionalSilosAsync(1); await this.HostedCluster.WaitForLivenessToStabilizeAsync(); IReminderTestGrain2 g1 = this.GrainFactory.GetGrain <IReminderTestGrain2>(Guid.NewGuid()); IReminderTestGrain2 g2 = this.GrainFactory.GetGrain <IReminderTestGrain2>(Guid.NewGuid()); IReminderTestCopyGrain g3 = this.GrainFactory.GetGrain <IReminderTestCopyGrain>(Guid.NewGuid()); IReminderTestCopyGrain g4 = this.GrainFactory.GetGrain <IReminderTestCopyGrain>(Guid.NewGuid()); TimeSpan period = await g1.GetReminderPeriod(DR); Task[] tasks = { Task.Run(() => PerGrainFailureTest(g1)), Task.Run(() => PerGrainFailureTest(g2)), Task.Run(() => PerCopyGrainFailureTest(g3)), Task.Run(() => PerCopyGrainFailureTest(g4)), }; Thread.Sleep(period.Multiply(failAfter)); var siloToKill = silos[random.Next(silos.Count)]; // stop a silo and join a new one in parallel log.Info("Stopping a silo and joining a silo"); Task t1 = Task.Run(async() => await this.HostedCluster.StopSiloAsync(siloToKill)); Task t2 = Task.Run(async() => await this.HostedCluster.StartAdditionalSilosAsync(1)); await Task.WhenAll(new[] { t1, t2 }).WithTimeout(ENDWAIT); await Task.WhenAll(tasks).WithTimeout(ENDWAIT); // Block until all tasks complete. }
public async Task Rem_Azure_GT_1F1J_MultiGrain() { log.Info(TestContext.TestName); List <SiloHandle> silos = StartAdditionalSilos(1); await WaitForLivenessToStabilizeAsync(); IReminderTestGrain2 g1 = GrainClient.GrainFactory.GetGrain <IReminderTestGrain2>(Guid.NewGuid()); IReminderTestGrain2 g2 = GrainClient.GrainFactory.GetGrain <IReminderTestGrain2>(Guid.NewGuid()); IReminderTestCopyGrain g3 = GrainClient.GrainFactory.GetGrain <IReminderTestCopyGrain>(Guid.NewGuid()); IReminderTestCopyGrain g4 = GrainClient.GrainFactory.GetGrain <IReminderTestCopyGrain>(Guid.NewGuid()); TimeSpan period = await g1.GetReminderPeriod(DR); Task <bool>[] tasks = { Task.Run(async() => { await PerGrainFailureTest(g1); return(true); }), Task.Run(async() => { await PerGrainFailureTest(g2); return(true); }), Task.Run(async() => { await PerCopyGrainFailureTest(g3); return(true); }), Task.Run(async() => { await PerCopyGrainFailureTest(g4); return(true); }) }; Thread.Sleep(period.Multiply(failAfter)); var siloToKill = silos[random.Next(silos.Count)]; // stop a silo and join a new one in parallel log.Info("Stopping a silo and joining a silo"); Task <bool> t1 = Task.Run(() => { StopSilo(siloToKill); return(true); }); Task <bool> t2 = Task.Run(() => { StartAdditionalSilos(1); return(true); }); await Task.WhenAll(new[] { t1, t2 }).WithTimeout(ENDWAIT); await Task.WhenAll(tasks).WithTimeout(ENDWAIT); // Block until all tasks complete. }
protected async Task <bool> PerCopyGrainFailureTest(IReminderTestCopyGrain grain) { TimeSpan period = await grain.GetReminderPeriod(DR); await grain.StartReminder(DR); Thread.Sleep(period.Multiply(failCheckAfter) + LEEWAY); // giving some leeway long last = await grain.GetCounter(DR); Assert.AreEqual(failCheckAfter, last); // "{0} CopyGrain {1} Reminder {2}" // Time(), grain.GetPrimaryKey(), DR); await grain.StopReminder(DR); Thread.Sleep(period.Multiply(2) + LEEWAY); // giving some leeway long curr = await grain.GetCounter(DR); Assert.AreEqual(last, curr); // "{0} CopyGrain {1} Reminder {2}", Time(), grain.GetPrimaryKey(), DR); return(true); }
protected async Task <bool> PerCopyGrainFailureTest(IReminderTestCopyGrain grain) { TimeSpan period = await grain.GetReminderPeriod(DR); this.log.LogInformation("PerCopyGrainFailureTest Period={Period} Grain={Grain}", period, grain); await grain.StartReminder(DR); await Task.Delay(period.Multiply(failCheckAfter) + LEEWAY); // giving some leeway long last = await grain.GetCounter(DR); Assert.Equal(failCheckAfter, last); // "{0} CopyGrain {1} Reminder {2}" // Time(), grain.GetPrimaryKey(), DR); await grain.StopReminder(DR); await Task.Delay(period.Multiply(2) + LEEWAY); // giving some leeway long curr = await grain.GetCounter(DR); Assert.Equal(last, curr); // "{0} CopyGrain {1} Reminder {2}", Time(), grain.GetPrimaryKey(), DR); return(true); }
protected async Task<bool> PerCopyGrainFailureTest(IReminderTestCopyGrain grain) { TimeSpan period = await grain.GetReminderPeriod(DR); logger.Info("PerCopyGrainFailureTest Period={0} Grain={1}", period, grain); await grain.StartReminder(DR); Thread.Sleep(period.Multiply(failCheckAfter) + LEEWAY); // giving some leeway long last = await grain.GetCounter(DR); Assert.AreEqual(failCheckAfter, last, "{0} CopyGrain {1} Reminder {2}", Time(), grain.GetPrimaryKey(), DR); await grain.StopReminder(DR); Thread.Sleep(period.Multiply(2) + LEEWAY); // giving some leeway long curr = await grain.GetCounter(DR); Assert.AreEqual(last, curr, "{0} CopyGrain {1} Reminder {2}", Time(), grain.GetPrimaryKey(), DR); return true; }