public async Task ValidateControllableGeneratedStreams() { try { var generatorConfig = new SimpleGeneratorConfig { StreamNamespace = Fixture.StreamNamespace, EventsInStream = 100 }; var mgmt = GrainClient.GrainFactory.GetGrain <IManagementGrain>(0); object[] results = await mgmt.SendControlCommandToProvider(Fixture.StreamProviderTypeName, Fixture.StreamProviderName, (int)StreamGeneratorCommand.Configure, generatorConfig); Assert.AreEqual(2, results.Length, "expected responses"); bool[] bResults = results.Cast <bool>().ToArray(); foreach (var result in bResults) { Assert.AreEqual(true, result, "Control command result"); } await TestingUtils.WaitUntilAsync(assertIsTrue => CheckCounters(generatorConfig, assertIsTrue), Timeout); } finally { var reporter = GrainClient.GrainFactory.GetGrain <IGeneratedEventReporterGrain>(GeneratedStreamTestConstants.ReporterId); reporter.Reset().Ignore(); } }
public async Task Recoverable100EventStreamsWith1NonTransientError(string streamNamespace) { try { var generatorConfig = new SimpleGeneratorConfig { StreamNamespace = streamNamespace, EventsInStream = 100 }; var mgmt = grainFactory.GetGrain <IManagementGrain>(0); object[] results = await mgmt.SendControlCommandToProvider(streamProviderTypeName, streamProviderName, (int)StreamGeneratorCommand.Configure, generatorConfig); Assert.AreEqual(2, results.Length, "expected responses"); bool[] bResults = results.Cast <bool>().ToArray(); foreach (var result in bResults) { Assert.AreEqual(true, result, "Control command result"); } // should eventually skip the faulted event, so event count should be one (faulted event) less that number of events in stream. await TestingUtils.WaitUntilAsync(assertIsTrue => CheckCounters(generatorConfig, generatorConfig.EventsInStream - 1, assertIsTrue), TimeSpan.FromSeconds(90)); } finally { var reporter = GrainClient.GrainFactory.GetGrain <IGeneratedEventReporterGrain>(GeneratedStreamTestConstants.ReporterId); reporter.Reset().Ignore(); } }
private async Task GenerateEvents(string streamNamespace, int streamCount, int eventsInStream) { var generatorConfig = new SimpleGeneratorConfig { StreamNamespace = streamNamespace, EventsInStream = eventsInStream }; var mgmt = this.fixture.GrainFactory.GetGrain <IManagementGrain>(0); object[] results = await mgmt.SendControlCommandToProvider(StreamProviderTypeName, Fixture.StreamProviderName, (int)StreamGeneratorCommand.Configure, generatorConfig); Assert.Equal(2, results.Length); bool[] bResults = results.Cast <bool>().ToArray(); foreach (var result in bResults) { Assert.True(result, "Control command result"); } }
private async Task<bool> CheckCounters(SimpleGeneratorConfig generatorConfig, bool assertIsTrue) { var reporter = this.fixture.GrainFactory.GetGrain<IGeneratedEventReporterGrain>(GeneratedStreamTestConstants.ReporterId); var report = await reporter.GetReport(GeneratedStreamTestConstants.StreamProviderName, GeneratedEventCollectorGrain.StreamNamespace); if (assertIsTrue) { // one stream per queue Assert.Equal(Fixture.AdapterConfig.TotalQueueCount, report.Count); // stream count foreach (int eventsPerStream in report.Values) { Assert.Equal(generatorConfig.EventsInStream, eventsPerStream); } } else if (Fixture.AdapterConfig.TotalQueueCount != report.Count || report.Values.Any(count => count != generatorConfig.EventsInStream)) { return false; } return true; }
private async Task <bool> CheckCounters(SimpleGeneratorConfig generatorConfig, bool assertIsTrue) { var reporter = GrainClient.GrainFactory.GetGrain <IGeneratedEventReporterGrain>(GeneratedStreamTestConstants.ReporterId); var report = await reporter.GetReport(GeneratedStreamTestConstants.StreamProviderName, GeneratedEventCollectorGrain.StreamNamespace); if (assertIsTrue) { // one stream per queue Assert.AreEqual(ControllableStreamGeneratorProviderTestsFixture.AdapterConfig.TotalQueueCount, report.Count, "Stream count"); foreach (int eventsPerStream in report.Values) { Assert.AreEqual(generatorConfig.EventsInStream, eventsPerStream, "Events per stream"); } } else if (ControllableStreamGeneratorProviderTestsFixture.AdapterConfig.TotalQueueCount != report.Count || report.Values.Any(count => count != generatorConfig.EventsInStream)) { return(false); } return(true); }