public async Task Timeouts()
        {
            controller.StartTimeout = TimeSpan.FromSeconds(2);
            OnActivate = null;
            GetPlayer = () => new Mockups.Vpaid();

            var adSource = GetLinearAdSource();

            var cancellationToken = new CancellationToken();
            var progress = new Progress<AdStatus>();

            // adsource timeout
            var timeoutAdSource = new Mockups.DelayAdSource(3000) { Type = "vast" };
            await UnitTestExtensions.ThrowsExceptionAsync<TimeoutException>(async () => await controller.PlayAdAsync(timeoutAdSource).AsTask(cancellationToken, progress));
            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);

            // NOTE: ad takes 4 seconds to start and 8 seconds to finish
            // initad timeout
            controller.StartTimeout = TimeSpan.FromSeconds(1);
            await UnitTestExtensions.ThrowsExceptionAsync<TimeoutException>(async () => await controller.PlayAdAsync(adSource).AsTask(cancellationToken, progress));
            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);

            // startad timeout
            controller.StartTimeout = TimeSpan.FromSeconds(3);
            await UnitTestExtensions.ThrowsExceptionAsync<TimeoutException>(async () => await controller.PlayAdAsync(adSource).AsTask(cancellationToken, progress));
            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);

            // timeout reached during playing (no exception thrown)
            controller.StartTimeout = TimeSpan.FromSeconds(5);
            await controller.PlayAdAsync(adSource).AsTask(cancellationToken, progress);
            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);

            // timeout reached during stopping (no exception thrown)
            controller.StartTimeout = TimeSpan.FromSeconds(7);
            await controller.PlayAdAsync(adSource).AsTask(cancellationToken, progress);
            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);

            // timeout reached after ad finishes playing (no exception thrown)
            controller.StartTimeout = TimeSpan.FromSeconds(10);
            await controller.PlayAdAsync(adSource).AsTask(cancellationToken, progress);
            await Task.Delay(3000); // wait a little bit so timeout actually gets hit
            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);

            // no timeout specified
            controller.StartTimeout = null;
            await controller.PlayAdAsync(adSource).AsTask(cancellationToken, progress);
            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);
        }
Esempio n. 2
0
        public async Task Timeouts()
        {
            controller.StartTimeout = TimeSpan.FromSeconds(2);
            OnActivate = null;
            GetPlayer  = () => new Mockups.Vpaid();

            var adSource = GetLinearAdSource();

            var cancellationToken = new CancellationToken();
            var progress          = new Progress <AdStatus>();

            // adsource timeout
            var timeoutAdSource = new Mockups.DelayAdSource(3000)
            {
                Type = "vast"
            };
            await UnitTestExtensions.ThrowsExceptionAsync <TimeoutException>(async() => await controller.PlayAdAsync(timeoutAdSource).AsTask(cancellationToken, progress));

            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);

            // NOTE: ad takes 4 seconds to start and 8 seconds to finish
            // initad timeout
            controller.StartTimeout = TimeSpan.FromSeconds(1);
            await UnitTestExtensions.ThrowsExceptionAsync <TimeoutException>(async() => await controller.PlayAdAsync(adSource).AsTask(cancellationToken, progress));

            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);

            // startad timeout
            controller.StartTimeout = TimeSpan.FromSeconds(3);
            await UnitTestExtensions.ThrowsExceptionAsync <TimeoutException>(async() => await controller.PlayAdAsync(adSource).AsTask(cancellationToken, progress));

            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);

            // timeout reached during playing (no exception thrown)
            controller.StartTimeout = TimeSpan.FromSeconds(5);
            await controller.PlayAdAsync(adSource).AsTask(cancellationToken, progress);

            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);

            // timeout reached during stopping (no exception thrown)
            controller.StartTimeout = TimeSpan.FromSeconds(7);
            await controller.PlayAdAsync(adSource).AsTask(cancellationToken, progress);

            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);

            // timeout reached after ad finishes playing (no exception thrown)
            controller.StartTimeout = TimeSpan.FromSeconds(10);
            await controller.PlayAdAsync(adSource).AsTask(cancellationToken, progress);

            await Task.Delay(3000); // wait a little bit so timeout actually gets hit

            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);

            // no timeout specified
            controller.StartTimeout = null;
            await controller.PlayAdAsync(adSource).AsTask(cancellationToken, progress);

            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);
        }
        public async Task Cancellation()
        {
            controller.StartTimeout = null;
            OnActivate = null;
            GetPlayer = () => new Mockups.Vpaid();

            var adSource = GetLinearAdSource();

            CancellationTokenSource cts;
            var progress = new Progress<AdStatus>();

            // adsource cancel
            var timeoutAdSource = new Mockups.DelayAdSource(3000) { Type = "vast" };
            cts = new CancellationTokenSource();
            cts.CancelAfter(2000);
            await UnitTestExtensions.ThrowsExceptionAsync<OperationCanceledException>(async () => await controller.PlayAdAsync(timeoutAdSource).AsTask(cts.Token, progress));
            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);

            // NOTE: ad takes 4 seconds to start and 8 seconds to finish
            // initad cancel
            cts = new CancellationTokenSource();
            cts.CancelAfter(1000);
            await UnitTestExtensions.ThrowsExceptionAsync<OperationCanceledException>(async () => await controller.PlayAdAsync(adSource).AsTask(cts.Token, progress));
            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);

            // startad cancel
            cts = new CancellationTokenSource();
            cts.CancelAfter(3000);
            await UnitTestExtensions.ThrowsExceptionAsync<OperationCanceledException>(async () => await controller.PlayAdAsync(adSource).AsTask(cts.Token, progress));
            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);

            // playing cancel
            cts = new CancellationTokenSource();
            cts.CancelAfter(5000);
            await UnitTestExtensions.ThrowsExceptionAsync<OperationCanceledException>(async () => await controller.PlayAdAsync(adSource).AsTask(cts.Token, progress));
            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);

            // stopping cancel
            cts = new CancellationTokenSource();
            cts.CancelAfter(7000);
            await UnitTestExtensions.ThrowsExceptionAsync<OperationCanceledException>(async () => await controller.PlayAdAsync(adSource).AsTask(cts.Token, progress));
            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);

            // cancel after ad finishes playing (no exception thrown)
            cts = new CancellationTokenSource();
            cts.CancelAfter(10000);
            await controller.PlayAdAsync(adSource).AsTask(cts.Token, progress);
            await Task.Delay(3000); // wait a little bit so timeout actually gets hit
            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);
        }
Esempio n. 4
0
        public async Task Cancellation()
        {
            controller.StartTimeout = null;
            OnActivate = null;
            GetPlayer  = () => new Mockups.Vpaid();

            var adSource = GetLinearAdSource();

            CancellationTokenSource cts;
            var progress = new Progress <AdStatus>();

            // adsource cancel
            var timeoutAdSource = new Mockups.DelayAdSource(3000)
            {
                Type = "vast"
            };

            cts = new CancellationTokenSource();
            cts.CancelAfter(2000);
            await UnitTestExtensions.ThrowsExceptionAsync <OperationCanceledException>(async() => await controller.PlayAdAsync(timeoutAdSource).AsTask(cts.Token, progress));

            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);

            // NOTE: ad takes 4 seconds to start and 8 seconds to finish
            // initad cancel
            cts = new CancellationTokenSource();
            cts.CancelAfter(1000);
            await UnitTestExtensions.ThrowsExceptionAsync <OperationCanceledException>(async() => await controller.PlayAdAsync(adSource).AsTask(cts.Token, progress));

            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);

            // startad cancel
            cts = new CancellationTokenSource();
            cts.CancelAfter(3000);
            await UnitTestExtensions.ThrowsExceptionAsync <OperationCanceledException>(async() => await controller.PlayAdAsync(adSource).AsTask(cts.Token, progress));

            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);

            // playing cancel
            cts = new CancellationTokenSource();
            cts.CancelAfter(5000);
            await UnitTestExtensions.ThrowsExceptionAsync <OperationCanceledException>(async() => await controller.PlayAdAsync(adSource).AsTask(cts.Token, progress));

            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);

            // stopping cancel
            cts = new CancellationTokenSource();
            cts.CancelAfter(7000);
            await UnitTestExtensions.ThrowsExceptionAsync <OperationCanceledException>(async() => await controller.PlayAdAsync(adSource).AsTask(cts.Token, progress));

            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);

            // cancel after ad finishes playing (no exception thrown)
            cts = new CancellationTokenSource();
            cts.CancelAfter(10000);
            await controller.PlayAdAsync(adSource).AsTask(cts.Token, progress);

            await Task.Delay(3000); // wait a little bit so timeout actually gets hit

            Assert.IsFalse(playerStack.Any());
            Assert.IsTrue(state == AdState.None);
        }