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(); }
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(); }
/// <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; }
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(); }