public MonitoringService CreateMonitoringService() { var dataContext = new Data.UnitTestContext(); var providerManager = new MachineProviderManager(machine => null); var machineManager = new Mock <IMachineManager>(); var configurationManager = new Mock <IConfigurationManager>(); configurationManager.Setup(x => x.GetApplicationSettings()).Returns(new ApplicationSettings()); return(new MonitoringService(machineManager.Object, configurationManager.Object, providerManager)); }
public async Task ShouldPollProviders() { var statuses = new List <MachineStatus>(); var dataContext = new Data.UnitTestContext(); var configurationManager = new Mock <IConfigurationManager>(); var providerManager = new MachineProviderManager(machine => { var mock = new Mock <IMachineProvider>(); mock.Setup(x => x.GetStatus(It.IsAny <CancellationToken>())) .Returns(() => { return(Task.FromResult(new MachineStatus { MachineId = machine.Id })); }); return(mock.Object); }); var machineCount = 10; var machines = dataContext.GetRepository <Machine>(); for (int i = 0; i < machineCount; i++) { machines.Create(new OctoprintMachine { Name = "machine_" + i }); } var monitoringService = new MonitoringService(new MachineManager(dataContext, providerManager), configurationManager.Object, providerManager); monitoringService.StatusUpdate += (sender, args) => { statuses.Add(args.Data); }; monitoringService.PollProviders(); //The poll providers method is configured to run the task in the back ground and then //push the updates with an event. So wait a big to let the tasks complete. await Task.Delay(machineCount * 10); Assert.AreEqual(machineCount, statuses.Count); for (var i = 1; i <= machineCount; i++) { Assert.True(statuses.Any(status => status.MachineId == i)); } }