public DeviceMonitorWithExpiry(
            [NotNull] ILogger logger,
            [NotNull] IDateTimeOffset dateTimeOffset,
            [NotNull] IDeviceMonitor deviceMonitor,
            [NotNull] ISubject <IDevice> deviceExpired,
            [NotNull] IObservableTimerFactory factory,
            [NotNull] IScheduler scheduler)
        {
            Guard.ArgumentNotNull(logger,
                                  nameof(logger));
            Guard.ArgumentNotNull(dateTimeOffset,
                                  nameof(dateTimeOffset));
            Guard.ArgumentNotNull(deviceMonitor,
                                  nameof(deviceMonitor));
            Guard.ArgumentNotNull(deviceExpired,
                                  nameof(deviceExpired));
            Guard.ArgumentNotNull(factory,
                                  nameof(factory));
            Guard.ArgumentNotNull(scheduler,
                                  nameof(scheduler));

            _logger         = logger;
            _dateTimeOffset = dateTimeOffset;
            _deviceMonitor  = deviceMonitor;
            _deviceExpired  = deviceExpired;

            _timer = factory.Create(TimeOut,
                                    scheduler)
                     .SubscribeOn(scheduler)
                     .Subscribe(CleanUp,
                                OnError,
                                OnCompleted);
        }
Exemple #2
0
        public void Constructor_ForFactoryNull_Throws(
            Lazy <DeviceMonitorWithExpiry> sut,
            [BeNull] IObservableTimerFactory factory)
        {
            // ReSharper disable once UnusedVariable
            Action action = () =>
            {
                var test = sut.Value;
            };

            action.Should()
            .Throw <ArgumentNullException>()
            .WithParameter(nameof(factory));
        }
Exemple #3
0
        public void OnError_ForInvoked_CallsStop(
            ILogger logger,
            IDateTimeOffset dateTimeOffset,
            IDeviceMonitor deviceMonitor,
            ISubject <IDevice> deviceExpired,
            IObservableTimerFactory factory,
            TestScheduler scheduler)
        {
            factory.Create(Arg.Any <TimeSpan>(),
                           Arg.Any <IScheduler>())
            .Returns(Observable.Throw <long>(new Exception()));

            var sut = new DeviceMonitorWithExpiry(logger,
                                                  dateTimeOffset,
                                                  deviceMonitor,
                                                  deviceExpired,
                                                  factory,
                                                  scheduler);

            scheduler.AdvanceBy(sut.TimeOut.Ticks);

            deviceMonitor.Received()
            .Stop();
        }