示例#1
0
        public void IotHubPollyRetryExecuteTest(Type actualEx)
        {
            // Delay時間の指定は、テスト時間を縮めるため
            IotHubPolly target    = CreateTestTarget(1, 2);
            var         startAt   = DateTime.UtcNow;
            int         execCount = 0;

            try
            {
                // 引数を付けているのはIotHubExceptionは引数つきコンストラクタしかないため。
                target.Execute(() =>
                {
                    execCount++;
                    throw Activator.CreateInstance(actualEx, "message") as Exception;
                });
            }
            catch (Exception)
            {
                // リトライ1回なので、2回実行
                Assert.AreEqual(2, execCount);

                // 2秒(1 * 2)以上経過しているはず。
                var elapsedTime = DateTime.UtcNow - startAt;
                Assert.AreEqual(-1, new TimeSpan(0, 0, 2).CompareTo(elapsedTime), $"経過時間:{elapsedTime}");
                return;
            }
            Assert.Fail();
        }
示例#2
0
        public async Task IotHubPollyExecuteAsyncDefaultTest()
        {
            // アプリケーション設定がない場合デフォルト設定(3回、3秒)で動作する
            IotHubPolly target    = CreateTestTarget();
            var         startAt   = DateTime.UtcNow;
            int         execCount = 0;

            try
            {
                // 引数を付けているのはUnauthorizedExceptionは引数つきコンストラクタしかないため。
                await target.ExecuteAsync(() =>
                {
                    execCount++;
                    throw new IotHubException("message");
                });
            }
            catch (Exception)
            {
                // 初回 + リトライ回数を期待する
                Assert.AreEqual(4, execCount);
                // 18秒(0 + 3 + 6 + 9)以上経過しているはず。
                var elapsedTime = DateTime.UtcNow - startAt;
                Assert.AreEqual(-1, new TimeSpan(0, 0, 18).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 IotHubPollyNoRetryExecuteTest(Type actualEx)
        {
            // Delay時間の指定は、テスト時間を縮めるため
            IotHubPolly target  = CreateTestTarget(3, 1);
            var         startAt = DateTime.UtcNow;

            try
            {
                // 引数を付けているのはUnauthorizedExceptionは引数つきコンストラクタしかないため。
                target.Execute(() => throw Activator.CreateInstance(actualEx, "message") as Exception);
            }
            catch (Exception)
            {
                var elapsedTime = DateTime.UtcNow - startAt;
                Assert.AreEqual(1, new TimeSpan(0, 0, 2).CompareTo(elapsedTime), $"経過時間:{elapsedTime}");
                return;
            }
            Assert.Fail();
        }