Exemple #1
0
 public void DelayShouldCancelWithToken()
 {
     // ARRANGE
     using var tokenSource = new CancellationTokenSource(50);
     // ACT & ASSERT
     Assert.Throws <OperationCanceledException>(() => DefaultDaemonRxApp.Delay(TimeSpan.FromMilliseconds(300), tokenSource.Token));
 }
Exemple #2
0
        /// <summary>
        ///     Initializes on each test run
        /// </summary>
        public new async Task InitializeAsync()
        {
            await base.InitializeAsync().ConfigureAwait(false);

            await DefaultDaemonApp.StartUpAsync(DefaultDaemonHost).ConfigureAwait(false);

            await DefaultDaemonRxApp.StartUpAsync(DefaultDaemonHost).ConfigureAwait(false);

            await DefaultMockedRxApp.Object.StartUpAsync(DefaultDaemonHost).ConfigureAwait(false);
        }
Exemple #3
0
        public async Task RunScriptWithDomainShouldCallCorrectFunction()
        {
            // ARRANGE
            await InitializeFakeDaemon().ConfigureAwait(false);

            // ACT
            DefaultDaemonRxApp.RunScript("script.myscript");
            await RunFakeDaemonUntilTimeout().ConfigureAwait(false);

            // ASSERT
            DefaultHassClientMock.VerifyCallServiceTimes("myscript", Times.Once());
        }
Exemple #4
0
        public async Task TriggerWebhookWithNullDataShouldCallCorrectFunction()
        {
            // ARRANGE
            await InitializeFakeDaemon().ConfigureAwait(false);

            // ACT
            DefaultDaemonRxApp.TriggerWebhook("some-id", null);
            await RunFakeDaemonUntilTimeout().ConfigureAwait(false);

            // ASSERT
            VerifyTriggerWebhook("some-id", null);
        }
Exemple #5
0
        public void DelayShouldDelaySyncronysly()
        {
            // ARRANGE
            var startTime = DateTime.Now;

            // ACT
            DefaultDaemonRxApp.Delay(TimeSpan.FromMilliseconds(100));
            // Compensate that windows resolution is 15ms for system clock
            bool isAfterTimeout = DateTime.Now.Subtract(startTime).TotalMilliseconds >= 84;

            // ASSERT
            Assert.True(isAfterTimeout);
        }
Exemple #6
0
        public async Task StateShouldReturnCorrectEntity()
        {
            // ARRANGE
            await InitializeFakeDaemon().ConfigureAwait(false);

            // ACT
            var entity = DefaultDaemonRxApp.State("binary_sensor.pir");

            await RunFakeDaemonUntilTimeout().ConfigureAwait(false);

            // ASSERT
            Assert.NotNull(entity);
        }
Exemple #7
0
        public async Task StateShouldReturnNullIfAttributeNotExist()
        {
            // ARRANGE
            await InitializeFakeDaemon().ConfigureAwait(false);

            // ACT
            var entity = DefaultDaemonRxApp.State("binary_sensor.pir");

            await RunFakeDaemonUntilTimeout().ConfigureAwait(false);

            // ASSERT
            Assert.Null(entity?.Attribute?.not_exists);
        }
Exemple #8
0
        public void DelayShouldDelaySyncronyslyWithToken()
        {
            // ARRANGE
            var startTime = DateTime.Now;

            using var tokenSource = new CancellationTokenSource();
            // ACT
            DefaultDaemonRxApp.Delay(TimeSpan.FromMilliseconds(100), tokenSource.Token);
            // ASSERT
            // Compensate that windows resolution is 15ms for system clock
            bool isAfterTimeout = DateTime.Now.Subtract(startTime).TotalMilliseconds >= 84;

            Assert.True(isAfterTimeout);
        }
Exemple #9
0
        /// <summary>
        ///     Clean-up any initialized test objects
        /// </summary>
        public new async Task DisposeAsync()
        {
            await base.DisposeAsync().ConfigureAwait(false);

            await _notConnectedDaemonHost.DisposeAsync().ConfigureAwait(false);

            await DefaultDaemonApp.DisposeAsync().ConfigureAwait(false);

            await DefaultDaemonRxApp.DisposeAsync().ConfigureAwait(false);

            await DefaultMockedRxApp.Object.DisposeAsync().ConfigureAwait(false);

            await DefaultDaemonRxApp.DisposeAsync().ConfigureAwait(false);
        }
Exemple #10
0
        public async Task SetStateShouldReturnCorrectData()
        {
            // ARRANGE
            await InitializeFakeDaemon().ConfigureAwait(false);

            var(dynObj, expObj) = GetDynamicObject(
                ("attr", "value"));

            // ACT
            DefaultDaemonRxApp.SetState("sensor.any_sensor", "on", dynObj);
            await RunFakeDaemonUntilTimeout().ConfigureAwait(false);

            // ASSERT
            DefaultHassClientMock.Verify(n => n.SetState("sensor.any_sensor", "on", expObj));
        }
Exemple #11
0
        public async Task CallServiceShouldCallCorrectFunction()
        {
            // ARRANGE
            await InitializeFakeDaemon().ConfigureAwait(false);

            var(dynObj, _) = GetDynamicObject(
                ("attr", "value"));

            // ACT
            DefaultDaemonRxApp.CallService("mydomain", "myservice", dynObj);
            await RunFakeDaemonUntilTimeout().ConfigureAwait(false);

            // ASSERT
            VerifyCallServiceTuple("mydomain", "myservice", ("attr", "value"));
        }
Exemple #12
0
        public async Task RunInFailureShouldLogError()
        {
            // ARRANGE
            await InitializeFakeDaemon().ConfigureAwait(false);

            // ACT
            DefaultDaemonRxApp.RunIn(TimeSpan.FromMilliseconds(100), () => throw new Exception("RxError"));

            // ASSERT
            await Task.Delay(150).ConfigureAwait(false);

            await RunFakeDaemonUntilTimeout().ConfigureAwait(false);

            LoggerMock.AssertLogged(LogLevel.Error, Times.Once());
        }
Exemple #13
0
        public async Task GetDataShouldReturnCachedValue()
        {
            // ARRANGE
            await InitializeFakeDaemon().ConfigureAwait(false);

            // ACT

            DefaultDaemonRxApp.SaveData("GetDataShouldReturnCachedValue_id", "saved data");

            DefaultDaemonRxApp.GetData <string>("GetDataShouldReturnCachedValue_id");

            await RunFakeDaemonUntilTimeout().ConfigureAwait(false);

            // ASSERT
            DefaultDataRepositoryMock.Verify(n => n.Get <string>(It.IsAny <string>()), Times.Never);
            DefaultDataRepositoryMock.Verify(n => n.Save <string>(It.IsAny <string>(), It.IsAny <string>()), Times.Once);
        }
Exemple #14
0
        public async Task SavedDataShouldReturnSameDataUsingExpando()
        {
            // ARRANGE
            await InitializeFakeDaemon().ConfigureAwait(false);

            dynamic data = new ExpandoObject();

            data.Item = "Some data";

            // ACT
            DefaultDaemonRxApp.SaveData("data_exists", data);
            var collectedData = DefaultDaemonRxApp.GetData <ExpandoObject>("data_exists");

            await RunFakeDaemonUntilTimeout().ConfigureAwait(false);

            // ASSERT
            Assert.Equal(data, collectedData);
        }
Exemple #15
0
        public async Task RunScriptShouldCallCorrectFunction()
        {
            // ARRANGE
            await InitializeFakeDaemon().ConfigureAwait(false);

            var(dynObj, expObj) = GetDynamicObject(
                ("attr", "value"));

            // ACT
            DefaultDaemonRxApp.RunScript("myscript");
            await RunFakeDaemonUntilTimeout().ConfigureAwait(false);


            // ASSERT


            DefaultHassClientMock.VerifyCallServiceTimes("myscript", Times.Once());
        }
Exemple #16
0
        public async Task UsingEntityNewEventShouldNotCallFunction()
        {
            // ARRANGE
            await InitializeFakeDaemon().ConfigureAwait(false);

            var called = false;

            // ACT
            DefaultDaemonRxApp.Entity("binary_sensor.other_pir")
            .StateChanges
            .Subscribe(_ => called = true);

            DefaultHassClientMock.AddChangedEvent("binary_sensor.pir", "off", "on");

            await RunFakeDaemonUntilTimeout().ConfigureAwait(false);

            // ASSERT
            Assert.False(called);
        }
Exemple #17
0
        public async Task CallbackObserverAttributeMissingShouldReturnNull()
        {
            // ARRANGE
            await InitializeFakeDaemon().ConfigureAwait(false);

            string?missingString = "has initial value";

            // ACT
            DefaultDaemonRxApp.Entities(n => n.EntityId.StartsWith("binary_sensor.pir", true, CultureInfo.InvariantCulture))
            .StateChanges
            .Subscribe(s => missingString = s.New.Attribute?.missing_attribute);

            DefaultHassClientMock.AddChangedEvent("binary_sensor.pir_2", "off", "on");

            await RunFakeDaemonUntilTimeout().ConfigureAwait(false);

            // ASSERT
            Assert.Null(missingString);
        }
Exemple #18
0
        public async Task UsingEntitiesLambdaNewEventShouldCallFunction()
        {
            // ARRANGE
            await InitializeFakeDaemon().ConfigureAwait(false);

            var called = false;

            // ACT
            DefaultDaemonRxApp.Entities(n => n.EntityId.StartsWith("binary_sensor.pir", true, CultureInfo.InvariantCulture))
            .StateChanges
            .Subscribe(_ => called = true);

            DefaultHassClientMock.AddChangedEvent("binary_sensor.pir_2", "off", "on");

            await RunFakeDaemonUntilTimeout().ConfigureAwait(false);

            // ASSERT
            Assert.True(called);
        }
Exemple #19
0
        public async Task NDFirstOrTimeOutShouldReturnCorrectStateChange()
        {
            // ARRANGE
            using var waitFor = new CancellationTokenSource(300);

            await InitializeFakeDaemon().ConfigureAwait(false);

            var task = Task.Run(async() =>
            {
                await Task.Delay(20).ConfigureAwait(false);
                DefaultHassClientMock.AddChangedEvent("binary_sensor.pir2", "on", "off");
            });
            var result = DefaultDaemonRxApp.Entity("binary_sensor.pir2").StateChanges.NDFirstOrTimeout(TimeSpan.FromMilliseconds(300));

            await RunFakeDaemonUntilTimeout().ConfigureAwait(false);

            // ASSERT
            Assert.NotNull(result);
        }
Exemple #20
0
        public async Task NDFirstOrTimeOutShouldReturnCorrectNullOnCancel()
        {
            // ARRANGE
            await InitializeFakeDaemon().ConfigureAwait(false);

            (EntityState Old, EntityState New)? result  = null;
            using CancellationTokenSource _cancelSource = new(10);

            // ACT
            DefaultDaemonRxApp.Entity("binary_sensor.pir")
            .StateChanges
            .Subscribe(_ => result = DefaultDaemonRxApp.Entity("binary_sensor.pir2").StateChanges.NDFirstOrTimeout(TimeSpan.FromMilliseconds(300), _cancelSource.Token));
            DefaultHassClientMock.AddChangedEvent("binary_sensor.pir", "off", "on");

            await RunFakeDaemonUntilTimeout().ConfigureAwait(false);

            // ASSERT
            Assert.Null(result);
        }
Exemple #21
0
        public async Task RunInShouldCallFunction()
        {
            // ARRANGE
            var called = false;

            await InitializeFakeDaemon().ConfigureAwait(false);

            // ACT
            DefaultDaemonRxApp.RunIn(TimeSpan.FromMilliseconds(100), () => called = true);

            // ASSERT
            Assert.False(called);

            await Task.Delay(150).ConfigureAwait(false);

            await RunFakeDaemonUntilTimeout().ConfigureAwait(false);

            Assert.True(called);
        }