Пример #1
0
        public async Task new_rfaddress_is_suggested_if_already_in_use()
        {
            Logger.Debug("Start test {0}", nameof(new_rfaddress_is_suggested_if_already_in_use));

            //Arrange
            var rfId = _testableGateway.GetNextRfId();

            _dbCtx.Nodes.Add(new Node {
                RfAddress = rfId, RfNetwork = Constants.NetworkId, Signature = 3, Configuration = new NodeConfiguration(), LatestValues = new LatestValues()
            });
            _dbCtx.Commit();

            var cts            = new CancellationTokenSource();
            var startupMessage = new NodeStartedReport {
                FromNodeId = rfId, Major = 1, Minor = 2, Signature = 4
            };

            _msgChannel.Setup(_ => _.ReadAsync(cts.Token)).ReturnsAsync(startupMessage);

            //Act
            await _gtw.RunOnceAsync(cts.Token);

            //Assert
            _msgChannel.Verify(_ => _.SendAsync(It.Is <NodeConfigCommand>(c => c.Signature == 4 && c.NewRfAddress != rfId), It.IsAny <CancellationToken>()));
        }
Пример #2
0
        public async Task NodeStart_ReuseRfADdress_When_Exists()
        {
            var dbCtx = RegisterDbContext(nameof(NodeStart_ReuseRfADdress_When_Exists));

            dbCtx.Nodes.Add(new Node()
            {
                RfAddress      = 3,
                Signature      = long.MaxValue,
                AggregatedData = new NodeAggregatedData {
                },
                Metadata       = new NodeMetadata {
                }
            });
            dbCtx.SaveChanges();
            var nodeStartedReport = new NodeStartedReport
            {
                FromRfAddress = 3,
                Rssi          = -90,
                Signature     = long.MaxValue,
                Version       = "1234567",
            };

            var responses = await Hub.ProcessOne(nodeStartedReport, _cts.Token);

            Assert.Equal(1, responses.Count);
            var configCommand = Assert.IsType <NodeConfigCommand>(responses[0]);

            Assert.Equal(nodeStartedReport.Signature, configCommand.Signature);
            Assert.Equal(3, configCommand.ToRfAddress);
            Assert.Equal(3, configCommand.NewRfAddress);
        }
Пример #3
0
        public async Task NodeStart_CreateNode_When_SignatureNotFound()
        {
            var dbCtx = RegisterDbContext(nameof(NodeStart_CreateNode_When_SignatureNotFound));

            var nodeStartedReport = new NodeStartedReport
            {
                FromRfAddress = 2,
                Rssi          = -90,
                Signature     = long.MaxValue,
                Version       = "1234567",
            };

            var responses = await Hub.ProcessOne(nodeStartedReport, _cts.Token);

            //Node is properly created in Db
            Assert.Equal(1, dbCtx.Nodes.Count());
            var dbNode = dbCtx.Nodes.Single();

            Assert.True(dbNode.RfAddress > 0);
            Assert.Equal("1234567", dbNode.Metadata.Version);

            //Config message is correct
            Assert.Equal(1, responses.Count);
            var configCommand = Assert.IsType <NodeConfigCommand>(responses[0]);

            Assert.Equal(nodeStartedReport.Signature, configCommand.Signature);
            Assert.Equal(nodeStartedReport.FromRfAddress, configCommand.ToRfAddress);
            Assert.Equal(dbNode.RfAddress, configCommand.NewRfAddress);
        }
Пример #4
0
        public async Task no_config_command_if_node_has_unique_rfAddress()
        {
            Logger.Debug("Start test {0}", nameof(no_config_command_if_node_has_unique_rfAddress));

            //Arrange
            var rfId           = _testableGateway.GetNextRfId();
            var cts            = new CancellationTokenSource();
            var startupMessage = new NodeStartedReport {
                FromNodeId = rfId, Major = 1, Minor = 2, Signature = 2
            };

            _msgChannel.Setup(_ => _.ReadAsync(cts.Token)).ReturnsAsync(startupMessage);

            //Act
            await _gtw.RunOnceAsync(cts.Token);

            //Assert
            _msgChannel.Verify(_ => _.SendAsync(It.IsAny <NodeConfigCommand>(), It.IsAny <CancellationToken>()), Times.Never);
        }
Пример #5
0
        public async Task nodes_are_created_the_first_time_they_startup()
        {
            Logger.Debug("Start test {0}", nameof(nodes_are_created_the_first_time_they_startup));
            //Arrange
            var rfId           = _testableGateway.GetNextRfId();
            var cts            = new CancellationTokenSource();
            var startupMessage = new NodeStartedReport {
                FromNodeId = rfId, Major = 1, Minor = 2, Signature = 1
            };

            _msgChannel.Setup(_ => _.ReadAsync(cts.Token)).ReturnsAsync(startupMessage);

            //Act
            await _gtw.RunOnceAsync(cts.Token);

            //Assert
            var expectedNode = _dbCtx.Nodes.SingleOrDefault(_ => _.Signature == 1);

            Assert.NotNull(expectedNode);
        }
Пример #6
0
        public async Task NodeStart_Update_LastSeen_LastStartupTime()
        {
            var dbCtx = RegisterDbContext(nameof(NodeStart_Update_LastSeen_LastStartupTime));

            var nodeStartedReport = new NodeStartedReport
            {
                FromRfAddress = 3,
                Rssi          = -90,
                Signature     = long.MaxValue,
                Version       = "1234567",
            };

            var ancianTime = DateTime.UtcNow.AddDays(-1);
            var modernTime = DateTime.UtcNow;

            dbCtx.Nodes.Add(new Node()
            {
                RfAddress      = nodeStartedReport.FromRfAddress,
                Signature      = nodeStartedReport.Signature,
                AggregatedData = new NodeAggregatedData {
                    StartupTime = ancianTime
                },
                Metadata = new NodeMetadata {
                }
            });
            dbCtx.SaveChanges();

            RegisterMock <ITimeProvider>()
            .Setup(_ => _.UtcNow).Returns(modernTime);

            await Hub.ProcessOne(nodeStartedReport, _cts.Token);

            var dbNode = dbCtx.Nodes.Single(x => x.Signature == nodeStartedReport.Signature);

            Assert.Equal(modernTime, dbNode.AggregatedData.StartupTime);
            Assert.Equal(modernTime, dbNode.LastSeen);
        }