public Publisher(IPublisherBehavior publisher, params IBehavior <IPublisherMessageBatching>[] behaviors) { _behavior = AggregateBehavior <IPublisherMessageBatching> .Create(new PublisherBehaviorWrapper(publisher), behaviors); _observers = new HashSet <IObserver <IPublisherMessageBatching> >(); }
public void GivenBehaviors_WhenThrow_ShouldPassException() { var behaviorMock = new Mock <IBehavior <IPublisherMessageBatching> >(); var failureBehaviorMock = new Mock <IBehavior <IPublisherMessageBatching> >(); failureBehaviorMock.Setup(x => x.ExecuteAsync( It.IsAny <IPublisherMessageBatching>(), It.IsAny <Func <IPublisherMessageBatching, CancellationToken, Task> >(), It.IsAny <CancellationToken>())) .Throws <InvalidOperationException>() .Verifiable(); var behavior = AggregateBehavior <IPublisherMessageBatching> .Create(behaviorMock.Object, failureBehaviorMock.Object); behavior.Awaiting(x => x.ExecuteAsync(null, null, CancellationToken.None)) .Should() .Throw <InvalidOperationException>(); behaviorMock.Verify(x => x.ExecuteAsync( It.IsAny <IPublisherMessageBatching>(), It.IsAny <Func <IPublisherMessageBatching, CancellationToken, Task> >(), It.IsAny <CancellationToken>()), Times.Never()); failureBehaviorMock.VerifyAll(); }
public override async Task HandleBasicDeliver(string consumerTag, ulong deliveryTag, bool redelivered, string exchange, string routingKey, IBasicProperties properties, ReadOnlyMemory <byte> body) { var scopeFactory = _provider.GetRequiredService <IServiceScopeFactory>(); using var scope = scopeFactory.CreateScope(); var serializer = scope.ServiceProvider.GetRequiredService <ISubscriberSerializer>(); var message = new SubscriberMessage( _channel, serializer, deliveryTag, new Routing(exchange, routingKey), properties, body); try { var handler = scope.ServiceProvider.GetRequiredService <ISubscriberHandler <TMessage> >(); var behaviors = scope.ServiceProvider.GetServices <IBehavior <ISubscriberMessage> >().ToList(); var behavior = AggregateBehavior <ISubscriberMessage> .Create(new SubscriberBehaviorWrapper <TMessage>(handler), behaviors); await behavior.ExecuteAsync(message, null, _tokenSource.Token); if (!_options.AutoAck) { return; } await message.AckAsync(_tokenSource.Token); } catch { await message.NotAckAsync(_tokenSource.Token); } }
public async Task GivenBehaviors_ShouldExecuteEveryone() { var behaviorMock = new Mock <IBehavior <IPublisherMessageBatching> >(); behaviorMock.Setup(x => x.ExecuteAsync( It.IsAny <IPublisherMessageBatching>(), It.IsAny <Func <IPublisherMessageBatching, CancellationToken, Task> >(), It.IsAny <CancellationToken>())) .Returns(Task.CompletedTask) .Verifiable(); using var stub1 = new StubBehavior(); using var stub2 = new StubBehavior(); using var stub3 = new StubBehavior(); using var behavior = AggregateBehavior <IPublisherMessageBatching> .Create(behaviorMock.Object, stub1, stub2, stub3); await behavior.ExecuteAsync(null, null, CancellationToken.None); StubBehavior.Executed.Should().Be(3); behaviorMock.VerifyAll(); }