public async Task Rollback_Store_Reverted()
        {
            var store = new InMemoryOffsetStore(new TransactionalDictionarySharedItems <string, IBrokerMessageOffset>());

            await store.StoreAsync(
                new TestOffset("key1", "1"),
                new TestConsumerEndpoint("endpoint1") { GroupId = "group1" });

            await store.CommitAsync();

            store.CommittedItemsCount.Should().Be(1);

            await store.StoreAsync(
                new TestOffset("key1", "2"),
                new TestConsumerEndpoint("endpoint1") { GroupId = "group1" });

            await store.RollbackAsync();

            store.CommittedItemsCount.Should().Be(1);

            var result = await store.GetLatestValueAsync(
                "key1",
                new TestConsumerEndpoint("endpoint1")
            {
                GroupId = "group1"
            });

            result.Should().NotBeNull();
            result !.Value.Should().Be("1");
        }
        public async Task GetLatestValue_CommittedOffsetsFromMultipleInstances_LastCommittedValueReturned()
        {
            var sharedList = new TransactionalDictionarySharedItems <string, IBrokerMessageOffset>();

            var store = new InMemoryOffsetStore(sharedList);
            await store.StoreAsync(
                new TestOffset("key1", "1"),
                new TestConsumerEndpoint("endpoint1") { GroupId = "group1" });

            await store.CommitAsync();

            store = new InMemoryOffsetStore(sharedList);
            await store.StoreAsync(
                new TestOffset("key1", "2"),
                new TestConsumerEndpoint("endpoint1") { GroupId = "group1" });

            await store.CommitAsync();

            store = new InMemoryOffsetStore(sharedList);

            var result = await store.GetLatestValueAsync(
                "key1",
                new TestConsumerEndpoint("endpoint1")
            {
                GroupId = "group1"
            });

            result.Should().NotBeNull();
            result !.Value.Should().Be("2");
        }
        public OffsetStoredInboundConnectorTests()
        {
            var services = new ServiceCollection();

            _testSubscriber = new TestSubscriber();

            services.AddSingleton <ILoggerFactory, NullLoggerFactory>();
            services.AddSingleton(typeof(ILogger <>), typeof(NullLogger <>));
            services
            .AddSilverback()
            .WithConnectionTo <TestBroker>()
            .AddSingletonSubscriber(_testSubscriber);

            services.AddScoped <IOffsetStore, InMemoryOffsetStore>();

            IServiceProvider serviceProvider = services.BuildServiceProvider(new ServiceProviderOptions {
                ValidateScopes = true
            });

            _broker    = (TestBroker)serviceProvider.GetService <IBroker>();
            _connector = new OffsetStoredInboundConnector(_broker, serviceProvider, new NullLogger <OffsetStoredInboundConnector>(),
                                                          new MessageLogger());

            _scopedServiceProvider = serviceProvider.CreateScope().ServiceProvider;

            InMemoryOffsetStore.Clear();
        }
        public OffsetStoredInboundConnectorTests()
        {
            var services = new ServiceCollection();

            _testSubscriber = new TestSubscriber();
            services.AddSingleton <ISubscriber>(_testSubscriber);

            services.AddSingleton <ILoggerFactory, NullLoggerFactory>();
            services.AddSingleton(typeof(ILogger <>), typeof(NullLogger <>));
            services.AddBus();

            services.AddBroker <TestBroker>();

            services.AddScoped <IOffsetStore, InMemoryOffsetStore>();

            _serviceProvider = services.BuildServiceProvider(new ServiceProviderOptions {
                ValidateScopes = true
            });
            _broker    = (TestBroker)_serviceProvider.GetService <IBroker>();
            _connector = new OffsetStoredInboundConnector(_broker, _serviceProvider, new NullLogger <OffsetStoredInboundConnector>(),
                                                          new MessageLogger(new MessageKeyProvider(new[] { new DefaultPropertiesMessageKeyProvider() })));

            _scopedServiceProvider = _serviceProvider.CreateScope().ServiceProvider;

            InMemoryOffsetStore.Clear();
        }
        public async Task GetLatestValue_NotStoredOffsets_NullIsReturned()
        {
            var store = new InMemoryOffsetStore(new TransactionalDictionarySharedItems <string, IBrokerMessageOffset>());

            await store.StoreAsync(
                new TestOffset("key1", "1"),
                new TestConsumerEndpoint("endpoint1") { GroupId = "group1" });

            await store.CommitAsync();

            var result = await store.GetLatestValueAsync(
                "key2",
                new TestConsumerEndpoint("endpoint1")
            {
                GroupId = "group1"
            });

            result.Should().BeNull();
        }
        public async Task Store_SameTopicPartitionAndGroup_OffsetIsReplaced()
        {
            var store = new InMemoryOffsetStore(new TransactionalDictionarySharedItems <string, IBrokerMessageOffset>());

            await store.StoreAsync(
                new TestOffset("key1", "1"),
                new TestConsumerEndpoint("endpoint1") { GroupId = "group1" });

            await store.StoreAsync(
                new TestOffset("key1", "2"),
                new TestConsumerEndpoint("endpoint1") { GroupId = "group1" });

            await store.StoreAsync(
                new TestOffset("key1", "3"),
                new TestConsumerEndpoint("endpoint1") { GroupId = "group1" });

            await store.CommitAsync();

            store.CommittedItemsCount.Should().Be(1);
        }
        public async Task Store_ForDifferentPartitions_AllOffsetsStored()
        {
            var store = new InMemoryOffsetStore(new TransactionalDictionarySharedItems <string, IBrokerMessageOffset>());

            await store.StoreAsync(
                new TestOffset("key1", "1"),
                new TestConsumerEndpoint("endpoint1") { GroupId = "group1" });

            await store.StoreAsync(
                new TestOffset("key2", "1"),
                new TestConsumerEndpoint("endpoint1") { GroupId = "group1" });

            await store.StoreAsync(
                new TestOffset("key3", "1"),
                new TestConsumerEndpoint("endpoint1") { GroupId = "group1" });

            await store.CommitAsync();

            store.CommittedItemsCount.Should().Be(3);
        }
Ejemplo n.º 8
0
        public async Task GetLatestValue_WithMultipleOffsetsStored_CorrectOffsetIsReturned()
        {
            var store = new InMemoryOffsetStore(new TransactionalDictionarySharedItems <string, IComparableOffset>());

            await store.StoreAsync(
                new TestOffset("key1", "1"),
                new TestConsumerEndpoint("endpoint1") { GroupId = "group1" });

            await store.StoreAsync(
                new TestOffset("key1", "2"),
                new TestConsumerEndpoint("endpoint1") { GroupId = "group1" });

            await store.StoreAsync(
                new TestOffset("key1", "3"),
                new TestConsumerEndpoint("endpoint1") { GroupId = "group1" });

            await store.StoreAsync(
                new TestOffset("key2", "1"),
                new TestConsumerEndpoint("endpoint1") { GroupId = "group1" });

            await store.StoreAsync(
                new TestOffset("key1", "1"),
                new TestConsumerEndpoint("endpoint2") { GroupId = "group1" });

            await store.StoreAsync(
                new TestOffset("key1", "1"),
                new TestConsumerEndpoint("endpoint1") { GroupId = "group2" });

            await store.CommitAsync();

            var result = await store.GetLatestValueAsync(
                "key1",
                new TestConsumerEndpoint("endpoint1")
            {
                GroupId = "group1"
            });

            result.Should().NotBeNull();
            result !.Value.Should().Be("3");
        }