コード例 #1
0
ファイル: OnTimeoutTest.cs プロジェクト: mwylaoma/RetryHelper
        public void TestOnTimeoutShouldNotFire()
        {
            var times     = 5;
            var generator = new Generator(times);

            _target.Try(() => generator.Next())
            .OnTimeout(t => Assert.Fail())
            .Until(t => t);
        }
        /// <summary>
        /// Retrieve a client by client id
        /// </summary>
        /// <param name="clientId">The id of the client to retrieve</param>
        /// <returns></returns>
        public async Task <Client> FindClientByIdAsync(string clientId)
        {
            var op     = TableOperation.Retrieve <ClientEntity>(clientId.GetParitionKey(), clientId);
            var result = await _retryHelper.Try(() => _table.Value.ExecuteAsync(op)).UntilNoException();

            var client = result.Result as ClientEntity;

            return(client != null?JsonConvert.DeserializeObject <Client>(client.Json, _settings) : null);
        }
コード例 #3
0
ファイル: OnSuccessTest.cs プロジェクト: ft-t/RetryHelper
        public void TestOnSuccessWithNoParameter()
        {
            var times              = 5;
            var generator          = new Generator(times);
            var onSuccessTriggered = false;

            _target.Try(() => generator.Next())
            .OnSuccess(() => onSuccessTriggered = true)
            .Until(t => t);
            Assert.That(onSuccessTriggered, Is.True);
        }
コード例 #4
0
        public async Task TestTryUntilWithTimeLimitAsync()
        {
            var  times     = 5;
            var  generator = new Generator(times);
            bool result    = false;

            Assert.That(await RetryHelperTest.MeasureTime(async() =>
                                                          result = await _target.Try(async() => await generator.NextAsync()).WithTimeLimit(RetryHelperTest.Interval * times + RetryHelperTest.Tolerance).Until(t => t)),
                        Is.EqualTo(RetryHelperTest.Interval * times).Within(RetryHelperTest.Tolerance));
            Assert.That(result, Is.True);
        }
コード例 #5
0
ファイル: OnTimeoutTest.cs プロジェクト: mysharp/RetryHelper
        public void TestOnTimeoutShouldNotFire()
        {
            var times              = 5;
            var generator          = new Generator(times);
            var onTimeoutTriggered = false;

            _target.Try(() => generator.Next())
            .OnTimeout(t => onTimeoutTriggered = true)
            .Until(t => t);
            Expect(onTimeoutTriggered, False);
        }
コード例 #6
0
        public void TestTryUntilWithMaxTryCount()
        {
            var  times     = 5;
            var  generator = new Generator(times);
            bool result    = false;

            Assert.That(RetryHelperTest.MeasureTime(() =>
                                                    result = _target.Try(() => generator.Next()).WithMaxTryCount(times + 1).Until(t => t)),
                        Is.EqualTo(RetryHelperTest.Interval * times).Within(RetryHelperTest.Tolerance));
            Assert.That(result, Is.True);
        }
コード例 #7
0
ファイル: OnSuccessTest.cs プロジェクト: mysharp/RetryHelper
        public void TestOnSuccessAfterFiveTimes()
        {
            var times              = 5;
            var generator          = new Generator(times);
            var onSuccessTriggered = false;

            _target.Try(() => generator.Next())
            .OnSuccess(t => onSuccessTriggered = true)
            .Until(t => t);
            Expect(onSuccessTriggered, True);
        }
コード例 #8
0
        public void TestTryUntilWithTimeLimit()
        {
            var  times     = 5;
            var  generator = new Generator(times);
            bool result    = false;

            Expect(RetryHelperTest.CountTime(() =>
                                             result = _target.Try(() => generator.Next()).WithTimeLimit(RetryHelperTest.Interval * times + RetryHelperTest.Tolerance).Until(t => t)),
                   EqualTo(RetryHelperTest.Interval * times).Within(RetryHelperTest.Tolerance));
            Expect(result, True);
        }
コード例 #9
0
        public void TestTryUntilNoExceptionAfterFiveTimes()
        {
            var times     = 10;
            var generator = new Generator(times, true);

            generator.RandomExceptionType = true;
            bool result = false;

            Expect(RetryHelperTest.CountTime(() =>
                                             result = _target.Try(() => generator.Next()).UntilNoException()),
                   EqualTo(RetryHelperTest.Interval * times).Within(RetryHelperTest.Tolerance));
            Expect(generator.TriedTimes, EqualTo(times + 1));
            Expect(result, True);
        }
コード例 #10
0
        public void TestOnFailureWithNoParameter()
        {
            var times              = 5;
            var generator          = new Generator(times);
            var onFailureTriggered = 0;

            _target.Try(() => generator.Next())
            .OnFailure(() =>
            {
                onFailureTriggered++;
            })
            .Until(t => t);
            Assert.That(onFailureTriggered, Is.EqualTo(times));
        }
コード例 #11
0
        public void TestOnFailureAfterFiveTimes()
        {
            var times              = 5;
            var generator          = new Generator(times);
            var onFailureTriggered = 0;

            _target.Try(() => generator.Next())
            .OnFailure(t =>
            {
                Expect(t, False);
                onFailureTriggered++;
            })
            .Until(t => t);
            Expect(onFailureTriggered, EqualTo(times));
        }
コード例 #12
0
        public void TestTryUntilExpectedTime()
        {
            var expectedStopTime = DateTime.Now.AddSeconds(1);

            _target.Try(() => { }).Until(() => DateTime.Now >= expectedStopTime);
            Assert.That(DateTime.Now, Is.EqualTo(expectedStopTime).Within(TimeSpan.FromMilliseconds(200)));
        }
コード例 #13
0
        public void TestTryUntilExpectedTime()
        {
            var expectedStopTime = DateTime.Now.AddSeconds(3);

            _target.Try(() => DateTime.Now).Until(() => DateTime.Now >= expectedStopTime);
            Expect(DateTime.Now, EqualTo(expectedStopTime).Within(TimeSpan.FromMilliseconds(300)));
        }
コード例 #14
0
        public async Task TestTryUntilAsyncCondition()
        {
            var times     = 5;
            var generator = new Generator(times);
            var result    = await _target.Try(() => Task.FromResult(true)).Until(async() => await generator.NextAsync());

            Assert.That(generator.TriedTimes, Is.EqualTo(times + 1));
            Assert.IsTrue(result);
        }
コード例 #15
0
        /// <summary>
        /// Retrieves all the consent for a subject
        /// </summary>
        /// <param name="subject">The subject</param>
        /// <returns></returns>
        public async Task <IEnumerable <Consent> > LoadAllAsync(string subject)
        {
            var query = new TableQuery <ConsentEntity>().Where(
                TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, subject));
            var list = new List <ConsentEntity>();
            TableContinuationToken continuationToken = null;

            do
            {
                var result = await _retryHelper.Try(() => _table.Value.ExecuteQuerySegmentedAsync(query, continuationToken)).UntilNoException();

                continuationToken = result.ContinuationToken;
                list.AddRange(result.Results);
            } while (continuationToken != null);
            return(list.Select(c => new Consent {
                ClientId = c.RowKey, Subject = c.PartitionKey, Scopes = c.Scopes.Split(',')
            }));
        }
コード例 #16
0
        public async Task TestTryUntilExpectedTimeAsync()
        {
            var expectedStopTime = DateTime.Now.AddSeconds(1);
            await _target
            .Try(async() => await Task.Delay(0))
            .Until(() => DateTime.Now >= expectedStopTime);

            Assert.That(DateTime.Now, Is.EqualTo(expectedStopTime).Within(TimeSpan.FromMilliseconds(200)));
        }
コード例 #17
0
 /// <summary>
 /// Saves the token with its given key
 /// </summary>
 /// <param name="key">The key for the token</param>
 /// <param name="value">The refresh token to serialize and store</param>
 public async Task StoreAsync(string key, Token value)
 {
     var entity = new TokenTableEntity
     {
         PartitionKey = key.GetParitionKey(),
         RowKey       = key,
         ClientId     = value.ClientId,
         Json         = ToJson(value),
         SubjectId    = value.SubjectId
     };
     var op = TableOperation.InsertOrReplace(entity);
     await _retryHelper.Try(() => _table.Value.ExecuteAsync(op)).UntilNoException();
 }
コード例 #18
0
        public async Task TestTryUntilNoExceptionAfterFiveTimesAsync()
        {
            var times     = 10;
            var generator = new Generator(times, true);

            generator.RandomExceptionType = true;
            bool result = false;

            Assert.That(await RetryHelperTest.MeasureTime(async() =>
                                                          result = await _target.Try(async() => await generator.NextAsync()).UntilNoException()),
                        Is.EqualTo(RetryHelperTest.Interval * times).Within(RetryHelperTest.AsyncTolerance));
            Assert.That(generator.TriedTimes, Is.EqualTo(times + 1));
            Assert.That(result, Is.True);
        }