Ejemplo n.º 1
0
        public async Task When_PreferredWindow_Is_Not_Define_In_Twin_Should_Have_Window1_As_Preferred()
        {
            var twin = TestUtils.CreateTwin(
                desired: new Dictionary <string, object>
            {
                { "NwkSKey", "ABC02000000000000000000000000009ABC02000000000000000000000000009" },
                { "AppSKey", "ABCD2000000000000000000000000009ABC02000000000000000000000000009" },
                { "DevAddr", "0000AABB" },
                { "GatewayID", "mygateway" },
                { "SensorDecoder", "DecoderValueSensor" },
                { "$version", 1 },
            },
                reported: new Dictionary <string, object>
            {
                { "$version", 1 },
                { "NwkSKey", "ABC02000000000000000000000000009ABC02000000000000000000000000009" },
                { "AppSKey", "ABCD2000000000000000000000000009ABC02000000000000000000000000009" },
                { "DevAddr", "0000AABB" },
            });

            this.loRaDeviceClient.Setup(x => x.GetTwinAsync())
            .ReturnsAsync(twin);

            var loRaDevice = new LoRaDevice("00000001", "ABC0200000000009", new SingleDeviceConnectionManager(this.loRaDeviceClient.Object));
            await loRaDevice.InitializeAsync();

            Assert.Equal(1, loRaDevice.PreferredWindow);
        }
Ejemplo n.º 2
0
        public async Task When_Initialized_With_Keep_Alive_Should_Read_Value_From_Twin(object keepAliveTimeoutValue, int expectedKeepAliveTimeout)
        {
            var twin = TestUtils.CreateTwin(
                desired: new Dictionary <string, object>
            {
                { "NwkSKey", "ABC02000000000000000000000000009ABC02000000000000000000000000009" },
                { "AppSKey", "ABCD2000000000000000000000000009ABC02000000000000000000000000009" },
                { "DevAddr", "0000AABB" },
                { "GatewayID", "mygateway" },
                { "SensorDecoder", "DecoderValueSensor" },
                { "KeepAliveTimeout", keepAliveTimeoutValue },
                { "$version", 1 },
            },
                reported: new Dictionary <string, object>
            {
                { "$version", 1 },
                { "NwkSKey", "ABC02000000000000000000000000009ABC02000000000000000000000000009" },
                { "AppSKey", "ABCD2000000000000000000000000009ABC02000000000000000000000000009" },
                { "DevAddr", "0000AABB" }
            });

            this.loRaDeviceClient.Setup(x => x.GetTwinAsync())
            .ReturnsAsync(twin);

            var loRaDevice = new LoRaDevice("00000001", "ABC0200000000009", new SingleDeviceConnectionManager(this.loRaDeviceClient.Object));
            await loRaDevice.InitializeAsync();

            Assert.Equal(expectedKeepAliveTimeout, loRaDevice.KeepAliveTimeout);
        }
Ejemplo n.º 3
0
        public async Task When_Downlink_Is_Enabled_In_Twin_Should_Have_DownlinkEnabled_Equals_True(object downlinkTwinPropertyValue)
        {
            var twin = TestUtils.CreateTwin(
                desired: new Dictionary <string, object>
            {
                { "NwkSKey", "ABC02000000000000000000000000009ABC02000000000000000000000000009" },
                { "AppSKey", "ABCD2000000000000000000000000009ABC02000000000000000000000000009" },
                { "DevAddr", "0000AABB" },
                { "GatewayID", "mygateway" },
                { "SensorDecoder", "DecoderValueSensor" },
                { TwinProperty.DownlinkEnabled, downlinkTwinPropertyValue },
                { "$version", 1 },
            },
                reported: new Dictionary <string, object>
            {
                { "$version", 1 },
                { "NwkSKey", "ABC02000000000000000000000000009ABC02000000000000000000000000009" },
                { "AppSKey", "ABCD2000000000000000000000000009ABC02000000000000000000000000009" },
                { "DevAddr", "0000AABB" },
            });

            this.loRaDeviceClient.Setup(x => x.GetTwinAsync())
            .ReturnsAsync(twin);

            var loRaDevice = new LoRaDevice("00000001", "ABC0200000000009", new SingleDeviceConnectionManager(this.loRaDeviceClient.Object));
            await loRaDevice.InitializeAsync();

            Assert.True(loRaDevice.DownlinkEnabled);
        }
Ejemplo n.º 4
0
        public async Task When_Initialized_New_OTAA_Device_Should_Have_All_Properties()
        {
            var twin = TestUtils.CreateTwin(
                desired: new Dictionary <string, object>
            {
                { "AppEUI", "ABC0200000000009" },
                { "AppKey", "ABC02000000000000000000000000009" },
                { "GatewayID", "mygateway" },
                { "SensorDecoder", "DecoderValueSensor" },
                { "$version", 1 },
            },
                reported: new Dictionary <string, object>
            {
                { "$version", 1 },
            });

            this.loRaDeviceClient.Setup(x => x.GetTwinAsync())
            .ReturnsAsync(twin);

            var loRaDevice = new LoRaDevice(string.Empty, "ABC0200000000009", this.loRaDeviceClient.Object);
            await loRaDevice.InitializeAsync();

            Assert.Equal("ABC0200000000009", loRaDevice.AppEUI);
            Assert.Equal("ABC02000000000000000000000000009", loRaDevice.AppKey);
            Assert.Equal("mygateway", loRaDevice.GatewayID);
            Assert.Equal("DecoderValueSensor", loRaDevice.SensorDecoder);
            Assert.Empty(loRaDevice.AppSKey ?? string.Empty);
            Assert.Empty(loRaDevice.NwkSKey ?? string.Empty);
            Assert.Empty(loRaDevice.DevAddr ?? string.Empty);
            Assert.Empty(loRaDevice.DevNonce ?? string.Empty);
            Assert.Empty(loRaDevice.NetID ?? string.Empty);
            Assert.False(loRaDevice.IsABP);
            Assert.False(loRaDevice.IsOurDevice);
        }
Ejemplo n.º 5
0
        public async Task When_Initialized_With_Class_C_And_Custom_RX2DR_Should_Have_Correct_Properties()
        {
            const string appSKey = "ABCD2000000000000000000000000009ABC02000000000000000000000000009";
            const string nwkSKey = "ABC02000000000000000000000000009ABC02000000000000000000000000009";

            var twin = TestUtils.CreateTwin(
                desired: new Dictionary <string, object>
            {
                { "AppEUI", "ABC02000000000000000000000000009ABC02000000000000000000000000009" },
                { "AppKey", "ABCD2000000000000000000000000009ABC02000000000000000000000000009" },
                { "ClassType", "C" },
                { "GatewayID", "mygateway" },
                { "SensorDecoder", "http://mydecoder" },
                { "RX2DataRate", "10" },
                { "$version", 1 },
            },
                reported: new Dictionary <string, object>
            {
                { "$version", 1 },
                { "NwkSKey", nwkSKey },
                { "AppSKey", appSKey },
                { "DevAddr", "0000AABB" },
                { "FCntDown", 9 },
                { "FCntUp", 100 },
                { "DevEUI", "ABC0200000000009" },
                { "NetId", "010000" },
                { "DevNonce", "C872" },
                { "RX2DataRate", 10 },
                { "Region", "US915" },
            });

            this.loRaDeviceClient.Setup(x => x.GetTwinAsync())
            .ReturnsAsync(twin);

            var loRaDevice = new LoRaDevice("00000001", "ABC0200000000009", new SingleDeviceConnectionManager(this.loRaDeviceClient.Object));
            await loRaDevice.InitializeAsync();

            Assert.Equal(LoRaDeviceClassType.C, loRaDevice.ClassType);
            Assert.Equal("mygateway", loRaDevice.GatewayID);
            Assert.Equal(9u, loRaDevice.FCntDown);
            Assert.Equal(100u, loRaDevice.FCntUp);
            Assert.Equal(10, loRaDevice.ReportedRX2DataRate.Value);
            Assert.Equal(10, loRaDevice.DesiredRX2DataRate.Value);
            Assert.Equal(appSKey, loRaDevice.AppSKey);
            Assert.Equal(nwkSKey, loRaDevice.NwkSKey);
            Assert.Equal(LoRaRegionType.US915, loRaDevice.LoRaRegion);
            Assert.False(loRaDevice.IsABP);
        }
Ejemplo n.º 6
0
        public async Task When_Initialized_With_PreferredGateway_And_Region_Should_Get_Properties(
            [CombinatorialValues("EU868", "3132", "eu868", "US915", "us915", "eu")] string regionValue)
        {
            var twin = TestUtils.CreateTwin(
                desired: new Dictionary <string, object>
            {
                { "NwkSKey", "ABC02000000000000000000000000009ABC02000000000000000000000000009" },
                { "AppSKey", "ABCD2000000000000000000000000009ABC02000000000000000000000000009" },
                { "DevAddr", "0000AABB" },
                { "GatewayID", "mygateway" },
                { "SensorDecoder", "DecoderValueSensor" },
                { "$version", 1 },
            },
                reported: new Dictionary <string, object>
            {
                { "$version", 1 },
                { "NwkSKey", "ABC02000000000000000000000000009ABC02000000000000000000000000009" },
                { "AppSKey", "ABCD2000000000000000000000000009ABC02000000000000000000000000009" },
                { "DevAddr", "0000AABB" },
                { "FCntDown", 10 },
                { "FCntUp", 20 },
                { "PreferredGatewayID", "gateway1" },
                { "Region", regionValue }
            });

            this.loRaDeviceClient.Setup(x => x.GetTwinAsync())
            .ReturnsAsync(twin);

            var loRaDevice = new LoRaDevice("00000001", "ABC0200000000009", new SingleDeviceConnectionManager(this.loRaDeviceClient.Object));
            await loRaDevice.InitializeAsync();

            Assert.Equal("gateway1", loRaDevice.PreferredGatewayID);

            if (string.Equals(LoRaRegionType.EU868.ToString(), regionValue, StringComparison.InvariantCultureIgnoreCase))
            {
                Assert.Equal(LoRaRegionType.EU868, loRaDevice.LoRaRegion);
            }
            else if (string.Equals(LoRaRegionType.US915.ToString(), regionValue, StringComparison.InvariantCultureIgnoreCase))
            {
                Assert.Equal(LoRaRegionType.US915, loRaDevice.LoRaRegion);
            }
            else
            {
                Assert.Equal(LoRaRegionType.NotSet, loRaDevice.LoRaRegion);
            }
        }
Ejemplo n.º 7
0
        public async Task When_Initialized_New_OTAA_Device_Should_Have_All_Properties()
        {
            var appKey  = TestKeys.CreateAppKey(0xABC0200000000000, 0x09);
            var joinEui = new JoinEui(0xABC0200000000009);

            var twin = TestUtils.CreateTwin(
                desired: new Dictionary <string, object>
            {
                { "AppEUI", joinEui.ToString() },
                { "AppKey", appKey.ToString() },
                { "GatewayID", "mygateway" },
                { "SensorDecoder", "DecoderValueSensor" },
                { "$version", 1 },
            },
                reported: new Dictionary <string, object>
            {
                { "$version", 1 },
            });

            this.loRaDeviceClient.Setup(x => x.GetTwinAsync(CancellationToken.None))
            .ReturnsAsync(twin);

            using var connectionManager = new SingleDeviceConnectionManager(this.loRaDeviceClient.Object);
            using var loRaDevice        = new LoRaDevice(null, new DevEui(0xabc0200000000009), connectionManager);
            await loRaDevice.InitializeAsync(this.configuration);

            Assert.Equal(joinEui, loRaDevice.AppEui);
            Assert.Equal(appKey, loRaDevice.AppKey);
            Assert.Equal("mygateway", loRaDevice.GatewayID);
            Assert.Equal("DecoderValueSensor", loRaDevice.SensorDecoder);
            Assert.Equal(0U, loRaDevice.FCntDown);
            Assert.Equal(0U, loRaDevice.LastSavedFCntDown);
            Assert.Equal(0U, loRaDevice.FCntUp);
            Assert.Equal(0U, loRaDevice.LastSavedFCntUp);
            Assert.False(loRaDevice.HasFrameCountChanges);
            Assert.Null(loRaDevice.AppSKey);
            Assert.Null(loRaDevice.NwkSKey);
            Assert.Null(loRaDevice.DevAddr);
            Assert.Null(loRaDevice.DevNonce);
            Assert.Null(loRaDevice.NetId);
            Assert.False(loRaDevice.IsABP);
            Assert.False(loRaDevice.IsOurDevice);
            Assert.Null(loRaDevice.ReportedDwellTimeSetting);
        }
Ejemplo n.º 8
0
        public async Task When_Initialized_ABP_Device_Should_Have_All_Properties()
        {
            var twin = TestUtils.CreateTwin(
                desired: new Dictionary <string, object>
            {
                { "NwkSKey", "ABC02000000000000000000000000009ABC02000000000000000000000000009" },
                { "AppSKey", "ABCD2000000000000000000000000009ABC02000000000000000000000000009" },
                { "DevAddr", "0000AABB" },
                { "GatewayID", "mygateway" },
                { "SensorDecoder", "DecoderValueSensor" },
                { "$version", 1 },
            },
                reported: new Dictionary <string, object>
            {
                { "$version", 1 },
                { "NwkSKey", "ABC02000000000000000000000000009ABC02000000000000000000000000009" },
                { "AppSKey", "ABCD2000000000000000000000000009ABC02000000000000000000000000009" },
                { "DevAddr", "0000AABB" },
            });

            this.loRaDeviceClient.Setup(x => x.GetTwinAsync())
            .ReturnsAsync(twin);

            var loRaDevice = new LoRaDevice("00000001", "ABC0200000000009", new SingleDeviceConnectionManager(this.loRaDeviceClient.Object));
            await loRaDevice.InitializeAsync();

            Assert.Empty(loRaDevice.AppEUI ?? string.Empty);
            Assert.Empty(loRaDevice.AppKey ?? string.Empty);
            Assert.Equal("mygateway", loRaDevice.GatewayID);
            Assert.Equal("DecoderValueSensor", loRaDevice.SensorDecoder);
            Assert.True(loRaDevice.IsABP);
            Assert.True(loRaDevice.IsOurDevice);
            Assert.Equal(0U, loRaDevice.FCntDown);
            Assert.Equal(0U, loRaDevice.LastSavedFCntDown);
            Assert.Equal(0U, loRaDevice.FCntUp);
            Assert.Equal(0U, loRaDevice.LastSavedFCntUp);
            Assert.False(loRaDevice.HasFrameCountChanges);
            Assert.Equal("ABC02000000000000000000000000009ABC02000000000000000000000000009", loRaDevice.NwkSKey);
            Assert.Equal("ABCD2000000000000000000000000009ABC02000000000000000000000000009", loRaDevice.AppSKey);
            Assert.Empty(loRaDevice.DevNonce ?? string.Empty);
            Assert.Equal("0000AABB", loRaDevice.DevAddr);
        }
Ejemplo n.º 9
0
        public async Task When_Initialized_ABP_Device_Has_Fcnt_Should_Have_Non_Zero_Fcnt_Values()
        {
            var twin = TestUtils.CreateTwin(
                desired: new Dictionary <string, object>
            {
                { "NwkSKey", "ABC02000000000000000000000000009ABC02000000000000000000000000009" },
                { "AppSKey", "ABCD2000000000000000000000000009ABC02000000000000000000000000009" },
                { "DevAddr", "0000AABB" },
                { "GatewayID", "mygateway" },
                { "SensorDecoder", "DecoderValueSensor" },
                { "$version", 1 },
            },
                reported: new Dictionary <string, object>
            {
                { "$version", 1 },
                { "NwkSKey", "ABC02000000000000000000000000009ABC02000000000000000000000000009" },
                { "AppSKey", "ABCD2000000000000000000000000009ABC02000000000000000000000000009" },
                { "DevAddr", "0000AABB" },
                { "FCntDown", 10 },
                { "FCntUp", 20 },
            });

            this.loRaDeviceClient.Setup(x => x.GetTwinAsync())
            .ReturnsAsync(twin);

            var loRaDevice = new LoRaDevice("00000001", "ABC0200000000009", new SingleDeviceConnectionManager(this.loRaDeviceClient.Object));
            await loRaDevice.InitializeAsync();

            Assert.True(loRaDevice.IsOurDevice);
            Assert.Equal(10U, loRaDevice.FCntDown);
            Assert.Equal(10U, loRaDevice.LastSavedFCntDown);
            Assert.Equal(20U, loRaDevice.FCntUp);
            Assert.Equal(20U, loRaDevice.LastSavedFCntUp);
            Assert.Empty(loRaDevice.PreferredGatewayID);
            Assert.Equal(LoRaRegionType.NotSet, loRaDevice.LoRaRegion);
            Assert.False(loRaDevice.HasFrameCountChanges);
        }