Пример #1
0
        public void Rebuild_WhenInvoked_RaisesApplicationChangedEvent()
        {
            var mqttApplicationProvider = MqttApplicationProviderHelper.CreateMqttApplicationProvider(2);

            Assert.Null(mqttApplicationProvider.Current);

            var raisedEvent1 = Assert.Raises <ApplicationChangedEventArgs>(
                x => mqttApplicationProvider.ApplicationChanged += x,
                x => mqttApplicationProvider.ApplicationChanged -= x,
                () => mqttApplicationProvider.Rebuild());

            Assert.Null(raisedEvent1.Arguments.Previous);
            Assert.NotNull(raisedEvent1.Arguments.Current);

            Assert.NotNull(mqttApplicationProvider.Current);

            Assert.Collection(
                raisedEvent1.Arguments.Current.TopicFilters,
                topicFilter1 => Assert.Equal("test/builder_1/build_1", topicFilter1.Topic),
                topicFilter2 => Assert.Equal("test/builder_2/build_1", topicFilter2.Topic));

            var raisedEvent2 = Assert.Raises <ApplicationChangedEventArgs>(
                x => mqttApplicationProvider.ApplicationChanged += x,
                x => mqttApplicationProvider.ApplicationChanged -= x,
                () => mqttApplicationProvider.Rebuild());

            Assert.NotNull(raisedEvent2.Arguments.Previous);
            Assert.NotNull(raisedEvent2.Arguments.Current);

            Assert.Same(raisedEvent1.Arguments.Current, raisedEvent2.Arguments.Previous);
            Assert.NotSame(raisedEvent2.Arguments.Previous, raisedEvent2.Arguments.Current);

            Assert.Collection(
                raisedEvent2.Arguments.Current.TopicFilters,
                topicFilter1 => Assert.Equal("test/builder_1/build_2", topicFilter1.Topic),
                topicFilter2 => Assert.Equal("test/builder_2/build_2", topicFilter2.Topic));
        }
        public async Task ExecuteAsync_WhenApplicationChanges_UpdatesSubscriptions()
        {
            var mqttApplicationProvider = MqttApplicationProviderHelper.CreateMqttApplicationProvider(2);

            mqttApplicationProvider.Rebuild();

            using var mqttConsumerService = CreateMqttConsumerService(
                      s =>
            {
                s.Host = "mqtt.local";
                s.Port = 1884;
            },
                      mqttApplicationProviderOverride: mqttApplicationProvider);

            Assert.Collection(
                mqttApplicationProvider.Current.TopicFilters,
                i => Assert.Equal("test/builder_1/build_1", i.Topic),
                i => Assert.Equal("test/builder_2/build_1", i.Topic));

            MockManagedMqttClient
            .Setup(c => c.StartAsync(MockManagedMqttClientOptions.Object))
            .Returns(Task.CompletedTask)
            .Verifiable();

            MockManagedMqttClient
            .Setup(c => c.SubscribeAsync(mqttApplicationProvider.Current.TopicFilters))
            .Returns(Task.CompletedTask)
            .Verifiable();

            await mqttConsumerService.StartAsync(CancellationToken.None);

            // MockManagedMqttClient
            //    .Setup(c => c.SubscribeAsync(It.Is<MqttTopicFilter[]>(
            //        f => f.Length == 2 &&
            //            f[0].Topic.Equals("test/builder_1/build_1") &&
            //            f[1].Topic.Equals("test/builder_2/build_1"))))
            //    .Returns(Task.CompletedTask)
            //    .Verifiable();

            MockManagedMqttClient
            .Setup(c => c.SubscribeAsync(It.Is <MqttTopicFilter[]>(
                                             f => f.Length == 2 &&
                                             f[0].Topic.Equals("test/builder_1/build_2") &&
                                             f[1].Topic.Equals("test/builder_2/build_2"))))
            .Returns(Task.CompletedTask)
            .Verifiable();

            var raisedEvent = Assert.Raises <ApplicationChangedEventArgs>(
                x => mqttApplicationProvider.ApplicationChanged += x,
                x => mqttApplicationProvider.ApplicationChanged -= x,
                () => mqttApplicationProvider.Rebuild());

            Assert.Collection(
                raisedEvent.Arguments.Previous.TopicFilters,
                f => Assert.Equal("test/builder_1/build_1", f.Topic),
                f => Assert.Equal("test/builder_2/build_1", f.Topic));

            Assert.Collection(
                raisedEvent.Arguments.Current.TopicFilters,
                f => Assert.Equal("test/builder_1/build_2", f.Topic),
                f => Assert.Equal("test/builder_2/build_2", f.Topic));

            MockManagedMqttClient.VerifyAll();
        }