예제 #1
0
        public async Task DpsPollyExecuteAsyncDefaultTest()
        {
            // アプリケーション設定がない場合デフォルト設定(3回、3秒)で動作する
            DpsPolly target    = CreateTestTarget();
            var      startAt   = DateTime.UtcNow;
            int      execCount = 0;

            try
            {
                // 引数を付けているのはUnauthorizedExceptionは引数つきコンストラクタしかないため。
                await target.ExecuteAsync(() =>
                {
                    execCount++;
                    throw CreateDpsException(HttpStatusCode.Forbidden);
                });
            }
            catch (Exception)
            {
                // 初回 + リトライ回数を期待する
                Assert.AreEqual(4, execCount);
                // 18秒(0 + 3 + 6 + 9)以上経過しているはず。
                var elapsedTime = DateTime.UtcNow - startAt;
                Assert.AreEqual(-1, TimeSpan.FromSeconds(18).CompareTo(elapsedTime), $"経過時間:{elapsedTime}");
                return;
            }
            Assert.Fail();
        }
예제 #2
0
        public async Task DpsPollyRetryExecuteAsyncTest(Type actualEx, HttpStatusCode?code)
        {
            // Delay時間の指定は、テスト時間を縮めるため
            DpsPolly target    = CreateTestTarget(1, 2);
            var      startAt   = DateTime.UtcNow;
            int      execCount = 0;

            try
            {
                await target.ExecuteAsync(() =>
                {
                    execCount++;
                    throw CreateException(actualEx, code);
                });
            }
            catch (Exception)
            {
                // リトライ1回なので、2回実行
                Assert.AreEqual(2, execCount);

                // 2秒(1 * 2)以上経過しているはず。
                var elapsedTime = DateTime.UtcNow - startAt;
                // 本来なら期待結果を2にしたいが、微妙な揺らぎで1.999xになることがあるため、1.9とする。
                Assert.AreEqual(-1, TimeSpan.FromSeconds(1.9).CompareTo(elapsedTime), $"経過時間:{elapsedTime}");
                return;
            }
            Assert.Fail();
        }
예제 #3
0
        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="logger">ロガー</param>
        /// <param name="iotHubPolly">DpsPolly</param>
        /// <param name="dpsPolly">IotHubPolly</param>
        /// <param name="appSettings">アプリケーション設定</param>
        public RequestDeviceOnDpsRepository(
            ILogger <RequestDeviceOnDpsRepository> logger,
            IotHubPolly iotHubPolly,
            DpsPolly dpsPolly,
            AppSettings appSettings)
        {
            Assert.IfNull(logger);
            Assert.IfNull(iotHubPolly);
            Assert.IfNull(dpsPolly);
            Assert.IfNull(appSettings);

            _logger      = logger;
            _iotHubPolly = iotHubPolly;
            _dpsPolly    = dpsPolly;
            _appSettings = appSettings;
        }
예제 #4
0
        public void DpsPollyNoRetryExecuteWithInnerExTest(HttpStatusCode statusCode)
        {
            DpsPolly target        = CreateTestTarget();
            var      executedCount = 0;

            try
            {
                target.Execute(() => {
                    executedCount++;
                    throw CreateInnerDpsException(statusCode);
                });
            }
            catch (Exception)
            {
                Assert.AreEqual(1, executedCount);
                return;
            }
            Assert.Fail();
        }
예제 #5
0
        public async Task DpsPollyNoRetryExecuteAsyncTest(Type actualEx, HttpStatusCode?code)
        {
            DpsPolly target    = CreateTestTarget();
            int      execCount = 0;

            try
            {
                await target.ExecuteAsync(() =>
                {
                    execCount++;
                    throw CreateException(actualEx, code);
                });
            }
            catch (Exception)
            {
                Assert.AreEqual(1, execCount);
                return;
            }
            Assert.Fail();
        }
예제 #6
0
        public async Task DpsPollyNoRetryExecuteAsyncWithInnerExTest(HttpStatusCode statusCode)
        {
            DpsPolly target        = CreateTestTarget();
            var      executedCount = 0;

            try
            {
#pragma warning disable 1998
                await target.ExecuteAsync(async() => {
                    executedCount++;
                    throw CreateInnerDpsException(statusCode);
                });

#pragma warning restore 1998
            }
            catch (Exception)
            {
                Assert.AreEqual(1, executedCount);
                return;
            }
            Assert.Fail();
        }