mirror of https://github.com/abpframework/abp.git
3 changed files with 136 additions and 3 deletions
@ -0,0 +1,98 @@ |
|||
using System; |
|||
using System.Threading.Tasks; |
|||
using Shouldly; |
|||
using Volo.Abp.BackgroundJobs; |
|||
using Volo.Abp.BackgroundWorkers; |
|||
using Xunit; |
|||
|
|||
namespace Volo.Abp.BackgroundWorkers; |
|||
|
|||
/// <summary>
|
|||
/// Isolated tests for <see cref="IDynamicBackgroundWorkerManager.StopAllAsync"/>.
|
|||
/// Kept in a separate class so the singleton manager is fresh per test (xUnit creates
|
|||
/// a new test class instance — and therefore a new ABP application — for each test method).
|
|||
/// </summary>
|
|||
public class DynamicBackgroundWorkerManager_StopAll_Tests : BackgroundJobsTestBase |
|||
{ |
|||
private readonly IDynamicBackgroundWorkerManager _dynamicWorkerManager; |
|||
|
|||
public DynamicBackgroundWorkerManager_StopAll_Tests() |
|||
{ |
|||
_dynamicWorkerManager = GetRequiredService<IDynamicBackgroundWorkerManager>(); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_Stop_All_Workers_And_Clear_Registry() |
|||
{ |
|||
var workerName1 = "stop-all-worker-1-" + Guid.NewGuid(); |
|||
var workerName2 = "stop-all-worker-2-" + Guid.NewGuid(); |
|||
|
|||
await _dynamicWorkerManager.AddAsync( |
|||
workerName1, |
|||
new DynamicBackgroundWorkerSchedule { Period = 60000 }, |
|||
(_, _) => Task.CompletedTask |
|||
); |
|||
await _dynamicWorkerManager.AddAsync( |
|||
workerName2, |
|||
new DynamicBackgroundWorkerSchedule { Period = 60000 }, |
|||
(_, _) => Task.CompletedTask |
|||
); |
|||
|
|||
_dynamicWorkerManager.IsRegistered(workerName1).ShouldBeTrue(); |
|||
_dynamicWorkerManager.IsRegistered(workerName2).ShouldBeTrue(); |
|||
|
|||
await _dynamicWorkerManager.StopAllAsync(); |
|||
|
|||
_dynamicWorkerManager.IsRegistered(workerName1).ShouldBeFalse(); |
|||
_dynamicWorkerManager.IsRegistered(workerName2).ShouldBeFalse(); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_Throw_ObjectDisposedException_When_AddAsync_Called_After_StopAllAsync() |
|||
{ |
|||
await _dynamicWorkerManager.StopAllAsync(); |
|||
|
|||
await Assert.ThrowsAsync<ObjectDisposedException>(() => |
|||
_dynamicWorkerManager.AddAsync( |
|||
"post-stop-worker-" + Guid.NewGuid(), |
|||
new DynamicBackgroundWorkerSchedule { Period = 1000 }, |
|||
(_, _) => Task.CompletedTask |
|||
) |
|||
); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_Throw_ObjectDisposedException_When_UpdateScheduleAsync_Called_After_StopAllAsync() |
|||
{ |
|||
var workerName = "update-after-stop-" + Guid.NewGuid(); |
|||
|
|||
await _dynamicWorkerManager.AddAsync( |
|||
workerName, |
|||
new DynamicBackgroundWorkerSchedule { Period = 60000 }, |
|||
(_, _) => Task.CompletedTask |
|||
); |
|||
|
|||
await _dynamicWorkerManager.StopAllAsync(); |
|||
|
|||
await Assert.ThrowsAsync<ObjectDisposedException>(() => |
|||
_dynamicWorkerManager.UpdateScheduleAsync( |
|||
workerName, |
|||
new DynamicBackgroundWorkerSchedule { Period = 1000 } |
|||
) |
|||
); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_Be_Idempotent_When_StopAllAsync_Called_Multiple_Times() |
|||
{ |
|||
await _dynamicWorkerManager.AddAsync( |
|||
"idempotent-stop-" + Guid.NewGuid(), |
|||
new DynamicBackgroundWorkerSchedule { Period = 60000 }, |
|||
(_, _) => Task.CompletedTask |
|||
); |
|||
|
|||
// Should not throw when called multiple times
|
|||
await _dynamicWorkerManager.StopAllAsync(); |
|||
await _dynamicWorkerManager.StopAllAsync(); |
|||
} |
|||
} |
|||
Loading…
Reference in new issue