Пример #1
0
        public async Task SuccessiveTryAdd()
        {
            var clock = new MockSystemClock();
            var store = new DefaultMemoryQosCounterStore(clock);

            var result = await store.TryAddAsync("a", 3, 6, TimeSpan.FromSeconds(1));

            Assert.True(result.Success);
            Assert.Equal(3, result.NewCounter);

            result = await store.TryAddAsync("a", 2, 6, TimeSpan.FromSeconds(500)); // The period must be ignored

            Assert.True(result.Success);
            Assert.Equal(5, result.NewCounter);

            result = await store.TryAddAsync("a", 1, 6, TimeSpan.FromSeconds(500));

            Assert.True(result.Success);
            Assert.Equal(6, result.NewCounter);

            result = await store.TryAddAsync("a", 1, 6, TimeSpan.FromSeconds(500));

            Assert.False(result.Success);
            Assert.Equal(6, result.NewCounter);

            clock.UtcNow += TimeSpan.FromSeconds(100);

            result = await store.TryAddAsync("a", 3, 6, TimeSpan.FromSeconds(1));

            Assert.True(result.Success);
            Assert.Equal(3, result.NewCounter);
        }
Пример #2
0
        public async Task CleanObsoleteEntries()
        {
            var clock = new MockSystemClock();
            var store = new DefaultMemoryQosCounterStore(clock);

            for (int i = 0; i < 30; i++)
            {
                await store.AddAsync(i.ToString(), 3, TimeSpan.FromSeconds(i));
            }

            Assert.Equal(30, store.Count);

            clock.Callbacks.First().Invoke();

            Assert.Equal(30, store.Count);

            clock.UtcNow += TimeSpan.FromSeconds(14);
            clock.Callbacks.First().Invoke();

            Assert.Equal(16, store.Count);

            clock.UtcNow += TimeSpan.FromSeconds(5);
            clock.Callbacks.First().Invoke();

            Assert.Equal(11, store.Count);
        }
Пример #3
0
        public async Task GetUnknownKey()
        {
            var clock = new MockSystemClock();
            var store = new DefaultMemoryQosCounterStore(clock);

            var result = await store.GetAsync("a");

            Assert.Equal(0, result);
        }
Пример #4
0
        public async Task AddAndGetExistingKey()
        {
            var clock = new MockSystemClock();
            var store = new DefaultMemoryQosCounterStore(clock);

            var result = await store.AddAsync("a", 3, null);

            Assert.Equal(3, result);

            result = await store.GetAsync("a");

            Assert.Equal(3, result);
        }
Пример #5
0
        public async Task Remove()
        {
            var clock = new MockSystemClock();
            var store = new DefaultMemoryQosCounterStore(clock);

            await store.AddAsync("a", 3, TimeSpan.FromSeconds(1));

            await store.AddAsync("b", 4, TimeSpan.FromSeconds(1));

            await store.RemoveAsync("b");

            Assert.Equal(1, store.Count);
        }
        public void Setup()
        {
            _systemClock = new MockSystemClock();
            _store       = new DefaultMemoryQosCounterStore(_systemClock);

            var random = new Random(123);

            for (var i = 0; i < EntryCount; i++)
            {
                var inTimeout = random.NextDouble() < TimeoutPercentage;
                _store.AddAsync($"Key_{i}", 1, inTimeout ? TimeSpan.FromSeconds(1) : TimeSpan.FromDays(1000)).Wait();
            }

            _systemClock.UtcNow += TimeSpan.FromHours(1);
        }
Пример #7
0
        public async Task SuccessiveAdd()
        {
            var clock = new MockSystemClock();
            var store = new DefaultMemoryQosCounterStore(clock);

            var result = await store.AddAsync("a", 3, TimeSpan.FromSeconds(1));

            Assert.Equal(3, result);

            result = await store.AddAsync("a", 2, TimeSpan.FromSeconds(500)); // The period must be ignored

            Assert.Equal(5, result);

            clock.UtcNow += TimeSpan.FromSeconds(100);

            result = await store.AddAsync("a", 4, TimeSpan.FromSeconds(1));

            Assert.Equal(4, result);
        }
Пример #8
0
        public async Task AddAndGetExistingButObsoleteKey()
        {
            var clock = new MockSystemClock();
            var store = new DefaultMemoryQosCounterStore(clock);

            var result = await store.AddAsync("a", 3, TimeSpan.FromSeconds(1));

            Assert.Equal(3, result);

            result = await store.GetAsync("a");

            Assert.Equal(3, result);

            clock.UtcNow += TimeSpan.FromSeconds(100);

            result = await store.GetAsync("a");

            Assert.Equal(0, result);
        }