コード例 #1
0
        public async Task CleanupTestTimeoutUpdateIndividualMessageTimeToLive(bool checkEntireQueueOnCleanup)
        {
            (IMessageStore messageStore, ICheckpointStore checkpointStore, InMemoryDbStore _)result = await this.GetMessageStore(checkEntireQueueOnCleanup, 20);

            result.messageStore.SetTimeToLive(TimeSpan.FromSeconds(20));
            using (IMessageStore messageStore = result.messageStore)
            {
                for (int i = 0; i < 200; i++)
                {
                    if (i % 2 == 0)
                    {
                        IMessage input          = this.GetMessage(i);
                        IMessage updatedMessage = await messageStore.Add("module1", input, 20);

                        CompareUpdatedMessageWithOffset(input, i / 2, updatedMessage);
                    }
                    else
                    {
                        IMessage input          = this.GetMessage(i);
                        IMessage updatedMessage = await messageStore.Add("module2", input, 20);

                        CompareUpdatedMessageWithOffset(input, i / 2, updatedMessage);
                    }
                }

                IMessageIterator       module1Iterator = messageStore.GetMessageIterator("module1");
                IEnumerable <IMessage> batch           = await module1Iterator.GetNext(100);

                Assert.Equal(100, batch.Count());

                IMessageIterator module2Iterator = messageStore.GetMessageIterator("module2");
                batch = await module2Iterator.GetNext(100);

                Assert.Equal(100, batch.Count());

                await Task.Delay(TimeSpan.FromSeconds(100));

                module1Iterator = messageStore.GetMessageIterator("module1");
                batch           = await module1Iterator.GetNext(100);

                Assert.Empty(batch);

                module2Iterator = messageStore.GetMessageIterator("module2");
                batch           = await module2Iterator.GetNext(100);

                Assert.Empty(batch);

                // By setting the global TTL for the MessageStore to 20, the CleanupProcessor will run every 10 seconds
                // But it won't clean up any messages, since the individual messages are set to have TTL of 2000 seconds
                result.messageStore.SetTimeToLive(TimeSpan.FromSeconds(20));
                await Task.Delay(TimeSpan.FromSeconds(50));

                for (int i = 0; i < 200; i++)
                {
                    if (i % 2 == 0)
                    {
                        IMessage input          = this.GetMessage(i);
                        IMessage updatedMessage = await messageStore.Add("module1", input, 2000);

                        CompareUpdatedMessageWithOffset(input, 100 + i / 2, updatedMessage);
                    }
                    else
                    {
                        IMessage input          = this.GetMessage(i);
                        IMessage updatedMessage = await messageStore.Add("module2", input, 50);

                        CompareUpdatedMessageWithOffset(input, 100 + i / 2, updatedMessage);
                    }
                }

                module1Iterator = messageStore.GetMessageIterator("module1");
                batch           = await module1Iterator.GetNext(100);

                Assert.Equal(100, batch.Count());

                module2Iterator = messageStore.GetMessageIterator("module2");
                batch           = await module2Iterator.GetNext(100);

                Assert.Equal(100, batch.Count());

                await Task.Delay(TimeSpan.FromSeconds(100));

                module1Iterator = messageStore.GetMessageIterator("module1", 100);
                batch           = await module1Iterator.GetNext(100);

                Assert.Equal(100, batch.Count());

                module2Iterator = messageStore.GetMessageIterator("module2", 100);
                batch           = await module2Iterator.GetNext(100);

                Assert.Empty(batch);
            }
        }
コード例 #2
0
        public async Task CleanupTestTimeoutUpdateGlobalTimeToLive(bool checkEntireQueueOnCleanup)
        {
            (IMessageStore messageStore, ICheckpointStore checkpointStore, InMemoryDbStore _)result = await this.GetMessageStore(checkEntireQueueOnCleanup, 20);

            result.messageStore.SetTimeToLive(TimeSpan.FromSeconds(20));
            using (IMessageStore messageStore = result.messageStore)
            {
                for (int i = 0; i < 200; i++)
                {
                    if (i % 2 == 0)
                    {
                        IMessage input          = this.GetMessage(i);
                        IMessage updatedMessage = await messageStore.Add("module1", input, 0);

                        CompareUpdatedMessageWithOffset(input, i / 2, updatedMessage);
                    }
                    else
                    {
                        IMessage input          = this.GetMessage(i);
                        IMessage updatedMessage = await messageStore.Add("module2", input, 0);

                        CompareUpdatedMessageWithOffset(input, i / 2, updatedMessage);
                    }
                }

                IMessageIterator       module1Iterator = messageStore.GetMessageIterator("module1");
                IEnumerable <IMessage> batch           = await module1Iterator.GetNext(100);

                Assert.Equal(100, batch.Count());

                IMessageIterator module2Iterator = messageStore.GetMessageIterator("module2");
                batch = await module2Iterator.GetNext(100);

                Assert.Equal(100, batch.Count());

                await Task.Delay(TimeSpan.FromSeconds(100));

                module1Iterator = messageStore.GetMessageIterator("module1");
                batch           = await module1Iterator.GetNext(100);

                Assert.Empty(batch);

                module2Iterator = messageStore.GetMessageIterator("module2");
                batch           = await module2Iterator.GetNext(100);

                Assert.Empty(batch);

                result.messageStore.SetTimeToLive(TimeSpan.FromSeconds(2000));
                await Task.Delay(TimeSpan.FromSeconds(50));

                for (int i = 0; i < 200; i++)
                {
                    if (i % 2 == 0)
                    {
                        IMessage input          = this.GetMessage(i);
                        IMessage updatedMessage = await messageStore.Add("module1", input, 0);

                        CompareUpdatedMessageWithOffset(input, 100 + i / 2, updatedMessage);
                    }
                    else
                    {
                        IMessage input          = this.GetMessage(i);
                        IMessage updatedMessage = await messageStore.Add("module2", input, 0);

                        CompareUpdatedMessageWithOffset(input, 100 + i / 2, updatedMessage);
                    }
                }

                module1Iterator = messageStore.GetMessageIterator("module1");
                batch           = await module1Iterator.GetNext(100);

                Assert.Equal(100, batch.Count());

                module2Iterator = messageStore.GetMessageIterator("module2");
                batch           = await module2Iterator.GetNext(100);

                Assert.Equal(100, batch.Count());

                await Task.Delay(TimeSpan.FromSeconds(100));

                module1Iterator = messageStore.GetMessageIterator("module1");
                batch           = await module1Iterator.GetNext(100);

                Assert.Equal(100, batch.Count());

                module2Iterator = messageStore.GetMessageIterator("module2");
                batch           = await module2Iterator.GetNext(100);

                Assert.Equal(100, batch.Count());
            }
        }
コード例 #3
0
ファイル: MessageStoreTest.cs プロジェクト: vvv37912/iotedge
        public async Task CleanupTestTimeoutWithRead()
        {
            (IMessageStore messageStore, ICheckpointStore checkpointStore)result = await this.GetMessageStore(20);

            using (IMessageStore messageStore = result.messageStore)
            {
                for (int i = 0; i < 200; i++)
                {
                    if (i % 2 == 0)
                    {
                        IMessage input          = this.GetMessage(i);
                        IMessage updatedMessage = await messageStore.Add("module1", input);

                        CompareUpdatedMessageWithOffset(input, i / 2, updatedMessage);
                    }
                    else
                    {
                        IMessage input          = this.GetMessage(i);
                        IMessage updatedMessage = await messageStore.Add("module2", input);

                        CompareUpdatedMessageWithOffset(input, i / 2, updatedMessage);
                    }
                }

                IMessageIterator       module1Iterator = messageStore.GetMessageIterator("module1");
                IEnumerable <IMessage> batch           = await module1Iterator.GetNext(100);

                Assert.Equal(100, batch.Count());

                IMessageIterator module2Iterator = messageStore.GetMessageIterator("module2");
                batch = await module2Iterator.GetNext(100);

                Assert.Equal(100, batch.Count());

                await Task.Delay(TimeSpan.FromSeconds(100));

                for (int i = 200; i < 250; i++)
                {
                    if (i % 2 == 0)
                    {
                        IMessage input          = this.GetMessage(i);
                        IMessage updatedMessage = await messageStore.Add("module1", input);

                        CompareUpdatedMessageWithOffset(input, i / 2, updatedMessage);
                    }
                    else
                    {
                        IMessage input          = this.GetMessage(i);
                        IMessage updatedMessage = await messageStore.Add("module2", input);

                        CompareUpdatedMessageWithOffset(input, i / 2, updatedMessage);
                    }
                }

                module1Iterator = messageStore.GetMessageIterator("module1");
                batch           = await module1Iterator.GetNext(100);

                Assert.Equal(25, batch.Count());

                module2Iterator = messageStore.GetMessageIterator("module2");
                batch           = await module2Iterator.GetNext(100);

                Assert.Equal(25, batch.Count());
            }
        }
コード例 #4
0
ファイル: MessageStoreTest.cs プロジェクト: vvv37912/iotedge
        public async Task MessageStoreAddRemoveEndpointTest()
        {
            // Arrange
            var              dbStoreProvider = new InMemoryDbStoreProvider();
            IStoreProvider   storeProvider   = new StoreProvider(dbStoreProvider);
            ICheckpointStore checkpointStore = CheckpointStore.Create(storeProvider);
            IMessageStore    messageStore    = new MessageStore(storeProvider, checkpointStore, TimeSpan.FromHours(1));

            // Act
            await messageStore.AddEndpoint("module1");

            for (int i = 0; i < 10; i++)
            {
                await messageStore.Add("module1", this.GetMessage(i));
            }

            // Assert
            IMessageIterator module1Iterator = messageStore.GetMessageIterator("module1");

            Assert.NotNull(module1Iterator);

            IEnumerable <IMessage> batch = await module1Iterator.GetNext(1000);

            List <IMessage> batchItemsAsList = batch.ToList();

            Assert.Equal(10, batchItemsAsList.Count);

            for (int i = 0; i < 10; i++)
            {
                Assert.Equal($"{i}", batchItemsAsList.ElementAt(i).SystemProperties[SystemProperties.MessageId]);
            }

            // Remove
            await messageStore.RemoveEndpoint("module1");

            // Assert
            await Assert.ThrowsAsync <InvalidOperationException>(() => messageStore.Add("module1", this.GetMessage(0)));

            Assert.Throws <InvalidOperationException>(() => messageStore.GetMessageIterator("module1"));

            // Act
            await messageStore.AddEndpoint("module1");

            for (int i = 20; i < 30; i++)
            {
                await messageStore.Add("module1", this.GetMessage(i));
            }

            // Assert
            module1Iterator = messageStore.GetMessageIterator("module1");
            Assert.NotNull(module1Iterator);

            batch = await module1Iterator.GetNext(1000);

            batchItemsAsList = batch.ToList();
            Assert.Equal(10, batchItemsAsList.Count);

            for (int i = 20; i < 30; i++)
            {
                Assert.Equal($"{i}", batchItemsAsList.ElementAt(i - 20).SystemProperties[SystemProperties.MessageId]);
            }
        }
コード例 #5
0
ファイル: MessageStoreTest.cs プロジェクト: xwdreamer/iotedge
        public async Task CleanupTestTimeoutUpdateTimeToLive()
        {
            (IMessageStore messageStore, ICheckpointStore checkpointStore)result = await this.GetMessageStore(20);

            result.messageStore.SetTimeToLive(TimeSpan.FromSeconds(20));
            using (IMessageStore messageStore = result.messageStore)
            {
                for (int i = 0; i < 200; i++)
                {
                    if (i % 2 == 0)
                    {
                        long offset = await messageStore.Add("module1", this.GetMessage(i));

                        Assert.Equal(i / 2, offset);
                    }
                    else
                    {
                        long offset = await messageStore.Add("module2", this.GetMessage(i));

                        Assert.Equal(i / 2, offset);
                    }
                }

                IMessageIterator       module1Iterator = messageStore.GetMessageIterator("module1");
                IEnumerable <IMessage> batch           = await module1Iterator.GetNext(100);

                Assert.Equal(100, batch.Count());

                IMessageIterator module2Iterator = messageStore.GetMessageIterator("module2");
                batch = await module2Iterator.GetNext(100);

                Assert.Equal(100, batch.Count());

                await Task.Delay(TimeSpan.FromSeconds(100));

                module1Iterator = messageStore.GetMessageIterator("module1");
                batch           = await module1Iterator.GetNext(100);

                Assert.Empty(batch);

                module2Iterator = messageStore.GetMessageIterator("module2");
                batch           = await module2Iterator.GetNext(100);

                Assert.Empty(batch);

                result.messageStore.SetTimeToLive(TimeSpan.FromSeconds(2000));
                await Task.Delay(TimeSpan.FromSeconds(50));

                for (int i = 0; i < 200; i++)
                {
                    if (i % 2 == 0)
                    {
                        long offset = await messageStore.Add("module1", this.GetMessage(i));

                        Assert.Equal(100 + i / 2, offset);
                    }
                    else
                    {
                        long offset = await messageStore.Add("module2", this.GetMessage(i));

                        Assert.Equal(100 + i / 2, offset);
                    }
                }

                module1Iterator = messageStore.GetMessageIterator("module1");
                batch           = await module1Iterator.GetNext(100);

                Assert.Equal(100, batch.Count());

                module2Iterator = messageStore.GetMessageIterator("module2");
                batch           = await module2Iterator.GetNext(100);

                Assert.Equal(100, batch.Count());

                await Task.Delay(TimeSpan.FromSeconds(100));

                module1Iterator = messageStore.GetMessageIterator("module1");
                batch           = await module1Iterator.GetNext(100);

                Assert.Equal(100, batch.Count());

                module2Iterator = messageStore.GetMessageIterator("module2");
                batch           = await module2Iterator.GetNext(100);

                Assert.Equal(100, batch.Count());
            }
        }