Exemplo n.º 1
0
        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
        }
Exemplo n.º 2
0
        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());
        }
Exemplo n.º 4
0
        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
        }
Exemplo n.º 5
0
        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
        }