public async Task Test_Reminders_Basic_StopByRef() { IReminderTestGrain2 grain = this.GrainFactory.GetGrain <IReminderTestGrain2>(Guid.NewGuid()); IGrainReminder r1 = await grain.StartReminder(DR); IGrainReminder r2 = await grain.StartReminder(DR); try { // First handle should now be out of date once the seconf handle to the same reminder was obtained await grain.StopReminder(r1); Assert.True(false, "Removed reminder1, which shouldn't be possible."); } catch (Exception exc) { log.Info("Couldn't remove {0}, as expected. Exception received = {1}", r1, exc); } await grain.StopReminder(r2); log.Info("Removed reminder2 successfully"); // trying to see if readreminder works IGrainReminder o1 = await grain.StartReminder(DR); IGrainReminder o2 = await grain.StartReminder(DR); IGrainReminder o3 = await grain.StartReminder(DR); IGrainReminder o4 = await grain.StartReminder(DR); IGrainReminder r = await grain.GetReminderObject(DR); await grain.StopReminder(r); log.Info("Removed got reminder successfully"); }
protected async Task <bool> PerGrainFailureTest(IReminderTestGrain2 grain) { TimeSpan period = await grain.GetReminderPeriod(DR); await grain.StartReminder(DR); TimeSpan sleepFor = period.Multiply(failCheckAfter) + LEEWAY; // giving some leeway Thread.Sleep(sleepFor); long last = await grain.GetCounter(DR); AssertIsInRange(last, failCheckAfter - 1, failCheckAfter + 1, grain, DR, sleepFor); await grain.StopReminder(DR); sleepFor = period.Multiply(2) + LEEWAY; // giving some leeway Thread.Sleep(sleepFor); long curr = await grain.GetCounter(DR); AssertIsInRange(curr, last, last + 1, grain, DR, sleepFor); return(true); }
public async Task Rem_Azure_Basic() { // start up a test grain and get the period that it's programmed to use. IReminderTestGrain2 grain = GrainClient.GrainFactory.GetGrain <IReminderTestGrain2>(Guid.NewGuid()); TimeSpan period = await grain.GetReminderPeriod(DR); // start up the 'DR' reminder and wait for two ticks to pass. await grain.StartReminder(DR); Thread.Sleep(period.Multiply(2) + LEEWAY); // giving some leeway // retrieve the value of the counter-- it should match the sequence number which is the number of periods // we've waited. long last = await grain.GetCounter(DR); Assert.Equal(2, last); // stop the timer and wait for a whole period. await grain.StopReminder(DR); Thread.Sleep(period.Multiply(1) + LEEWAY); // giving some leeway // the counter should not have changed. long curr = await grain.GetCounter(DR); Assert.Equal(last, curr); }
protected async Task <bool> PerGrainMultiReminderTest(IReminderTestGrain2 g) { TimeSpan period = await g.GetReminderPeriod(DR); this.log.Info("PerGrainMultiReminderTest Period={0} Grain={1}", period, g); // Each reminder is started 2 periods after the previous reminder // once all reminders have been started, stop them every 2 periods // except the default reminder, which we stop after 3 periods instead // just to test and break the symmetry // Start Default Reminder await g.StartReminder(DR); TimeSpan sleepFor = period.Multiply(2) + LEEWAY; // giving some leeway Thread.Sleep(sleepFor); long last = await g.GetCounter(DR); AssertIsInRange(last, 1, 2, g, DR, sleepFor); // Start R1 await g.StartReminder(R1); Thread.Sleep(sleepFor); last = await g.GetCounter(R1); AssertIsInRange(last, 1, 2, g, R1, sleepFor); // Start R2 await g.StartReminder(R2); Thread.Sleep(sleepFor); last = await g.GetCounter(R1); AssertIsInRange(last, 3, 4, g, R1, sleepFor); last = await g.GetCounter(R2); AssertIsInRange(last, 1, 2, g, R2, sleepFor); last = await g.GetCounter(DR); AssertIsInRange(last, 5, 6, g, DR, sleepFor); // Stop R1 await g.StopReminder(R1); Thread.Sleep(sleepFor); last = await g.GetCounter(R1); AssertIsInRange(last, 3, 4, g, R1, sleepFor); last = await g.GetCounter(R2); AssertIsInRange(last, 3, 4, g, R2, sleepFor); last = await g.GetCounter(DR); AssertIsInRange(last, 7, 8, g, DR, sleepFor); // Stop R2 await g.StopReminder(R2); sleepFor = period.Multiply(3) + LEEWAY; // giving some leeway Thread.Sleep(sleepFor); last = await g.GetCounter(R1); AssertIsInRange(last, 3, 4, g, R1, sleepFor); last = await g.GetCounter(R2); AssertIsInRange(last, 3, 4, g, R2, sleepFor); last = await g.GetCounter(DR); AssertIsInRange(last, 10, 12, g, DR, sleepFor); // Stop Default reminder await g.StopReminder(DR); sleepFor = period.Multiply(1) + LEEWAY; // giving some leeway Thread.Sleep(sleepFor); last = await g.GetCounter(R1); AssertIsInRange(last, 3, 4, g, R1, sleepFor); last = await g.GetCounter(R2); AssertIsInRange(last, 3, 4, g, R2, sleepFor); last = await g.GetCounter(DR); AssertIsInRange(last, 10, 12, g, DR, sleepFor); return(true); }
protected async Task<bool> PerGrainMultiReminderTest(IReminderTestGrain2 g) { TimeSpan period = await g.GetReminderPeriod(DR); logger.Info("PerGrainMultiReminderTest Period={0} Grain={1}", period, g); // Each reminder is started 2 periods after the previous reminder // once all reminders have been started, stop them every 2 periods // except the default reminder, which we stop after 3 periods instead // just to test and break the symmetry // Start Default Reminder await g.StartReminder(DR); TimeSpan sleepFor = period.Multiply(2) + LEEWAY; // giving some leeway Thread.Sleep(sleepFor); long last = await g.GetCounter(DR); AssertIsInRange(last, 1, 2, g, DR, sleepFor); // Start R1 await g.StartReminder(R1); Thread.Sleep(sleepFor); last = await g.GetCounter(R1); AssertIsInRange(last, 1, 2, g, R1, sleepFor); // Start R2 await g.StartReminder(R2); Thread.Sleep(sleepFor); last = await g.GetCounter(R1); AssertIsInRange(last, 3, 4, g, R1, sleepFor); last = await g.GetCounter(R2); AssertIsInRange(last, 1, 2, g, R2, sleepFor); last = await g.GetCounter(DR); AssertIsInRange(last, 5, 6, g, DR, sleepFor); // Stop R1 await g.StopReminder(R1); Thread.Sleep(sleepFor); last = await g.GetCounter(R1); AssertIsInRange(last, 3, 4, g, R1, sleepFor); last = await g.GetCounter(R2); AssertIsInRange(last, 3, 4, g, R2, sleepFor); last = await g.GetCounter(DR); AssertIsInRange(last, 7, 8, g, DR, sleepFor); // Stop R2 await g.StopReminder(R2); sleepFor = period.Multiply(3) + LEEWAY; // giving some leeway Thread.Sleep(sleepFor); last = await g.GetCounter(R1); AssertIsInRange(last, 3, 4, g, R1, sleepFor); last = await g.GetCounter(R2); AssertIsInRange(last, 3, 4, g, R2, sleepFor); last = await g.GetCounter(DR); AssertIsInRange(last, 10, 12, g, DR, sleepFor); // Stop Default reminder await g.StopReminder(DR); sleepFor = period.Multiply(1) + LEEWAY; // giving some leeway Thread.Sleep(sleepFor); last = await g.GetCounter(R1); AssertIsInRange(last, 3, 4, g, R1, sleepFor); last = await g.GetCounter(R2); AssertIsInRange(last, 3, 4, g, R2, sleepFor); last = await g.GetCounter(DR); AssertIsInRange(last, 10, 12, g, DR, sleepFor); return true; }
protected async Task<bool> PerGrainFailureTest(IReminderTestGrain2 grain) { TimeSpan period = await grain.GetReminderPeriod(DR); logger.Info("PerGrainFailureTest Period={0} Grain={1}", period, grain); await grain.StartReminder(DR); TimeSpan sleepFor = period.Multiply(failCheckAfter) + LEEWAY; // giving some leeway Thread.Sleep(sleepFor); long last = await grain.GetCounter(DR); AssertIsInRange(last, failCheckAfter - 1, failCheckAfter + 1, grain, DR, sleepFor); await grain.StopReminder(DR); sleepFor = period.Multiply(2) + LEEWAY; // giving some leeway Thread.Sleep(sleepFor); long curr = await grain.GetCounter(DR); AssertIsInRange(curr, last, last + 1, grain, DR, sleepFor); return true; }