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);
        }
Exemple #2
0
        /// <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();
            }
        }
Exemple #5
0
        /// <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
                }
            }));
        }
Exemple #6
0
        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));
 }
Exemple #8
0
 /// <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));
 }