forked from ddrilling/AsbCloudServer
110 lines
3.1 KiB
C#
110 lines
3.1 KiB
C#
using AsbCloudInfrastructure.Services.Background;
|
|
using System;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using Xunit;
|
|
|
|
namespace AsbCloudWebApi.Tests.ServicesTests
|
|
{
|
|
public class BackgroundWorkerService_WorkQueue_Test
|
|
{
|
|
private readonly TimeSpan period = TimeSpan.FromSeconds(10);
|
|
private readonly Func<string, IServiceProvider, CancellationToken, Task> somAction = (string id, IServiceProvider scope, CancellationToken token) => Task.CompletedTask;
|
|
|
|
[Fact]
|
|
public void Push_not_unique_id_should_throw()
|
|
{
|
|
var work1 = new WorkPeriodic("1", somAction, TimeSpan.FromSeconds(30));
|
|
var work2 = new WorkBase("1", somAction);
|
|
|
|
var queue = new WorkQueue();
|
|
queue.Push(work1);
|
|
|
|
Assert.Throws<ArgumentException>(
|
|
() => queue.Push(work2));
|
|
}
|
|
|
|
[Fact]
|
|
public void Pop_should_return_null()
|
|
{
|
|
var work1 = new WorkPeriodic("1", somAction, TimeSpan.FromSeconds(30))
|
|
{ LastStart = DateTime.Now };
|
|
|
|
var queue = new WorkQueue();
|
|
queue.Push(work1);
|
|
var workpoPoped= queue.Pop();
|
|
|
|
Assert.Null(workpoPoped);
|
|
}
|
|
|
|
[Fact]
|
|
public void Pop_primary_first()
|
|
{
|
|
var work1 = new WorkBase("1", somAction);
|
|
var work2 = new WorkPeriodic("1", somAction, period);
|
|
|
|
var queue = new WorkQueue();
|
|
queue.Push(work2);
|
|
queue.Push(work1);
|
|
var workpoPoped= queue.Pop();
|
|
|
|
Assert.Equal(work1, workpoPoped);
|
|
}
|
|
|
|
[Fact]
|
|
public void Pop_second_after_delete_first()
|
|
{
|
|
var work1 = new WorkPeriodic("1", somAction, period);
|
|
var work2 = new WorkPeriodic("2", somAction, period);
|
|
|
|
var queue = new WorkQueue();
|
|
queue.Push(work1);
|
|
queue.Push(work2);
|
|
queue.Delete("1");
|
|
|
|
var workpoPoped= queue.Pop();
|
|
|
|
Assert.Equal(work2, workpoPoped);
|
|
}
|
|
|
|
[Fact]
|
|
public void Pop_closest_to_nextStart()
|
|
{
|
|
var work1 = new WorkPeriodic("1", somAction, period) {
|
|
LastStart = DateTime.Now,
|
|
};
|
|
var work2 = new WorkPeriodic("2", somAction, period);
|
|
|
|
var queue = new WorkQueue();
|
|
queue.Push(work1);
|
|
queue.Push(work2);
|
|
|
|
var workpoPoped= queue.Pop();
|
|
|
|
Assert.Equal(work2, workpoPoped);
|
|
}
|
|
|
|
[Fact]
|
|
public void Pop_closest_to_explicit_nextStart()
|
|
{
|
|
var baseTime = DateTime.Now - period;
|
|
var work1 = new WorkPeriodic("1", somAction, period)
|
|
{
|
|
LastStart = baseTime - TimeSpan.FromSeconds(-1),
|
|
};
|
|
var work2 = new WorkPeriodic("2", somAction, period)
|
|
{
|
|
LastStart = baseTime,
|
|
};
|
|
|
|
var queue = new WorkQueue();
|
|
queue.Push(work1);
|
|
queue.Push(work2);
|
|
|
|
var workpoPoped= queue.Pop();
|
|
|
|
Assert.Equal(work2, workpoPoped);
|
|
}
|
|
}
|
|
}
|