mirror of
https://github.com/dotnetcore/Util.git
synced 2026-10-21 06:36:23 +08:00
87 lines
2.4 KiB
C#
87 lines
2.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Util.Helpers;
|
|
using Xunit;
|
|
|
|
namespace Util.Tests.Locks {
|
|
/// <summary>
|
|
/// 业务锁测试
|
|
/// </summary>
|
|
public class LockTest : IDisposable {
|
|
/// <summary>
|
|
/// 业务锁测试服务
|
|
/// </summary>
|
|
private readonly LockTestService _service;
|
|
|
|
/// <summary>
|
|
/// 测试初始化
|
|
/// </summary>
|
|
public LockTest() {
|
|
_service = new LockTestService();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 测试清理
|
|
/// </summary>
|
|
public void Dispose() {
|
|
Time.Reset();
|
|
_service.UnLock();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 执行一个服务
|
|
/// </summary>
|
|
[Fact]
|
|
public void Test_1() {
|
|
Assert.Equal( "ok", _service.Execute( "Test_1" ) );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 并发执行服务
|
|
/// </summary>
|
|
[Fact]
|
|
public void Test_2() {
|
|
var key = "Test_2";
|
|
var result = new List<string>();
|
|
Util.Helpers.Thread.ParallelExecute( () => result.Add( _service.Execute( key ) ), 20 );
|
|
Assert.Single( result.FindAll( t => t == "ok" ));
|
|
}
|
|
|
|
/// <summary>
|
|
/// 测试解锁
|
|
/// </summary>
|
|
[Fact]
|
|
public void Test_3() {
|
|
var key = "Test_3";
|
|
|
|
//执行,被锁定
|
|
_service.Execute( key );
|
|
|
|
//未解锁,无法执行
|
|
var result = new List<string>();
|
|
Util.Helpers.Thread.ParallelExecute( () => result.Add( _service.Execute( key ) ), 20 );
|
|
Assert.Empty( result.FindAll( t => t == "ok" ) );
|
|
|
|
//解锁
|
|
_service.UnLock();
|
|
|
|
//再次执行
|
|
Util.Helpers.Thread.ParallelExecute( () => result.Add( _service.Execute( key ) ), 20 );
|
|
Assert.Single( result.FindAll( t => t == "ok" ));
|
|
}
|
|
|
|
/// <summary>
|
|
/// 延迟1秒才允许执行 - 设置延迟时间后,UnLock无效
|
|
/// </summary>
|
|
[Fact]
|
|
public void Test_4() {
|
|
var key = "Test_4";
|
|
Assert.Equal( "ok", _service.Execute( key, TimeSpan.FromSeconds( 1 ) ) );
|
|
_service.UnLock();
|
|
Assert.Equal( "fail", _service.Execute( key ) );
|
|
System.Threading.Thread.Sleep( 1100 );
|
|
Assert.Equal( "ok", _service.Execute( key ) );
|
|
}
|
|
}
|
|
}
|