Skip to content

Commit

Permalink
tests(Scheduler): Be sure every test has its own scheduler
Browse files Browse the repository at this point in the history
  • Loading branch information
Belphemur committed Oct 5, 2021
1 parent 2e6a4aa commit 2aea40a
Showing 1 changed file with 23 additions and 21 deletions.
44 changes: 23 additions & 21 deletions Job.Scheduler.Tests/JobSchedulerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ namespace Job.Scheduler.Tests
[Parallelizable(ParallelScope.Children)]
public class Tests
{
private IJobScheduler _scheduler;
private IJobRunnerBuilder _builder;

[OneTimeSetUp]
Expand All @@ -24,17 +23,12 @@ public void OneTimeSetup()
_builder = new JobRunnerBuilder();
}

[SetUp]
public void Setup()
{
_scheduler = new JobScheduler(_builder);
}

[Test]
public async Task OneTimeJob()
{
IJobScheduler scheduler = new JobScheduler(_builder);
var job = new OneTimeJob();
var jobRunner = _scheduler.ScheduleJobInternal(job);
var jobRunner = scheduler.ScheduleJobInternal(job);
await jobRunner.WaitForJob();
job.HasRun.Should().BeTrue();
}
Expand All @@ -43,9 +37,10 @@ public async Task OneTimeJob()
[Test]
public async Task FailingJobShouldRetry()
{
IJobScheduler scheduler = new JobScheduler(_builder);
var maxRetries = 3;
var job = new FailingRetringJob(new RetryNTimes(maxRetries));
var jobRunner = _scheduler.ScheduleJobInternal(job);
var jobRunner = scheduler.ScheduleJobInternal(job);
await jobRunner.WaitForJob();
job.Ran.Should().Be(4);
jobRunner.Retries.Should().Be(maxRetries);
Expand All @@ -54,18 +49,20 @@ public async Task FailingJobShouldRetry()
[Test]
public async Task MaxRuntimeIsRespected()
{
IJobScheduler scheduler = new JobScheduler(_builder);
var job = new MaxRuntimeJob(new NoRetry(), TimeSpan.FromMilliseconds(50));
var jobRunner = _scheduler.ScheduleJobInternal(job);
var jobRunner = scheduler.ScheduleJobInternal(job);
await jobRunner.WaitForJob();
jobRunner.Elapsed.Should().BeCloseTo(job.MaxRuntime!.Value, TimeSpan.FromMilliseconds(20));
}

[Test]
public async Task MaxRuntimeIsRespectedAndTaskRetried()
{
IJobScheduler scheduler = new JobScheduler(_builder);
var maxRetries = 2;
var job = new MaxRuntimeJob(new RetryNTimes(maxRetries), TimeSpan.FromMilliseconds(50));
var jobRunner = _scheduler.ScheduleJobInternal(job);
var jobRunner = scheduler.ScheduleJobInternal(job);
await jobRunner.WaitForJob();
jobRunner.Elapsed.Should().BeCloseTo(job.MaxRuntime!.Value, TimeSpan.FromMilliseconds(20));
jobRunner.Retries.Should().Be(maxRetries);
Expand All @@ -75,9 +72,10 @@ public async Task MaxRuntimeIsRespectedAndTaskRetried()
[Test]
public async Task MaxRuntimeIsRespectedAndTaskRetriedWithBackoff()
{
IJobScheduler scheduler = new JobScheduler(_builder);
var maxRetries = 3;
var job = new MaxRuntimeJob(new ExponentialBackoffRetry(TimeSpan.FromMilliseconds(10), maxRetries), TimeSpan.FromMilliseconds(80));
var jobRunner = _scheduler.ScheduleJobInternal(job);
var jobRunner = scheduler.ScheduleJobInternal(job);
await jobRunner.WaitForJob();
jobRunner.Elapsed.Should().BeCloseTo(job.MaxRuntime!.Value, TimeSpan.FromMilliseconds(20));
jobRunner.Retries.Should().Be(maxRetries);
Expand All @@ -86,22 +84,24 @@ public async Task MaxRuntimeIsRespectedAndTaskRetriedWithBackoff()
[Test]
public async Task ExecuteInOwnScheduler()
{
using var scheduler = new MockTaskScheduler();
IJobScheduler scheduler = new JobScheduler(_builder);
using var taskScheduler = new MockTaskScheduler();
var job = new ThreadJob(Thread.CurrentThread);
var jobRunner = _scheduler.ScheduleJobInternal(job, scheduler);
var jobRunner = scheduler.ScheduleJobInternal(job, taskScheduler);
await jobRunner.WaitForJob();
job.HasRun.Should().BeTrue();
jobRunner.Retries.Should().Be(0);
scheduler.Count.Should().Be(1);
taskScheduler.Count.Should().Be(1);
job.InitThread.Should().NotBe(job.RunThread);
job.RunThread.Should().Be(scheduler.MainThread);
job.RunThread.Should().Be(taskScheduler.MainThread);
}

[Test]
public async Task ExecuteInDefaultScheduler()
{
IJobScheduler scheduler = new JobScheduler(_builder);
var job = new ThreadJob(Thread.CurrentThread);
var jobRunner = _scheduler.ScheduleJobInternal(job);
var jobRunner = scheduler.ScheduleJobInternal(job);
await jobRunner.WaitForJob();
job.HasRun.Should().BeTrue();
jobRunner.Retries.Should().Be(0);
Expand All @@ -111,11 +111,12 @@ public async Task ExecuteInDefaultScheduler()
[Test]
public async Task DebounceJobTest()
{
IJobScheduler scheduler = new JobScheduler(_builder);
var list = new List<string>();
var job = new DebounceJob(list, "Single");
var jobRunnerFirst = _scheduler.ScheduleJobInternal(job);
var jobRunnerFirst = scheduler.ScheduleJobInternal(job);
await TaskUtils.WaitForDelayOrCancellation(TimeSpan.FromMilliseconds(10), CancellationToken.None);
var jobRunnerSecond = _scheduler.ScheduleJobInternal(job);
var jobRunnerSecond = scheduler.ScheduleJobInternal(job);
await jobRunnerFirst.WaitForJob();
await jobRunnerSecond.WaitForJob();

Expand All @@ -125,11 +126,12 @@ public async Task DebounceJobTest()
[Test]
public async Task DebounceJobAlreadyFinishedTest()
{
IJobScheduler scheduler = new JobScheduler(_builder);
var list = new List<string>();
var job = new DebounceJob(list, "Multiple");
var jobRunnerFirst = _scheduler.ScheduleJobInternal(job);
var jobRunnerFirst = scheduler.ScheduleJobInternal(job);
await jobRunnerFirst.WaitForJob();
var jobRunnerSecond = _scheduler.ScheduleJobInternal(job);
var jobRunnerSecond = scheduler.ScheduleJobInternal(job);
await jobRunnerSecond.WaitForJob();

list.Should().OnlyContain(s => s == job.Key).And.HaveCount(2);
Expand Down

0 comments on commit 2aea40a

Please sign in to comment.