public async Task CancelsStartWhenAnyThrows() { var service1 = Substitute.For <IBackgroundService>(); service1.StartAsync(Arg.Any <CancellationToken>()) .Returns( async ci => { await Task.Delay(500); ci.ArgAt <CancellationToken>(0) .IsCancellationRequested.Should() .BeTrue(); }); var service2 = Substitute.For <IBackgroundService>(); service2.StartAsync(Arg.Any <CancellationToken>()) .Throws(new InvalidOperationException()); var host = new BackgroundServiceHost( new[] { service1, service2 }, Substitute.For <ILogger <BackgroundServiceHost> >()); await Assert.ThrowsAsync <InvalidOperationException>( async() => await host.StartAsync(CancellationToken.None)); }
public async Task StartThrowsForAny() { var service1 = Substitute.For <IBackgroundService>(); service1.StartAsync(Arg.Any <CancellationToken>()) .Throws(new InvalidOperationException()); var service2 = Substitute.For <IBackgroundService>(); var host = new BackgroundServiceHost( new[] { service1, service2 }, Substitute.For <ILogger <BackgroundServiceHost> >()); await Assert.ThrowsAsync <InvalidOperationException>( async() => await host.StartAsync(CancellationToken.None)); }
public async Task StartsAll() { var service1 = Substitute.For <IBackgroundService>(); var service2 = Substitute.For <IBackgroundService>(); var host = new BackgroundServiceHost( new[] { service1, service2 }, Substitute.For <ILogger <BackgroundServiceHost> >()); await host.StartAsync(CancellationToken.None); await service1.Received(1) .StartAsync(Arg.Any <CancellationToken>()); await service2.Received(1) .StartAsync(Arg.Any <CancellationToken>()); }
public async Task StopsRunningWhenAnyThrows() { var service1 = Substitute.For <IBackgroundService>(); var service2 = Substitute.For <IBackgroundService>(); service2.StartAsync(Arg.Any <CancellationToken>()) .Returns( async ci => { await Task.Delay(500); throw new InvalidOperationException(); }); var host = new BackgroundServiceHost( new[] { service1, service2 }, Substitute.For <ILogger <BackgroundServiceHost> >()); await Assert.ThrowsAsync <InvalidOperationException>( async() => await host.StartAsync(CancellationToken.None)); await service1.Received(1) .StopAsync(Arg.Any <CancellationToken>()); }