176 lines
4.6 KiB
C#
176 lines
4.6 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Text;
|
||
using System.Threading;
|
||
using NewLife.Log;
|
||
using XCode.Cache;
|
||
using XCode.Membership;
|
||
using Xunit;
|
||
|
||
namespace XUnitTest.XCode.Caching
|
||
{
|
||
[Collection("Database")]
|
||
[TestCaseOrderer("NewLife.UnitTest.DefaultOrderer", "NewLife.UnitTest")]
|
||
public class EntityCacheTests
|
||
{
|
||
static EntityCacheTests()
|
||
{
|
||
CacheBase.Debug = true;
|
||
}
|
||
|
||
public EntityCacheTests()
|
||
{
|
||
}
|
||
|
||
[Fact]
|
||
public void Test1()
|
||
{
|
||
var cache = new EntityCache<Role>();
|
||
Assert.Equal(0, cache.Times);
|
||
Assert.Equal(10, cache.Expire);
|
||
Assert.False(cache.Using);
|
||
Assert.NotNull(cache.FillListMethod);
|
||
Assert.Equal(cache.FillListMethod, Role.FindAll);
|
||
Assert.True(cache.WaitFirst);
|
||
Assert.Equal(0, cache.Total);
|
||
Assert.Equal(0, cache.Success);
|
||
|
||
// 尝试访问
|
||
cache.Expire = 2;
|
||
var list = cache.Entities;
|
||
|
||
Assert.Equal(1, cache.Times);
|
||
Assert.True(cache.Using);
|
||
Assert.Equal(1, cache.Total);
|
||
Assert.Equal(0, cache.Success);
|
||
|
||
// 再次访问
|
||
var list2 = cache.Entities;
|
||
|
||
Assert.Equal(1, cache.Times);
|
||
Assert.Equal(2, cache.Total);
|
||
Assert.Equal(1, cache.Success);
|
||
|
||
// 等待超时后,再次访问
|
||
Thread.Sleep(cache.Expire * 1000 + 100);
|
||
var list3 = cache.Entities;
|
||
|
||
Assert.Equal(1, cache.Times);
|
||
Assert.Equal(3, cache.Total);
|
||
Assert.Equal(1, cache.Success);
|
||
}
|
||
|
||
[Fact]
|
||
public void TestUpdateCacheAsync()
|
||
{
|
||
var cache = new EntityCache<Role>
|
||
{
|
||
Expire = 2
|
||
};
|
||
|
||
// 尝试访问
|
||
var list = cache.Entities;
|
||
Assert.Equal(1, cache.Times);
|
||
|
||
// 等待超时后,再次访问
|
||
Thread.Sleep(cache.Expire * 1000 + 100);
|
||
var list3 = cache.Entities;
|
||
|
||
Assert.Equal(1, cache.Times);
|
||
|
||
// 等待更新完成
|
||
Thread.Sleep(1000);
|
||
Assert.Equal(2, cache.Times);
|
||
}
|
||
|
||
[Fact]
|
||
public void TestUpdateCacheSync()
|
||
{
|
||
var cache = new EntityCache<Role>
|
||
{
|
||
Expire = 2
|
||
};
|
||
|
||
// 尝试访问
|
||
var list = cache.Entities;
|
||
Assert.Equal(1, cache.Times);
|
||
|
||
// 2倍超时后,再次访问走同步更新
|
||
Thread.Sleep(cache.Expire * 1000 * 2 + 100);
|
||
var list3 = cache.Entities;
|
||
|
||
Assert.Equal(2, cache.Times);
|
||
}
|
||
|
||
[Fact]
|
||
public void TestClear()
|
||
{
|
||
var cache = new EntityCache<Role>
|
||
{
|
||
Expire = 2
|
||
};
|
||
|
||
// 尝试访问
|
||
var list = cache.Entities;
|
||
Assert.Equal(1, cache.Times);
|
||
|
||
cache.Clear("TestClear", false);
|
||
|
||
Thread.Sleep(1000);
|
||
Assert.Equal(1, cache.Times);
|
||
|
||
// 再次访问
|
||
var list2 = cache.Entities;
|
||
|
||
Assert.Equal(1, cache.Times);
|
||
Thread.Sleep(1000);
|
||
Assert.Equal(2, cache.Times);
|
||
|
||
cache.Clear("TestClear", true);
|
||
|
||
// 再次访问
|
||
list2 = cache.Entities;
|
||
|
||
Assert.Equal(3, cache.Times);
|
||
|
||
// 等待更新完成
|
||
Thread.Sleep(1000);
|
||
Assert.Equal(3, cache.Times);
|
||
}
|
||
|
||
[Fact]
|
||
public void TestAddRemove()
|
||
{
|
||
var cache = new EntityCache<Role>
|
||
{
|
||
Expire = 2
|
||
};
|
||
|
||
var list = cache.Entities;
|
||
|
||
var role = new Role { Name = "test" };
|
||
|
||
// 添加实体对象
|
||
cache.Add(role);
|
||
var list2 = cache.Entities;
|
||
Assert.NotEqual(list, list2);
|
||
Assert.Equal(list.Count + 1, list2.Count);
|
||
|
||
// 删除实体对象,来自内部
|
||
cache.Remove(role);
|
||
var list3 = cache.Entities;
|
||
Assert.True(list != list3);
|
||
Assert.True(list2 != list3);
|
||
Assert.Equal(list.Count, list3.Count);
|
||
|
||
// 删除实体对象,来自外部
|
||
cache.Add(role);
|
||
var role2 = new Role { Name = "test" };
|
||
cache.Remove(role2);
|
||
var list4 = cache.Entities;
|
||
Assert.True(list != list4);
|
||
Assert.True(list2 != list4);
|
||
Assert.Equal(list.Count, list4.Count);
|
||
}
|
||
}
|
||
} |