Skip to content

Commit 0191191

Browse files
committed
added some tests
Signed-off-by: Neil South <[email protected]>
1 parent f135b00 commit 0191191

File tree

4 files changed

+102
-60
lines changed

4 files changed

+102
-60
lines changed

src/TaskManager/Database/ITaskExecutionStatsRepository.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public interface ITaskExecutionStatsRepository
6565
/// <param name="endTime">end of the range.</param>
6666
/// <param name="status">the status to get count of, or string.empty</param>
6767
/// <returns>The count of all records in range</returns>
68-
Task<long> GetStatsStatusCountAsync(DateTime start, DateTime endTime, string status = "", string workflowId = "", string taskId = "");
68+
Task<long> GetStatsStatusCountAsync(DateTime start, DateTime endTime, string status = "", string workflowInstanceId = "", string taskId = "");
6969
/// <summary>
7070
/// Returns all stats in Failed or PartialFail status.
7171
/// </summary>

src/TaskManager/TaskManager/Controllers/TaskStatsController.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -133,10 +133,10 @@ public async Task<IActionResult> GetStatsAsync([FromQuery] TimeFilter filter, st
133133

134134
try
135135
{
136-
var allStats = _repository.GetStatsAsync(filter.StartTime, filter.EndTime, pageSize, filter.PageNumber, workflowId, taskId);
137-
var fails = _repository.GetStatsStatusFailedCountAsync(filter.StartTime, filter.EndTime, workflowId, taskId);
138-
var rangeCount = _repository.GetStatsStatusCountAsync(filter.StartTime, filter.EndTime, string.Empty, workflowId, taskId);
139-
var stats = _repository.GetAverageStats(filter.StartTime, filter.EndTime, workflowId, taskId);
136+
var allStats = _repository.GetStatsAsync(filter.StartTime, filter.EndTime, pageSize, filter.PageNumber, workflowId ?? string.Empty, taskId ?? string.Empty);
137+
var fails = _repository.GetStatsStatusFailedCountAsync(filter.StartTime, filter.EndTime, workflowId ?? string.Empty, taskId ?? string.Empty);
138+
var rangeCount = _repository.GetStatsStatusCountAsync(filter.StartTime, filter.EndTime, string.Empty, workflowId ?? string.Empty, taskId ?? string.Empty);
139+
var stats = _repository.GetAverageStats(filter.StartTime, filter.EndTime, workflowId ?? string.Empty, taskId ?? string.Empty);
140140
var running = _repository.GetStatsStatusCountAsync(filter.StartTime, filter.EndTime, TaskExecutionStatus.Accepted.ToString());
141141

142142
await Task.WhenAll(allStats, fails, rangeCount, stats, running);

src/TaskManager/TaskManager/TaskManager.cs

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -101,13 +101,6 @@ public Task StartAsync(CancellationToken cancellationToken)
101101
return Task.CompletedTask;
102102
}
103103

104-
private void SubscribeToEvents()
105-
{
106-
_messageBrokerSubscriberService.SubscribeAsync(_options.Value.Messaging.Topics.TaskDispatchRequest, _options.Value.Messaging.Topics.TaskDispatchRequest, TaskDispatchEventReceivedCallback);
107-
_messageBrokerSubscriberService.SubscribeAsync(_options.Value.Messaging.Topics.TaskCallbackRequest, _options.Value.Messaging.Topics.TaskCallbackRequest, TaskCallbackEventReceivedCallback);
108-
_messageBrokerSubscriberService.SubscribeAsync(_options.Value.Messaging.Topics.TaskCancellationRequest, _options.Value.Messaging.Topics.TaskCancellationRequest, TaskCancelationEventCallback);
109-
}
110-
111104
public Task StopAsync(CancellationToken cancellationToken)
112105
{
113106
_logger.ServiceStopping(ServiceName);
@@ -121,6 +114,39 @@ public Task StopAsync(CancellationToken cancellationToken)
121114
return Task.CompletedTask;
122115
}
123116

117+
private static JsonMessage<TaskUpdateEvent> GenerateUpdateEventMessage<T>(
118+
JsonMessage<T> message,
119+
string executionId,
120+
string workflowInstanceId,
121+
string taskId,
122+
ExecutionStatus executionStatus,
123+
List<Messaging.Common.Storage>? outputs = null)
124+
{
125+
Guard.Against.Null(message, nameof(message));
126+
Guard.Against.Null(executionStatus, nameof(executionStatus));
127+
128+
var body = new TaskUpdateEvent
129+
{
130+
CorrelationId = message.CorrelationId,
131+
ExecutionId = executionId,
132+
Reason = executionStatus.FailureReason,
133+
Status = executionStatus.Status,
134+
ExecutionStats = executionStatus.Stats,
135+
WorkflowInstanceId = workflowInstanceId,
136+
TaskId = taskId,
137+
Message = executionStatus.Errors,
138+
Outputs = outputs ?? new List<Messaging.Common.Storage>(),
139+
};
140+
return new JsonMessage<TaskUpdateEvent>(body, TaskManagerApplicationId, message.CorrelationId);
141+
}
142+
143+
private void SubscribeToEvents()
144+
{
145+
_messageBrokerSubscriberService.SubscribeAsync(_options.Value.Messaging.Topics.TaskDispatchRequest, _options.Value.Messaging.Topics.TaskDispatchRequest, TaskDispatchEventReceivedCallback);
146+
_messageBrokerSubscriberService.SubscribeAsync(_options.Value.Messaging.Topics.TaskCallbackRequest, _options.Value.Messaging.Topics.TaskCallbackRequest, TaskCallbackEventReceivedCallback);
147+
_messageBrokerSubscriberService.SubscribeAsync(_options.Value.Messaging.Topics.TaskCancellationRequest, _options.Value.Messaging.Topics.TaskCancellationRequest, TaskCancelationEventCallback);
148+
}
149+
124150
private async Task TaskCallbackEventReceivedCallback(MessageReceivedEventArgs args)
125151
{
126152
await TaskCallBackGeneric<TaskCallbackEvent>(args, HandleTaskCallback);
@@ -519,32 +545,6 @@ private void AcknowledgeMessage<T>(JsonMessage<T> message)
519545
}
520546
}
521547

522-
private static JsonMessage<TaskUpdateEvent> GenerateUpdateEventMessage<T>(
523-
JsonMessage<T> message,
524-
string executionId,
525-
string workflowInstanceId,
526-
string taskId,
527-
ExecutionStatus executionStatus,
528-
List<Messaging.Common.Storage>? outputs = null)
529-
{
530-
Guard.Against.Null(message, nameof(message));
531-
Guard.Against.Null(executionStatus, nameof(executionStatus));
532-
533-
var body = new TaskUpdateEvent
534-
{
535-
CorrelationId = message.CorrelationId,
536-
ExecutionId = executionId,
537-
Reason = executionStatus.FailureReason,
538-
Status = executionStatus.Status,
539-
ExecutionStats = executionStatus.Stats,
540-
WorkflowInstanceId = workflowInstanceId,
541-
TaskId = taskId,
542-
Message = executionStatus.Errors,
543-
Outputs = outputs ?? new List<Messaging.Common.Storage>(),
544-
};
545-
return new JsonMessage<TaskUpdateEvent>(body, TaskManagerApplicationId, message.CorrelationId);
546-
}
547-
548548
//TODO: gh-100 implement retry logic
549549
private async Task SendUpdateEvent(JsonMessage<TaskUpdateEvent> message)
550550
{

tests/UnitTests/TaskManager.Tests/TaskExecutionStatsRepositoryTests.cs

Lines changed: 64 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,13 @@ public async Task TaskExecutionStatsRepository_update_Should_Check_For_Null_Even
121121
await Assert.ThrowsAsync<ArgumentNullException>(() => service.UpdateExecutionStatsAsync(default));
122122
}
123123

124+
[Fact]
125+
public async Task TaskExecutionStatsRepository_UpdateExecutionStatsAsync_Should_Check_For_Null_Event()
126+
{
127+
var service = new TaskExecutionStatsRepository(_client.Object, _options, _logger.Object);
128+
await Assert.ThrowsAsync<ArgumentNullException>(() => service.UpdateExecutionStatsAsync(null, "correlationId"));
129+
}
130+
124131
[Fact]
125132
public async Task TaskExecutionStats_Create_Should_Store_All()
126133
{
@@ -248,27 +255,62 @@ public async Task TaskExecutionStats_Get_Stats_Should_Filter()
248255

249256
}
250257

251-
//[Fact]
252-
//public async Task Should_Return_Only_dates_in_range()
253-
//{
254-
// var connection = "mongodb://root:rootpassword@localhost:30017";
255-
// var client = new MongoClient(connection);
256-
// var options = Options.Create(new TaskExecutionDatabaseSettings() { DatabaseName = "WorkloadManager" });
257-
// var logger = new Mock<ILogger<TaskExecutionStatsRepository>>();
258-
// var repo = new TaskExecutionStatsRepository(client, options, logger.Object);
259-
// var start = new DateTime(2023, 4, 4, 16, 23, 40).ToUniversalTime();
260-
// var end = new DateTime(2023, 4, 4, 18, 23, 41).ToUniversalTime();
261-
262-
// var all = await repo.GetStatsAsync(start, end);
263-
// Assert.Equal(3, all.Count());
264-
265-
// var res = await repo.GetStatsCountAsync(start, end);
266-
// Assert.Equal(3, res);
267-
// res = await repo.GetStatsStatusFailedCountAsync(start, end);
268-
// Assert.Equal(1, res);
269-
270-
// var stats = await repo.GetAverageStats(start, end);
271-
// Assert.Equal((30.0, 9.0), stats);
272-
//}
258+
[Fact]
259+
public async Task TaskExecutionStats_New_TaskCancellationEvent_Should_initialize()
260+
{
261+
var collerationId = "colleration";
262+
var WorkflowInstanceId = "WorkflowInstanceId";
263+
var TaskId = "TaskId";
264+
var ExecutionId = "ExecutionId";
265+
var stats = new TaskExecutionStats(
266+
new TaskCancellationEvent
267+
{
268+
WorkflowInstanceId = WorkflowInstanceId,
269+
TaskId = TaskId,
270+
ExecutionId = ExecutionId,
271+
}, collerationId);
272+
273+
274+
Assert.Equal(collerationId, stats.CorrelationId);
275+
Assert.Equal(WorkflowInstanceId, stats.WorkflowInstanceId);
276+
Assert.Equal(TaskId, stats.TaskId);
277+
Assert.Equal(ExecutionId, stats.ExecutionId);
278+
Assert.Equal(TaskExecutionStatus.Failed.ToString(), stats.Status);
279+
}
280+
281+
[Fact]
282+
public async Task UpdateExecutionStatsAsync_CanceledEvent_Should_Update_All()
283+
{
284+
285+
var testStore = new TaskCancellationEvent
286+
{
287+
ExecutionId = nameof(TaskDispatchEvent.ExecutionId),
288+
WorkflowInstanceId = nameof(TaskDispatchEvent.WorkflowInstanceId),
289+
TaskId = nameof(TaskDispatchEvent.TaskId),
290+
};
291+
var collerationId = "collerationId";
292+
293+
await _repo.UpdateExecutionStatsAsync(testStore, collerationId);
294+
295+
_collection.Verify(c => c.UpdateOneAsync(
296+
It.IsAny<FilterDefinition<TaskExecutionStats>>(),
297+
It.IsAny<UpdateDefinition<TaskExecutionStats>>(),
298+
It.IsAny<UpdateOptions>(),
299+
It.IsAny<CancellationToken>()), Times.Once);
300+
}
301+
302+
[Fact]
303+
public async Task GetStatsStatusCountAsync_Should_Call_Count()
304+
{
305+
var starttime = new DateTime(2023, 4, 1);
306+
var endtime = new DateTime(2023, 4, 10);
307+
308+
await _repo.GetStatsStatusCountAsync(starttime, endtime);
309+
310+
_collection.Verify(c => c.CountDocumentsAsync(
311+
It.IsAny<FilterDefinition<TaskExecutionStats>>(),
312+
It.IsAny<CountOptions>(),
313+
It.IsAny<CancellationToken>()), Times.Once);
314+
}
273315
}
274316
}

0 commit comments

Comments
 (0)