public async Task AddEventHandler_SingleHandlerWithMultipleInterfaces_NotifiesSingleInstance() { var sourceStartedTracker = new TestEventTracker <SourceStartedEvent>(); var sourceStoppedTracker = new TestEventTracker <SourceStoppedEvent>(); var serviceProvider = new TestServiceProvider( configureServices: services => services .AddSingleton(sourceStartedTracker) .AddSingleton(sourceStoppedTracker), configureDaisy: daisy => daisy .AddEventHandlerSingleton <SourceEventHandler>() ); var chainBuilder = new TestChain <Signal> { ConfigureSourcesAction = sources => sources .Add <SignalTestSource>("test") }; var chain = await chainBuilder.BuildAsync(serviceProvider); chain.StartAllSources(); await chain.Sources.WaitForCompletionAsync(); Assert.Single(sourceStartedTracker.TrackedHandlerIds); Assert.Single(sourceStoppedTracker.TrackedHandlerIds); Assert.Equal(sourceStoppedTracker.TrackedHandlerIds, sourceStoppedTracker.TrackedHandlerIds); }
public SourceEventHandler( TestEventTracker <SourceStartedEvent> sourceStartedTracker, TestEventTracker <SourceStoppedEvent> sourceStoppedTracker) { _sourceStartedTracker = sourceStartedTracker; _sourceStoppedTracker = sourceStoppedTracker; }
public async Task PublishEvent_MultipleHandlersWithSingleInterface_NotifiesAllHandlers() { var eventTracker = new TestEventTracker <SourceStartedEvent>(); var serviceProvider = new TestServiceProvider( configureServices: services => services .AddSingleton(eventTracker), configureDaisy: daisy => daisy .AddEventHandlerSingleton <TestEventTrackerHandler <SourceStartedEvent> >() .AddEventHandlerSingleton <SourceStartedEventTrackerHandler>() ); var chainBuilder = new TestChain <Signal> { ConfigureSourcesAction = sources => sources .Add <SignalTestSource>("test") }; var chain = await chainBuilder.BuildAsync(serviceProvider); chain.StartAllSources(); await chain.Sources.WaitForCompletionAsync(); Assert.Equal(2, eventTracker.TrackedHandlerIds.Count); Assert.Equal(2, eventTracker.TrackedEvents.Count); }
public async Task SourceException_NotifiesSourceStoppedHandler() { var eventTracker = new TestEventTracker <SourceStoppedEvent>(); var serviceProvider = new TestServiceProvider( configureServices: services => services .AddSingleton(eventTracker), configureDaisy: daisy => daisy .AddEventHandlerSingleton <TestEventTrackerHandler <SourceStoppedEvent> >() ); var chainBuilder = new TestChain <Signal> { ConfigureSourcesAction = sources => sources .Add <ThrowingTestSource <Signal> >("test") }; var chain = await chainBuilder.BuildAsync(serviceProvider); chain.StartAllSources(); await chain.Sources.WaitForCompletionAsync(); var source = chain.Sources[0]; Assert.Single(eventTracker.TrackedEvents, e => e.ChainName == chain.Name && e.SourceIndex == source.Index && e.SourceName == source.Name && e.Result == SourceResult.Faulted && e.SourceExecutionId != default && e.Exception is TestException); }
public async Task SourceCanceled_SourceStoppedHandler() { var eventTracker = new TestEventTracker <SourceStoppedEvent>(); var serviceProvider = new TestServiceProvider( configureServices: services => services .AddSingleton(eventTracker), configureDaisy: daisy => daisy .AddEventHandlerSingleton <TestEventTrackerHandler <SourceStoppedEvent> >() ); var chainBuilder = new TestChain <Signal> { ConfigureSourcesAction = sources => sources .Add <InfiniteDelaySource>("test") }; var chain = await chainBuilder.BuildAsync(serviceProvider); chain.StartAllSources(); await chain.StopAllSourcesAsync(); var source = chain.Sources[0]; Assert.Single(eventTracker.TrackedEvents, e => e.ChainName == chain.Name && e.SourceIndex == source.Index && e.SourceName == source.Name && e.SourceExecutionId != default && e.Result == SourceResult.Canceled); }
public async Task ChainExecutionStart_NotifiesHandler() { var eventTracker = new TestEventTracker <ChainExecutionStartedEvent>(); var serviceProvider = new TestServiceProvider( configureServices: services => services .AddSingleton(eventTracker), configureDaisy: daisy => daisy .AddEventHandlerSingleton <TestEventTrackerHandler <ChainExecutionStartedEvent> >() ); var chainBuilder = new TestChain <Signal> { ConfigureRootAction = root => root .Link <NoopLink <Signal>, Signal>() }; await chainBuilder.BuildAndExecuteAsync(Signal.Static, default, serviceProvider);
public SourceStartedEventTrackerHandler(TestEventTracker <SourceStartedEvent> eventTracker) : base(eventTracker) { }
public TestEventTrackerHandler(TestEventTracker <T> eventTracker) { _eventTracker = eventTracker; }