コード例 #1
0
        public async Task When_SendMessageAsync_SendAsync_Succeeds_MessagesSent_Is_Incremented()
        {
            const string deviceId      = "device1";
            var          configuration = new ConfigurationBuilder()
                                         .AddInMemoryCollection(new Dictionary <string, string>())
                                         .Build();

            var stats  = new RunnerStats();
            var config = RunnerConfiguration.Load(configuration, NullLogger.Instance);
            var sender = new TestSender(false, false, deviceId, config);

            await sender.SendMessageAsync(stats, CancellationToken.None);

            Assert.Equal(1, stats.MessagesSent);
            Assert.Equal(0, stats.TotalSendTelemetryErrors);
            Assert.Single(sender.TestMessages);
        }
コード例 #2
0
        public async Task When_SendingMessage_With_Different_Payload_Per_Device_Should_Work()
        {
            var configuration = new ConfigurationBuilder()
                                .AddJsonFile("./test_files/test3-config-multiple-devices.json")
                                .Build();

            var stats         = new RunnerStats();
            var config        = RunnerConfiguration.Load(configuration, NullLogger.Instance);
            var senderDevice1 = new TestSender(false, false, "device0001", config);
            var senderDevice2 = new TestSender(false, false, "device0002", config);
            var senderDevice3 = new TestSender(false, false, "device0003", config);

            const int messageCount = 3;

            for (int i = 0; i < messageCount; i++)
            {
                await Task.WhenAll(
                    senderDevice1.SendMessageAsync(stats, default),
                    senderDevice2.SendMessageAsync(stats, default),
                    senderDevice3.SendMessageAsync(stats, default));
            }

            foreach (var expectedMessageForDevice1 in new[]
            {
                "{\"value\":\"1\"}",
                "{\"value\":\"true\"}",
                "{\"value\":\"2\"}",
            })
            {
                Assert.Equal(1, senderDevice1.TestMessages.Count(x => expectedMessageForDevice1 == Encoding.UTF8.GetString(x.MessageBytes)));
            }

            foreach (var expectedMessageForDevice3 in new[]
            {
                "{\"a\":\"b\",\"value\":\"1\"}",
                "{\"a\":\"b\",\"value\":\"true\"}",
                "{\"a\":\"b\",\"value\":\"2\"}",
            })
            {
                Assert.Equal(1, senderDevice3.TestMessages.Count(x => expectedMessageForDevice3 == Encoding.UTF8.GetString(x.MessageBytes)));
            }

            const string expectedMessageForDevice2 = "{\"value\":\"myfixvalue\"}";

            Assert.Equal(messageCount, senderDevice2.TestMessages.Count(x => Encoding.UTF8.GetString(x.MessageBytes) == expectedMessageForDevice2));
        }
コード例 #3
0
        public async Task When_SendMessageAsync_SendAsync_Throws_NonTransientExcption_SendTelemetryErrors_Is_Incremented()
        {
            const string deviceId      = "device1";
            var          configuration = new ConfigurationBuilder()
                                         .AddInMemoryCollection(new Dictionary <string, string>())
                                         .Build();

            var stats  = new RunnerStats();
            var config = RunnerConfiguration.Load(configuration, NullLogger.Instance);
            var sender = new TestSender(false, true, deviceId, config);

            var stopwatch = Stopwatch.StartNew();
            await sender.SendMessageAsync(stats, CancellationToken.None);

            stopwatch.Stop();

            Assert.InRange(stopwatch.ElapsedMilliseconds, sender.TransientErrorWaitTime, (sender.MaxNumberOfSendAttempts + 1) * sender.TransientErrorWaitTime);
            Assert.Equal(0, stats.MessagesSent);
            Assert.InRange(stats.TotalSendTelemetryErrors, 1, int.MaxValue);
            Assert.Empty(sender.TestMessages);
        }
コード例 #4
0
        public async Task When_SendMessageAsync_With_Header_Property_Is_Added()
        {
            const string deviceId      = "device1";
            const string propertyKey   = "myPropertyKey";
            const string propertyValue = "My Propert Value";
            var          rawTemplate   = $"{{ \"{propertyKey}\": \"{propertyValue}\" }}";
            var          configuration = new ConfigurationBuilder()
                                         .AddInMemoryCollection(new Dictionary <string, string>()
            {
                { "Header", rawTemplate }
            })
                                         .Build();

            var stats  = new RunnerStats();
            var config = RunnerConfiguration.Load(configuration, NullLogger.Instance);
            var sender = new TestSender(false, false, deviceId, config);

            await sender.SendMessageAsync(stats, CancellationToken.None);

            Assert.Equal(propertyValue, sender.TestMessages.Single().Properties[propertyKey]);
            Assert.Equal(1, stats.MessagesSent);
            Assert.Equal(0, stats.TotalSendTelemetryErrors);
            Assert.Single(sender.TestMessages);
        }