public async Task Bind_PushMessages_EachIsConsumedOnce()
        {
            var e1 = new TestEventOne {
                Content = "Test", Id = Guid.NewGuid()
            };
            var e2 = new TestEventTwo {
                Content = "Test", Id = Guid.NewGuid()
            };
            var o1 = new TestOffset("a", "1");
            var o2 = new TestOffset("a", "2");

            _connector.Bind(TestEndpoint.GetDefault());
            _broker.Connect();

            var consumer = _broker.Consumers.First();
            await consumer.TestPush(e1, offset : o1);

            await consumer.TestPush(e2, offset : o2);

            await consumer.TestPush(e1, offset : o1);

            await consumer.TestPush(e2, offset : o2);

            await consumer.TestPush(e1, offset : o1);

            _testSubscriber.ReceivedMessages.Count.Should().Be(2);
        }
        public async Task Bind_PushMessagesInBatch_OnlyOffsetOfCommittedBatchStored()
        {
            var e = new TestEventOne {
                Content = "Test", Id = Guid.NewGuid()
            };
            var fail = new TestEventOne {
                Content = "Test", Id = Guid.NewGuid()
            };
            var o1 = new TestOffset("a", "1");
            var o2 = new TestOffset("a", "2");
            var o3 = new TestOffset("a", "3");
            var o4 = new TestOffset("a", "4");

            _connector.Bind(TestEndpoint.GetDefault(), settings: new InboundConnectorSettings
            {
                Batch = new Silverback.Messaging.Batch.BatchSettings
                {
                    Size = 2
                }
            });
            _broker.Connect();

            _testSubscriber.FailCondition = m => m is TestEventOne m2 && m2.Id == fail.Id;

            var consumer = _broker.Consumers.First();

            try { await consumer.TestPush(e, offset : o1); } catch { }
            try { await consumer.TestPush(e, offset : o2); } catch { }
            try { await consumer.TestPush(e, offset : o3); } catch { }
            try { await consumer.TestPush(fail, offset : o4); } catch { }

            (await _scopedServiceProvider.GetRequiredService <IOffsetStore>().GetLatestValue("a")).Value.Should().Be("2");
        }
        public async Task Bind_PushMessagesInBatch_OffsetStored()
        {
            var e = new TestEventOne {
                Content = "Test", Id = Guid.NewGuid()
            };
            var o1 = new TestOffset("a", "1");
            var o2 = new TestOffset("b", "1");
            var o3 = new TestOffset("a", "2");

            _connector.Bind(TestEndpoint.GetDefault(), settings: new InboundConnectorSettings
            {
                Batch = new Silverback.Messaging.Batch.BatchSettings
                {
                    Size = 2
                }
            });
            _broker.Connect();

            var consumer = _broker.Consumers.First();
            await consumer.TestPush(e, offset : o1);

            await consumer.TestPush(e, offset : o2);

            await consumer.TestPush(e, offset : o3);

            await consumer.TestPush(e, offset : o2);

            await consumer.TestPush(e, offset : o1);

            _scopedServiceProvider.GetRequiredService <IOffsetStore>().As <InMemoryOffsetStore>().Count.Should().Be(2);
        }
        public async Task Bind_PushMessagesInBatch_EachIsConsumedOnce()
        {
            var e = new TestEventOne {
                Content = "Test", Id = Guid.NewGuid()
            };
            var o1 = new TestOffset("a", "1");
            var o2 = new TestOffset("b", "1");
            var o3 = new TestOffset("a", "2");

            _connector.Bind(TestEndpoint.GetDefault(), settings: new InboundConnectorSettings
            {
                Batch = new Silverback.Messaging.Batch.BatchSettings
                {
                    Size = 2
                }
            });
            _broker.Connect();

            var consumer = _broker.Consumers.First();
            await consumer.TestPush(e, offset : o1);

            await consumer.TestPush(e, offset : o2);

            await consumer.TestPush(e, offset : o3);

            await consumer.TestPush(e, offset : o2);

            await consumer.TestPush(e, offset : o1);

            await consumer.TestPush(e, offset : o3);

            _testSubscriber.ReceivedMessages.OfType <TestEventOne>().Should().HaveCount(3);
        }
        public async Task Bind_PushMessages_OffsetStored()
        {
            var e = new TestEventOne {
                Content = "Test", Id = Guid.NewGuid()
            };
            var o1 = new TestOffset("a", "1");
            var o2 = new TestOffset("b", "1");
            var o3 = new TestOffset("a", "2");

            _connector.Bind(TestEndpoint.GetDefault());
            _broker.Connect();

            var consumer = _broker.Consumers.First();
            await consumer.TestPush(e, offset : o1);

            await consumer.TestPush(e, offset : o2);

            await consumer.TestPush(e, offset : o3);

            await consumer.TestPush(e, offset : o2);

            await consumer.TestPush(e, offset : o1);

            _scopedServiceProvider.GetRequiredService <IOffsetStore>().As <InMemoryOffsetStore>().Count.Should().Be(2);
        }
        public async Task Bind_PushMessagesInBatchToMultipleConsumers_OnlyOffsetOfCommittedBatchStored()
        {
            var e = new TestEventOne {
                Content = "Test", Id = Guid.NewGuid()
            };
            var fail = new TestEventOne {
                Content = "Test", Id = Guid.NewGuid()
            };
            var o1 = new TestOffset("a", "1");
            var o2 = new TestOffset("a", "2");
            var o3 = new TestOffset("a", "3");
            var o4 = new TestOffset("a", "4");

            _connector.Bind(TestEndpoint.GetDefault(), settings: new InboundConnectorSettings
            {
                Batch = new Silverback.Messaging.Batch.BatchSettings
                {
                    Size = 2
                },
                Consumers = 2
            });
            _broker.Connect();

            _testSubscriber.FailCondition = m => m is TestEventOne m2 && m2.Id == fail.Id;

            var consumer1 = _broker.Consumers[0];
            var consumer2 = _broker.Consumers[1];

            var tasks = new[]
            {
                Task.Run(async() =>
                {
                    try
                    {
                        await consumer1.TestPush(e, offset: o1);
                        await consumer1.TestPush(e, offset: o2);
                    }
                    catch (Exception)
                    { }
                }),
                Task.Run(async() =>
                {
                    try
                    {
                        await consumer2.TestPush(e, offset: o3);
                        await consumer2.TestPush(fail, offset: o4);
                    }
                    catch (Exception)
                    {
                    }
                })
            };

            await Task.WhenAll(tasks);

            (await _scopedServiceProvider.GetRequiredService <IOffsetStore>().GetLatestValue("a")).Value.Should().Be("2");
        }
Exemple #7
0
        private IEnumerator CreateOffset()
        {
            TestOffset newOffset = new TestOffset()
            {
                Offset = new BindableInt(Random.Range(-100, 101))
            };

            slider.SetSource(newOffset);
            Debug.Log("Created new offset with value: " + newOffset.Offset);
            yield break;
        }
        public void Bind_PushMessagesFromDifferentTopics_EachIsConsumedOnce()
        {
            var e = new TestEventOne {
                Content = "Test", Id = Guid.NewGuid()
            };
            var o1 = new TestOffset("a", "1");
            var o2 = new TestOffset("b", "1");

            _connector.Bind(TestEndpoint.Default);
            _broker.Connect();

            var consumer = _broker.Consumers.First();

            consumer.TestPush(e, offset: o1);
            consumer.TestPush(e, offset: o2);
            consumer.TestPush(e, offset: o1);
            consumer.TestPush(e, offset: o2);
            consumer.TestPush(e, offset: o1);

            _testSubscriber.ReceivedMessages.Count.Should().Be(2);
        }
Exemple #9
0
        public void LogProduced_NoEnvelope_Logged()
        {
            var endpoint           = new TestProducerEndpoint("[dynamic]");
            var actualEndpointName = "test1";
            var headers            = new MessageHeaderCollection
            {
                { DefaultMessageHeaders.MessageType, "Message.Type" },
                { DefaultMessageHeaders.MessageId, "1234" }
            };
            var brokerMessageIdentifier = new TestOffset("a", "42");

            var expectedMessage =
                "Message produced. | " +
                "endpointName: test1, " +
                "messageType: Message.Type, " +
                "messageId: 1234, " +
                "unused1: (null), " +
                "unused2: (null)";

            _outboundLogger.LogProduced(endpoint, actualEndpointName, headers, brokerMessageIdentifier);

            _loggerSubstitute.Received(LogLevel.Information, null, expectedMessage, 1031);
        }
 public void SetTestSubsequentFragmentCRC16(byte[] crc, int offset, int timesUsed)
 {
     TestSubsequentFragmentCRC16.Reset(crc, timesUsed);
     TestOffset.Reset(offset, timesUsed);
 }
 public void SetTestIgnoreSubsequentSegment(int offset, int times)
 {
     TestOffset.Reset(offset, times);
     TestNeedToIgnoreSubsequentSegment.Reset(true, times);
 }