public void Should_consume_message_and_emit_payload() { var black = "#000000"; string payload = $"{{ \"Color\": \"{black}\" }}"; var message = new MqttApplicationMessage { Payload = Encoding.UTF8.GetBytes(payload) }; var eventArgs = new MqttApplicationMessageReceivedEventArgs("", message); var scheduler = new TestScheduler(); MqttClientMock.SetupAllProperties(); var subject = new MqttSource(Options, MqttClientMock.Object); scheduler.Schedule(TimeSpan.FromTicks(20), () => { MqttClientMock.Object.ApplicationMessageReceivedHandler.HandleApplicationMessageReceivedAsync(eventArgs); }); var actual = scheduler.Start( () => subject.Get(), created: 0, subscribed: 10, disposed: 100 ); var expected = new Recorded <Notification <object> >[] { OnNext(20, (object)payload) }; ReactiveAssert.AreElementsEqual(expected, actual.Messages); }
public void Should_subscribe_to_provided_topic() { MqttClientMock.SetupAllProperties(); var subject = new MqttSource(Options, MqttClientMock.Object); MqttClientMock.Object.ConnectedHandler.HandleConnectedAsync(new MqttClientConnectedEventArgs(new Mock <MqttClientAuthenticateResult>().Object)); MqttClientMock.Verify(it => it.SubscribeAsync(It.Is <IEnumerable <MqttTopicFilter> >((topics) => Options.Topics.Result == topics.First().Topic))); }
public void Should_request_value_via_command_topic() { var args = new List <ManagedMqttApplicationMessage>(); MqttClientMock.Setup(it => it.PublishAsync(Capture.In(args))); var subject = new MqttSource(Options, MqttClientMock.Object); MqttClientMock.Verify(it => it.PublishAsync(It.IsAny <ManagedMqttApplicationMessage>())); Assert.AreEqual(Options.Topics.Command, args.First().ApplicationMessage.Topic); }
public void Should_initialize_MQTTClient() { var args = new List <IManagedMqttClientOptions>(); MqttClientMock.Setup(m => m.StartAsync(Capture.In(args))); var subject = new MqttSource(Options, MqttClientMock.Object); var actualOptions = args.First(); MqttClientTcpOptions actualChannelOptions = actualOptions.ClientOptions.ChannelOptions as MqttClientTcpOptions; MqttClientMock.Verify(it => it.StartAsync(It.IsAny <IManagedMqttClientOptions>())); Assert.AreEqual(actualOptions.ClientOptions.Credentials.Username, MqttClientOptions.ClientOptions.Credentials.Username); Assert.AreEqual(actualOptions.ClientOptions.Credentials.Password, MqttClientOptions.ClientOptions.Credentials.Password); Assert.AreEqual(actualChannelOptions.Server, MqttClientTcpOptions.Server); Assert.AreEqual(actualChannelOptions.Port, MqttClientTcpOptions.Port); }
public void Should_consume_message_and_apply_transformations() { var red = "#ff0000"; Color expectedColor = Color.FromArgb(255, 0, 255, 0); string payload = $"{{ \"Color\": \"{red}\" }}"; var message = new MqttApplicationMessage { Payload = Encoding.UTF8.GetBytes(payload) }; var eventArgs = new MqttApplicationMessageReceivedEventArgs("", message); var scheduler = new TestScheduler(); MqttClientMock.SetupAllProperties(); Options.Transformations = new List <TransformationOptions>() { new JsonPathTransformationOptions() { Expression = "$.Color" }, new ColorTransformationOptions() { ChannelLayout = "GRB" }, }.ToArray(); var subject = new MqttSource(Options, MqttClientMock.Object); scheduler.Schedule(TimeSpan.FromTicks(20), () => { MqttClientMock.Object.ApplicationMessageReceivedHandler.HandleApplicationMessageReceivedAsync(eventArgs); }); var actual = scheduler.Start( () => subject.Get(), created: 0, subscribed: 10, disposed: 100 ); var expected = new Recorded <Notification <object> >[] { OnNext(20, (object)new Ref <Color>(expectedColor)) }; ReactiveAssert.AreElementsEqual(expected, actual.Messages); }