Add unit tests

pull/7523/head
liangshiwei 5 years ago
parent eb4321880f
commit 68983ec4e9

@ -529,7 +529,7 @@ namespace Volo.Abp.Caching
public KeyValuePair<TCacheKey, TCacheItem>[] GetOrAddMany(
IEnumerable<TCacheKey> keys,
Func<IEnumerable<TCacheKey>, IEnumerable<KeyValuePair<TCacheKey, TCacheItem>>> factory,
Func<IEnumerable<TCacheKey>, List<KeyValuePair<TCacheKey, TCacheItem>>> factory,
Func<DistributedCacheEntryOptions> optionsFactory = null,
bool? hideErrors = null,
bool considerUow = false)
@ -626,7 +626,7 @@ namespace Volo.Abp.Caching
public async Task<KeyValuePair<TCacheKey, TCacheItem>[]> GetOrAddManyAsync(
IEnumerable<TCacheKey> keys,
Func<IEnumerable<TCacheKey>, Task<IEnumerable<KeyValuePair<TCacheKey, TCacheItem>>>> factory,
Func<IEnumerable<TCacheKey>, Task<List<KeyValuePair<TCacheKey, TCacheItem>>>> factory,
Func<DistributedCacheEntryOptions> optionsFactory = null,
bool? hideErrors = null,
bool considerUow = false,

@ -140,7 +140,7 @@ namespace Volo.Abp.Caching
/// <returns>The cache items.</returns>
KeyValuePair<TCacheKey, TCacheItem>[] GetOrAddMany(
IEnumerable<TCacheKey> keys,
Func<IEnumerable<TCacheKey>, IEnumerable<KeyValuePair<TCacheKey, TCacheItem>>> factory,
Func<IEnumerable<TCacheKey>, List<KeyValuePair<TCacheKey, TCacheItem>>> factory,
Func<DistributedCacheEntryOptions> optionsFactory = null,
bool? hideErrors = null,
bool considerUow = false
@ -159,7 +159,7 @@ namespace Volo.Abp.Caching
/// <returns>The cache items.</returns>
Task<KeyValuePair<TCacheKey, TCacheItem>[]> GetOrAddManyAsync(
IEnumerable<TCacheKey> keys,
Func<IEnumerable<TCacheKey>, Task<IEnumerable<KeyValuePair<TCacheKey, TCacheItem>>>> factory,
Func<IEnumerable<TCacheKey>, Task<List<KeyValuePair<TCacheKey, TCacheItem>>>> factory,
Func<DistributedCacheEntryOptions> optionsFactory = null,
bool? hideErrors = null,
bool considerUow = false,

@ -712,5 +712,240 @@ namespace Volo.Abp.Caching
(await personCache.GetAsync("john")).Name.ShouldBe("John Nash");
(await personCache.GetAsync("baris")).ShouldBeNull();
}
[Fact]
public async Task Should_Get_And_Add_Multiple_Items_Async()
{
var testkey = "testkey";
var testkey2 = "testkey2";
var testkey3 = new[] {testkey, testkey2};
var personCache = GetRequiredService<IDistributedCache<PersonCacheItem>>();
await personCache.SetAsync(testkey, new PersonCacheItem("john"));
var cacheValue = await personCache.GetManyAsync(testkey3);
cacheValue.Length.ShouldBe(2);
cacheValue[0].Value.Name.ShouldBe("john");
cacheValue[1].Value.ShouldBeNull();
cacheValue = await personCache.GetOrAddManyAsync(testkey3, (missingKeys) =>
{
var missingKeyArray = missingKeys.ToArray();
missingKeyArray.Length.ShouldBe(1);
missingKeyArray[0].ShouldBe(testkey2);
return Task.FromResult(new List<KeyValuePair<string, PersonCacheItem>>
{
new(testkey2, new PersonCacheItem("jack"))
});
});
cacheValue.Length.ShouldBe(2);
cacheValue[0].Value.Name.ShouldBe("john");
cacheValue[1].Value.Name.ShouldBe("jack");
cacheValue = await personCache.GetManyAsync(testkey3);
cacheValue.Length.ShouldBe(2);
cacheValue[0].Value.Name.ShouldBe("john");
cacheValue[1].Value.Name.ShouldBe("jack");
}
[Fact]
public async Task Cache_Should_Only_Available_In_Uow_For_GetOrAddManyAsync()
{
var testkey = "testkey";
var testkey2 = "testkey2";
var testkey3 = new[] {testkey, testkey2};
using (var uow = GetRequiredService<IUnitOfWorkManager>().Begin())
{
var personCache = GetRequiredService<IDistributedCache<PersonCacheItem>>();
var cacheValue = await personCache.GetOrAddManyAsync(testkey3, (missingKeys) => Task.FromResult(new List<KeyValuePair<string, PersonCacheItem>>
{
new(testkey, new PersonCacheItem("john")),
new(testkey2, new PersonCacheItem("jack")),
}), considerUow: true);
cacheValue.Length.ShouldBe(2);
cacheValue[0].Value.Name.ShouldBe("john");
cacheValue[1].Value.Name.ShouldBe("jack");
cacheValue = await personCache.GetManyAsync(testkey3, considerUow: true);
cacheValue.Length.ShouldBe(2);
cacheValue[0].Value.Name.ShouldBe("john");
cacheValue[1].Value.Name.ShouldBe("jack");
cacheValue = await personCache.GetManyAsync(testkey3, considerUow: false);
cacheValue.Length.ShouldBe(2);
cacheValue[0].Value.ShouldBeNull();
cacheValue[1].Value.ShouldBeNull();
uow.OnCompleted(async () =>
{
cacheValue = await personCache.GetManyAsync(testkey3, considerUow: false);
cacheValue.ShouldNotBeNull();
cacheValue[0].Value.Name.ShouldBe("john");
cacheValue[1].Value.Name.ShouldBe("jack");
});
await uow.CompleteAsync();
}
}
[Fact]
public async Task Cache_Should_Rollback_With_Uow_For_GetOrAddManyAsync()
{
var testkey = "testkey";
var testkey2 = "testkey2";
var testkey3 = new[] {testkey, testkey2};
var personCache = GetRequiredService<IDistributedCache<PersonCacheItem>>();
var cacheValue = await personCache.GetManyAsync(testkey3, considerUow: false);
cacheValue.Length.ShouldBe(2);
cacheValue[0].Value.ShouldBeNull();
cacheValue[1].Value.ShouldBeNull();
using (var uow = GetRequiredService<IUnitOfWorkManager>().Begin())
{
cacheValue = await personCache.GetOrAddManyAsync(testkey3, (missingKeys) => Task.FromResult(new List<KeyValuePair<string, PersonCacheItem>>
{
new(testkey, new PersonCacheItem("john")),
new(testkey2, new PersonCacheItem("jack")),
}), considerUow: true);
cacheValue.Length.ShouldBe(2);
cacheValue[0].Value.Name.ShouldBe("john");
cacheValue[1].Value.Name.ShouldBe("jack");
cacheValue = await personCache.GetManyAsync(testkey3, considerUow: true);
cacheValue.Length.ShouldBe(2);
cacheValue[0].Value.Name.ShouldBe("john");
cacheValue[1].Value.Name.ShouldBe("jack");
cacheValue = await personCache.GetManyAsync(testkey3, considerUow: false);
cacheValue.Length.ShouldBe(2);
cacheValue[0].Value.ShouldBeNull();
cacheValue[1].Value.ShouldBeNull();
}
cacheValue = await personCache.GetManyAsync(testkey3, considerUow: false);
cacheValue.Length.ShouldBe(2);
cacheValue[0].Value.ShouldBeNull();
cacheValue[1].Value.ShouldBeNull();
}
[Fact]
public async Task Should_Remove_Multiple_Items_Async()
{
var testkey = "testkey";
var testkey2 = "testkey2";
var testkey3 = new[] {testkey, testkey2};
var personCache = GetRequiredService<IDistributedCache<PersonCacheItem>>();
await personCache.SetManyAsync(new List<KeyValuePair<string, PersonCacheItem>>
{
new(testkey, new PersonCacheItem("john")),
new(testkey2, new PersonCacheItem("jack"))
});
await personCache.RemoveManyAsync(testkey3);
var cacheValue = await personCache.GetManyAsync(testkey3);
cacheValue.Length.ShouldBe(2);
cacheValue[0].Value.ShouldBeNull();
cacheValue[1].Value.ShouldBeNull();
}
[Fact]
public async Task Cache_Should_Only_Available_In_Uow_For_RemoveManyAsync()
{
var testkey = "testkey";
var testkey2 = "testkey2";
var testkey3 = new[] {testkey, testkey2};
var personCache = GetRequiredService<IDistributedCache<PersonCacheItem>>();
var cacheValue = await personCache.GetManyAsync(testkey3, considerUow: false);
cacheValue.Length.ShouldBe(2);
cacheValue[0].Value.ShouldBeNull();
cacheValue[1].Value.ShouldBeNull();
using (var uow = GetRequiredService<IUnitOfWorkManager>().Begin())
{
await personCache.SetManyAsync(new List<KeyValuePair<string, PersonCacheItem>>
{
new(testkey, new PersonCacheItem("john")),
new(testkey2, new PersonCacheItem("jack"))
});
cacheValue = await personCache.GetManyAsync(testkey3, considerUow: true);
cacheValue.Length.ShouldBe(2);
cacheValue[0].Value.Name.ShouldBe("john");
cacheValue[1].Value.Name.ShouldBe("jack");
await personCache.RemoveManyAsync(testkey3, considerUow: true);
cacheValue = await personCache.GetManyAsync(testkey3, considerUow: false);
cacheValue.Length.ShouldBe(2);
cacheValue[0].Value.Name.ShouldBe("john");
cacheValue[1].Value.Name.ShouldBe("jack");
uow.OnCompleted(async () =>
{
cacheValue = await personCache.GetManyAsync(testkey3, considerUow: false);
cacheValue.ShouldNotBeNull();
cacheValue[0].Value.ShouldBeNull();
cacheValue[1].Value.ShouldBeNull();
});
await uow.CompleteAsync();
}
}
[Fact]
public async Task Cache_Should_Rollback_With_Uow_For_RemoveManyAsync()
{
var testkey = "testkey";
var testkey2 = "testkey2";
var testkey3 = new[] {testkey, testkey2};
var personCache = GetRequiredService<IDistributedCache<PersonCacheItem>>();
var cacheValue = await personCache.GetManyAsync(testkey3, considerUow: false);
cacheValue.Length.ShouldBe(2);
cacheValue[0].Value.ShouldBeNull();
cacheValue[1].Value.ShouldBeNull();
using (var uow = GetRequiredService<IUnitOfWorkManager>().Begin())
{
await personCache.SetManyAsync(new List<KeyValuePair<string, PersonCacheItem>>
{
new(testkey, new PersonCacheItem("john")),
new(testkey2, new PersonCacheItem("jack"))
}, considerUow: true);
cacheValue = await personCache.GetManyAsync(testkey3, considerUow: true);
cacheValue.Length.ShouldBe(2);
cacheValue[0].Value.Name.ShouldBe("john");
cacheValue[1].Value.Name.ShouldBe("jack");
await personCache.RemoveManyAsync(testkey3, considerUow: true);
cacheValue = await personCache.GetManyAsync(testkey3, considerUow: true);
cacheValue.Length.ShouldBe(2);
cacheValue[0].Value.ShouldBeNull();
cacheValue[1].Value.ShouldBeNull();
}
cacheValue = await personCache.GetManyAsync(testkey3, considerUow: true);
cacheValue.Length.ShouldBe(2);
cacheValue[0].Value.ShouldBeNull();
cacheValue[1].Value.ShouldBeNull();
}
}
}

Loading…
Cancel
Save