// Performs join public async Task <bool> JoinAsync(SimulatedPacketForwarder packetForwarder, int timeoutInMs = 30 * 1000) { if (this.IsJoined) { return(true); } var token = await RandomTokenGenerator.GetTokenAsync(); this.LastPayload = new PhysicalPayload(token, PhysicalIdentifier.PUSH_DATA, null); var header = this.LastPayload.GetSyncHeader(packetForwarder.MacAddress); var joinRequest = this.CreateJoinRequest(); var joinCompleted = new SemaphoreSlim(0); packetForwarder.SubscribeOnce(token, PhysicalIdentifier.PULL_RESP, (response) => { // handle join var loraMessage = new LoRaMessageWrapper(response, true, this.LoRaDevice.AppKey); if (loraMessage.LoRaMessageType == LoRaMessageType.JoinAccept) { this.HandleJoinAccept(loraMessage); joinCompleted.Release(); } }); await packetForwarder.SendAsync(header, joinRequest); TestLogger.Log($"[{this.LoRaDevice.DeviceID}] Join request: {BitConverter.ToString(header).Replace("-", "")}"); return(await joinCompleted.WaitAsync(timeoutInMs)); }
public async Task Single_OTAA_Simulated_Device() { const int MessageCount = 5; var device = this.TestFixture.Device1002_Simulated_OTAA; var simulatedDevice = new SimulatedDevice(device); var networkServerIPEndpoint = CreateNetworkServerEndpoint(); using (var simulatedPacketForwarder = new SimulatedPacketForwarder(networkServerIPEndpoint)) { simulatedPacketForwarder.Start(); bool joined = await simulatedDevice.JoinAsync(simulatedPacketForwarder); Assert.True(joined, "OTAA join failed"); await Task.Delay(intervalAfterJoin); for (var i = 1; i <= MessageCount; i++) { await simulatedDevice.SendUnconfirmedMessageAsync(simulatedPacketForwarder, i.ToString()); await Task.Delay(intervalBetweenMessages); } await simulatedPacketForwarder.StopAsync(); } // wait 10 seconds before checking if iot hub content is available await Task.Delay(TimeSpan.FromSeconds(10)); var msgsFromDevice = this.TestFixture.IoTHubMessages.GetEvents().Where(x => x.GetDeviceId() == simulatedDevice.LoRaDevice.DeviceID); Assert.Equal(MessageCount, msgsFromDevice.Count()); }
//[Fact] public async Task Simulated_Http_Based_Decoder_Scenario() { var device = this.TestFixture.Device1003_Simulated_HttpBasedDecoder; var simulatedDevice = new SimulatedDevice(device); var networkServerIPEndpoint = CreateNetworkServerEndpoint(); using (var simulatedPacketForwarder = new SimulatedPacketForwarder(networkServerIPEndpoint)) { simulatedPacketForwarder.Start(); bool joined = await simulatedDevice.JoinAsync(simulatedPacketForwarder); Assert.True(joined, "OTAA join failed"); await Task.Delay(intervalAfterJoin); for (var i = 1; i <= 3; i++) { await simulatedDevice.SendUnconfirmedMessageAsync(simulatedPacketForwarder, i.ToString()); await Task.Delay(intervalBetweenMessages); } await simulatedPacketForwarder.StopAsync(); } // wait 10 seconds before checking if iot hub content is available await Task.Delay(TimeSpan.FromSeconds(10)); }
// Sends unconfirmed message public async Task SendUnconfirmedMessageAsync(SimulatedPacketForwarder simulatedPacketForwarder, string payload) { var token = await RandomTokenGenerator.GetTokenAsync(); this.LastPayload = new PhysicalPayload(token, PhysicalIdentifier.PUSH_DATA, null); var header = this.LastPayload.GetSyncHeader(simulatedPacketForwarder.MacAddress); var unconfirmedMessage = this.CreateUnconfirmedDataUpMessage(payload); await simulatedPacketForwarder.SendAsync(header, unconfirmedMessage); TestLogger.Log($"[{this.LoRaDevice.DeviceID}] Unconfirmed data: {BitConverter.ToString(header).Replace("-", "")} {payload}"); //TestLogger.Log($"[{this.LoRaDevice.DevAddr}] Sending data: {BitConverter.ToString(header).Replace("-", "")}{Encoding.UTF8.GetString(gatewayInfo)}"); }
public async Task Single_ABP_Simulated_Device() { const int MessageCount = 5; var device = this.TestFixture.Device1001_Simulated_ABP; var simulatedDevice = new SimulatedDevice(device); var networkServerIPEndpoint = CreateNetworkServerEndpoint(); using (var simulatedPacketForwarder = new SimulatedPacketForwarder(networkServerIPEndpoint)) { simulatedPacketForwarder.Start(); for (var i = 1; i <= MessageCount; i++) { await simulatedDevice.SendUnconfirmedMessageAsync(simulatedPacketForwarder, i.ToString()); await Task.Delay(intervalBetweenMessages); } await simulatedPacketForwarder.StopAsync(); } }