public async Task CancellingViaCancellationToken_TerminatesEarly() { var cts = new CancellationTokenSource(); //create a ridiculously long job for purposes of this unit test var job = new IrrigationJob { Duration = TimeSpan.FromMinutes(5), Valve = 1 }; //queue it for execution await _channel.Writer.WriteAsync(job); await _processor.StartAsync(cts.Token); //give it a little bit to kick off await Task.Delay(TimeSpan.FromSeconds(1)); //now stop it cts.Cancel(); //give it a few seconds to wrap up await Task.Delay(TimeSpan.FromSeconds(1)); Assert.Equal(PinValue.High, _gpioDriver.Pins[1].Value); //master control valve should be off Assert.Equal(PinValue.High, _gpioDriver.Pins[2].Value); //irrigation valve should be off }
private async Task Irrigate_CreatesIrrigationJob() { var job = new IrrigationJob(); var result = await _controller.Irrigate(new[] { job }); _channel.Writer.Complete(); var writtenJobs = new List <IrrigationJob>(); await foreach (var writtenJob in _channel.Reader.ReadAllAsync()) { writtenJobs.Add(writtenJob); } }
public async Task <IActionResult> TestValve(int valveNumber) { var valve = _config.Valves.FirstOrDefault(v => v.ValveNumber == valveNumber); if (valve == null) { return(this.Problem($"Valve number {valveNumber} is not a valid valve number")); } var job = new IrrigationJob() { Valve = valveNumber, Duration = TimeSpan.FromMinutes(2) }; await _irrigationJobs.WriteAsync(job); return(Accepted()); }
public async Task Processor_TerminatesEarly_ForStopSignal() { //create a ridiculously long job for purposes of this unit test var job = new IrrigationJob { Duration = TimeSpan.FromMinutes(5), Valve = 1 }; //queue it for execution await _channel.Writer.WriteAsync(job); await _processor.StartAsync(CancellationToken.None); //give it a little bit to kick off await Task.Delay(TimeSpan.FromSeconds(1)); _stopper.RequestStop(); //give it a few seconds to wrap up await Task.Delay(TimeSpan.FromSeconds(1)); Assert.Equal(PinValue.High, _gpioDriver.Pins[1].Value); //master control valve should be off Assert.Equal(PinValue.High, _gpioDriver.Pins[2].Value); //irrigation valve should be off }
public async Task IrrigationJob_Irrigates() { var job = new IrrigationJob { Duration = TimeSpan.FromSeconds(3), Valve = 1 }; //queue it for execution await _channel.Writer.WriteAsync(job); await _processor.StartAsync(CancellationToken.None); //give it a little bit to kick off await Task.Delay(TimeSpan.FromSeconds(1)); Assert.Equal(PinValue.Low, _gpioDriver.Pins[1].Value); //master control valve should be on Assert.Equal(PinValue.Low, _gpioDriver.Pins[2].Value); //irrigation valve should be on //give it a few seconds to wrap up await Task.Delay(TimeSpan.FromSeconds(3)); Assert.Equal(PinValue.High, _gpioDriver.Pins[1].Value); //master control valve should be off Assert.Equal(PinValue.High, _gpioDriver.Pins[2].Value); //irrigation valve should be off }