示例#1
0
        // 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));
        }
示例#4
0
        // 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();
            }
        }