private static async Task IncrementWithExpiryValidate( Context context, RedisDatabaseAdapter adapter, ITestRedisDatabase database, string key, uint comparisonValue, TimeSpan specifiedExpiry, int requestedIncrement, long expectedReturnValue, long?expectedIncrementedValue, TimeSpan?expectedDifferentExpiry = null) { var batch = adapter.CreateBatchOperation(RedisOperation.All); var redisKey = GetKey(key); var incrementWithExpire = batch.TryStringIncrementBumpExpiryIfBelowOrEqualValueAsync(key, comparisonValue, timeToLive: specifiedExpiry, requestedIncrement: requestedIncrement); await adapter.ExecuteBatchOperationAsync(context, batch, CancellationToken.None).IgnoreFailure(); var incrementedValue = await incrementWithExpire; Assert.Equal(expectedReturnValue, incrementedValue.AppliedIncrement); var keysWithExpiry = database.GetDbWithExpiry(); if (expectedIncrementedValue == null) { Assert.False(keysWithExpiry.ContainsKey(redisKey)); Assert.Equal(expectedReturnValue, incrementedValue.IncrementedValue); return; } Assert.True(keysWithExpiry.ContainsKey(redisKey)); var expiry = keysWithExpiry[redisKey]; if (expectedDifferentExpiry != null) { Assert.False(expiry.Equals(new MockRedisValueWithExpiry(expectedIncrementedValue, DateTime.UtcNow + specifiedExpiry))); Assert.True(expiry.Equals(new MockRedisValueWithExpiry(expectedIncrementedValue, DateTime.UtcNow + expectedDifferentExpiry.Value))); } else { Assert.True(expiry.Equals(new MockRedisValueWithExpiry(expectedIncrementedValue, DateTime.UtcNow + specifiedExpiry))); } }
private static Task <BoolResult> ExecuteBatchAsync(RedisDatabaseAdapter dbAdapter) => dbAdapter.ExecuteBatchOperationAsync(new Context(TestGlobal.Logger), dbAdapter.CreateBatchOperation(RedisOperation.All), default);