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(); } }
public void Configure(IServiceProvider serviceProvider, IStreamGeneratorConfig generatorConfig) { var cfg = generatorConfig as SimpleGeneratorConfig; if (cfg == null) { throw new ArgumentOutOfRangeException("generatorConfig"); } config = cfg; sequenceId = 0; streamGuid = Guid.NewGuid(); }
private async Task GenerateEvents(string streamNamespace, int streamCount, int eventsInStream) { var generatorConfig = new SimpleGeneratorConfig { StreamNamespace = streamNamespace, EventsInStream = eventsInStream }; var mgmt = GrainClient.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"); } }
private async Task<bool> CheckCounters(SimpleGeneratorConfig generatorConfig, bool assertIsTrue) { var reporter = GrainClient.GrainFactory.GetGrain<IGeneratedEventReporterGrain>(GeneratedEventCollectorGrain.ReporterId); var report = await reporter.GetReport(GeneratedEventCollectorGrain.StreamProviderName, GeneratedEventCollectorGrain.StreamNamespace); if (assertIsTrue) { // one stream per queue Assert.AreEqual(AdapterConfig.TotalQueueCount, report.Count, "Stream count"); foreach (int eventsPerStream in report.Values) { Assert.AreEqual(generatorConfig.EventsInStream, eventsPerStream, "Events per stream"); } } else if (AdapterConfig.TotalQueueCount != report.Count || report.Values.Any(count => count != generatorConfig.EventsInStream)) { return false; } return true; }
public async Task ValidateControllableGeneratedStreams() { try { var generatorConfig = new SimpleGeneratorConfig { StreamNamespace = StreamNamespace, EventsInStream = 100 }; var mgmt = GrainClient.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"); } await TestingUtils.WaitUntilAsync(assertIsTrue => CheckCounters(generatorConfig, assertIsTrue), Timeout); } finally { var reporter = GrainClient.GrainFactory.GetGrain<IGeneratedEventReporterGrain>(GeneratedEventCollectorGrain.ReporterId); reporter.Reset().Ignore(); } }