private void SoftTransientFailures(string name, EHErrorLocation location) { EventHubsException injectee = new EventHubsException(true, "ErrorInjector"); OnceEHErrorInjector injector = new OnceEHErrorInjector(location, injectee); NoFailures("SoftTransient" + name + "Failure", injector); }
private void GeneralStartupFailure(string name, EHErrorLocation location, bool isEventHubsException) { TestState state = new TestState(); state.Initialize(name, 1, 0); ServiceFabricProcessor sfp = new ServiceFabricProcessor( state.ServiceUri, state.ServicePartitionId, state.StateManager, state.StatefulServicePartition, state.Processor, state.ConnectionString, "$Default", state.Options); sfp.MockMode = state.PartitionLister; Exception injectee = isEventHubsException ? new EventHubsException(false, "ErrorInjector") : new Exception("ErrorInjector"); OnceEHErrorInjector injector = new OnceEHErrorInjector(location, injectee); sfp.EventHubClientFactory = new InjectorEventHubClientFactoryMock(1, injector); state.PrepareToRun(); state.StartRun(sfp); // EXPECTED RESULT: RunAsync will throw (Task completed exceptionally) during startup // due to nontransient EventHubsException or other exception type from EH operation. // The Wait call bundles the exception into an AggregateException and rethrows. state.OuterTask.Wait(); try { state.SFPTask.Wait(); } catch (AggregateException ae) { Assert.True(ae.InnerExceptions.Count == 1, $"Unexpected number of errors {ae.InnerExceptions.Count}"); Exception inner = ae.InnerExceptions[0]; if (isEventHubsException) { Assert.True(inner is EventHubsException, $"Unexpected inner exception type {inner.GetType().Name}"); Assert.False(((EventHubsException)inner).IsTransient, "Inner exception is transient"); } else { Assert.True(inner is Exception, $"Unexpected inner exception type {inner.GetType().Name}"); } Assert.Contains("ErrorInjector", inner.Message); } }