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>())); }
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); }
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); }
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); }
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); }
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); }