public async Task If_sync_failed_update_mutation_table_with_failure() { // Arrange long mutationId = 666; var status = new MutationStatusInfo { MutationId = mutationId, NewStatus = ActionStatus.SyncFailed }; harvestManager.Setup(e => e.UpdateMutationStatus(status)); // Act await InputQueueSendEndpoint.Send <IArchiveRecordRemoved>(new { MutationId = mutationId, ActionSuccessful = false, ErrorMessage = "My little error" }); // Wait for the results await archiveRecordRemovedTask; // Assert harvestManager.Verify(e => e.UpdateMutationStatus(It.Is <MutationStatusInfo>(f => f.MutationId == mutationId && f.NewStatus == ActionStatus.SyncFailed && f.ErrorMessage == "My little error" )), Times.Once); }
/// <summary> /// Updates the mutation status of a mutation record in the AIS. /// </summary> /// <param name="info">Info object with detailed information about the new status</param> /// <returns>The number of affected records.</returns> public int UpdateMutationStatus(MutationStatusInfo info) { int affectedRecords; using (var cn = AISConnection.GetConnection()) { var sw = new Stopwatch(); var sql = new StringBuilder(); try { sql.Append("Update tbk_viaduc_mttn set aktn_stts = :stts"); // If we have a completed or failed attempt, update the counter if (info.NewStatus == ActionStatus.SyncCompleted || info.NewStatus == ActionStatus.SyncFailed) { sql.Append(", SYNC_ANZ_VRSCH = nvl(SYNC_ANZ_VRSCH, 0) + 1"); } sql.Append(" where mttn_id = :mttn_id "); // If the status udpate is only allowed from a specific existing status, // add the required where clause. if (info.ChangeFromStatus.HasValue) { sql.Append(" and aktn_stts = :sttsFrom "); } using (var cmd = new OracleCommand(sql.ToString(), cn)) { cmd.Parameters.AddWithValue("mttn_id", info.MutationId); cmd.Parameters.AddWithValue("stts", info.NewStatus); if (info.ChangeFromStatus.HasValue) { cmd.Parameters.AddWithValue("sttsFrom", info.ChangeFromStatus); } affectedRecords = cmd.ExecuteNonQuery(); } LogExecutionTimes(sql.ToString(), sw); } catch (Exception ex) { Log.Error(ex, ex.Message); throw; } finally { cn.Close(); } // Insert Log record into the log table if (affectedRecords > 0) { InsertMutationStatusLog(info); } } return(affectedRecords); }
public async Task If_sync_success_update_mutation_table_with_success() { // Arrange long mutationId = 666; var status = new MutationStatusInfo { MutationId = mutationId, NewStatus = ActionStatus.SyncCompleted }; harvestManager.Setup(e => e.UpdateMutationStatus(status)); // Act await InputQueueSendEndpoint.Send <IArchiveRecordRemoved>(new { MutationId = mutationId, ActionSuccessful = true }); // Wait for the results await archiveRecordRemovedTask; // Assert harvestManager.Verify(e => e.UpdateMutationStatus(It.Is <MutationStatusInfo>(f => f.MutationId == mutationId && f.NewStatus == ActionStatus.SyncCompleted )), Times.Once); }
public async Task If_sync_failed_update_mutation_table_with_failure() { // Arrange long mutationId = 666; var status = new MutationStatusInfo { MutationId = mutationId, NewStatus = ActionStatus.SyncFailed }; harvestManager.Setup(e => e.UpdateMutationStatus(status)); var harness = new InMemoryTestHarness(); var consumer = harness.Consumer(() => new ArchiveRecordRemovedConsumer(harvestManager.Object)); await harness.Start(); try { // Act await harness.InputQueueSendEndpoint.Send <IArchiveRecordRemoved>(new { MutationId = mutationId, ActionSuccessful = false, ErrorMessage = "My little error" }); // did the endpoint consume the message Assert.That(await harness.Consumed.Any <IArchiveRecordRemoved>()); // did the actual consumer consume the message Assert.That(await consumer.Consumed.Any <IArchiveRecordRemoved>()); // Assert harvestManager.Verify(e => e.UpdateMutationStatus(It.Is <MutationStatusInfo>(f => f.MutationId == mutationId && f.NewStatus == ActionStatus.SyncFailed && f.ErrorMessage == "My little error" )), Times.Once); } finally { await harness.Stop(); } }
/// <summary> /// Inserts a new status record into the log table /// </summary> /// <param name="info">The information to log</param> /// <returns>Number of affected records</returns> // ReSharper disable once UnusedMethodReturnValue.Local private int InsertMutationStatusLog(MutationStatusInfo info) { var error = string.IsNullOrEmpty(info.ErrorMessage) ? null : info.ErrorMessage + Environment.NewLine + Environment.NewLine + info.StackTrace; return(ExecuteSql(SqlStatements.SqlUpdateMutationActionLog, new[] { new OracleParameter { ParameterName = "mttn_id", Value = info.MutationId }, new OracleParameter { ParameterName = "aktn_stts_hist", Value = info.NewStatus.ToString() }, new OracleParameter { ParameterName = "error_grnd", Value = error } })); }
public async Task If_sync_success_update_mutation_table_with_success() { var harness = new InMemoryTestHarness(); try { // Arrange long mutationId = 666; var status = new MutationStatusInfo { MutationId = mutationId, NewStatus = ActionStatus.SyncCompleted, ChangeFromStatus = ActionStatus.SyncInProgress }; harvestManager.Setup(e => e.UpdateMutationStatus(status)); var archiveRecordUpdatedConsumer = harness.Consumer(() => new ArchiveRecordUpdatedConsumer(harvestManager.Object)); await harness.Start(); // Act await harness.InputQueueSendEndpoint.Send <IArchiveRecordUpdated>(new { MutationId = mutationId, ActionSuccessful = true }); // Wait for the results Assert.True(await archiveRecordUpdatedConsumer.Consumed.Any <IArchiveRecordUpdated>()); // Assert harvestManager.Verify(e => e.UpdateMutationStatus(It.Is <MutationStatusInfo>(f => f.MutationId == mutationId && f.NewStatus == ActionStatus.SyncCompleted && f.ChangeFromStatus == ActionStatus.SyncInProgress )), Times.Once); } finally { await harness.Stop(); } }
/// <summary> /// Updates the mutation status of a mutation record in the AIS. /// </summary> /// <param name="info">Object with detailed information about the status change.</param> /// <returns>The number of affected records.</returns> public int UpdateMutationStatus(MutationStatusInfo info) { return(dataProvider.UpdateMutationStatus(info)); }
/// <summary> /// Updates the mutation status in the mutation table. /// </summary> /// <param name="info">Object with information about the change.</param> /// <returns>Task.</returns> public int UpdateMutationStatus(MutationStatusInfo info) { return(queueAccess.UpdateMutationStatus(info)); }