Exemplo n.º 1
0
        public void ValidateWorkOrderAckShouldReturnFalseIfAckIsNull()
        {
            string            validationMessage = string.Empty;
            ValidationService validationService = new ValidationService();
            WorkOrderAck      workOrderAck      = null;
            string            errorMessage;
            string            expectedMessage = "Service Bus Queue message is null";
            bool isValid = validationService.IsValidWorkOrder(workOrderAck, out errorMessage);

            Assert.Equal(expectedMessage, errorMessage);
            Assert.False(isValid);
        }
Exemplo n.º 2
0
        public async Task Run([ServiceBusTrigger("%WorkOrderCreateQueueName%", Connection = "ServiceBusConnection")] Message queueMessage, ILogger log)
        {
            WorkOrderAck workOrderAck    = null;
            string       messageContents = null;

            try
            {
                if (queueMessage != null)
                {
                    // Deserialize message contents into work order ack class
                    messageContents = Encoding.UTF8.GetString(queueMessage.Body);
                    workOrderAck    = JsonConvert.DeserializeObject <WorkOrderAck>(messageContents);

                    log.LogInformation(
                        "Recieved work order acknowledgment message for work order ID {workOrderId}, related to FaultName '{faultName}' with FaultActiveTime of '{faultActiveTime}' and AssetPath of '{assetPath}'. Message content: {messageContent}",
                        workOrderAck.WorkOrderId,
                        workOrderAck.FaultName,
                        workOrderAck.FaultActiveTime,
                        workOrderAck.AssetPath,
                        messageContents);
                }
            }
            catch (JsonException je)
            {
                log.LogError(
                    "Exception while processing message, {queueMessageContent}. Exception: {exceptionMessage}",
                    messageContents,
                    je.Message);

                await this.errorQueueService.SendMessageToErrorQueueAsync(messageContents, je.Message).ConfigureAwait(false);

                return;
            }

            // validate work order ack properties
            if (!this.validationService.IsValidWorkOrder(workOrderAck, out string validationMessage))
            {
                log.LogError(
                    "Work Order ack data failed validation. Validation Message: {validationMessage}",
                    validationMessage);

                await this.errorQueueService.SendMessageToErrorQueueAsync(messageContents, validationMessage).ConfigureAwait(false);
            }
            else
            {
                // Serialize message contents
                var sendMessage = JsonConvert.SerializeObject(workOrderAck);

                // Send Message to IoTHub
                await this.iconicsService.SendWorkOrderMessageAsync(sendMessage).ConfigureAwait(false);
            }
        }
Exemplo n.º 3
0
        public void ValidateWorkOrderAckShouldReturnMessageIfInvalidWorkOrderUrl()
        {
            ValidationService validationService = new ValidationService();
            WorkOrderAck      workOrderAck      = new WorkOrderAck()
            {
                AssetPath       = "AssetPath",
                FaultActiveTime = "FaultActiveTime",
                FaultName       = "FaultName",
                WorkOrderStatus = "WorkOrderStatus",
            };
            string errorMessage;
            bool   isValid         = validationService.IsValidWorkOrder(workOrderAck, out errorMessage);
            string expectedMessage = $"One or more required fields were not provided. Asset Path: {workOrderAck.AssetPath}. Fault Active Time: {workOrderAck.FaultActiveTime}. Fault Name: {workOrderAck.FaultName}. Work Order Status: {workOrderAck.WorkOrderStatus}. Work Order ID: {workOrderAck.WorkOrderId} . Work Order Url: {workOrderAck.WorkOrderUrl}.";

            Assert.Equal(expectedMessage, errorMessage);
            Assert.False(isValid);
        }
Exemplo n.º 4
0
        public void ValidateWorkOrderAckShouldReturnNullIfValid()
        {
            ValidationService validationService = new ValidationService();
            WorkOrderAck      workOrderAck      = new WorkOrderAck()
            {
                AssetPath       = "AssetPath",
                FaultActiveTime = "FaultActiveTime",
                FaultName       = "FaultName",
                WorkOrderStatus = "WorkOrderStatus",
                WorkOrderId     = "WorkOrderId",
                WorkOrderUrl    = "WorkOrderUrl",
            };
            string errorMessage;
            bool   isValid = validationService.IsValidWorkOrder(workOrderAck, out errorMessage);

            Assert.True(isValid);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Method definition to check if Work Order Acknowledgment Data is valid. Returns true if valid.
        /// </summary>
        /// <param name="ack">Work Order Acknowledgment Data.</param>
        /// <param name="validationMessage">Validation Message content.</param>
        /// <returns>Returns true or false indicating the status of the validation.</returns>
        public bool IsValidWorkOrder(WorkOrderAck ack, out string validationMessage)
        {
            bool isValid = true;

            validationMessage = string.Empty;
            if (ack != null)
            {
                if (string.IsNullOrEmpty(ack.AssetPath) || string.IsNullOrEmpty(ack.FaultActiveTime) || string.IsNullOrEmpty(ack.FaultName) || string.IsNullOrEmpty(ack.WorkOrderStatus) || string.IsNullOrEmpty(ack.WorkOrderId) || string.IsNullOrEmpty(ack.WorkOrderUrl))
                {
                    validationMessage = $"One or more required fields were not provided. Asset Path: {ack.AssetPath}. Fault Active Time: {ack.FaultActiveTime}. Fault Name: {ack.FaultName}. Work Order Status: {ack.WorkOrderStatus}. Work Order ID: {ack.WorkOrderId} . Work Order Url: {ack.WorkOrderUrl}.";
                    isValid           = false;
                }
            }
            else
            {
                validationMessage = Resources.SBQueueMsgNull;
                isValid           = false;
            }

            return(isValid);
        }
        public async void ShouldRunUnsuccessfullyOnInvalidAck()
        {
            // mock calls to return true
            string validationMessage;

            this.validationServiceMock.Setup(service => service.IsValidWorkOrder(It.IsAny <WorkOrderAck>(), out validationMessage)).Returns(false);

            // create message to pass to Run method
            WorkOrderAck workOrderAck = new WorkOrderAck()
            {
                AssetPath           = "AssetPath",
                FaultActiveTime     = "FaultActiveTime",
                FaultName           = "FaultName",
                WorkOrderStatus     = "WorkOrderStatus",
                WorkOrderId         = "WorkOrderId",
                WorkOrderUrl        = "WorkOrderUrl",
                WorkOrderCreatedOn  = "WorkOrderCreatedOn",
                WorkOrderModifiedOn = "WorkOrderModifiedOn",
            };

            string  messageBody = JsonConvert.SerializeObject(workOrderAck);
            Message message     = new Message(Encoding.UTF8.GetBytes(messageBody));

            // set actualMessageContents equal to the first parameter passed into the SendMessageToErrorQueue method which should be called within the Run method
            string actualMessageContents = null;

            this.errorQueueServiceMock.Setup(service => service.SendMessageToErrorQueueAsync(It.IsAny <string>(), It.IsAny <string>())).Callback <string, string>((messageContents, validationMessage) => actualMessageContents = messageContents);

            // instantiate function class and run function
            SendWorkOrderAck function = new SendWorkOrderAck(this.iconicsServiceMock.Object, this.validationServiceMock.Object, this.errorQueueServiceMock.Object);
            await function.Run(message, this.logger).ConfigureAwait(false);

            // verify that SendMessageToErrorQueue was called and received the correct messageContents parameter
            string expectedErrorText = "Work Order ack data failed validation. Validation Message:";

            this.errorQueueServiceMock.Verify(service => service.SendMessageToErrorQueueAsync(It.IsAny <string>(), It.IsAny <string>()), Times.Once);
            Assert.Equal(Encoding.UTF8.GetString(message.Body), actualMessageContents);
            Assert.Contains(expectedErrorText, this.logger.Logs[1], System.StringComparison.OrdinalIgnoreCase);
        }