public async Task ExecuteAsync_ExecutionRequested_ShouldInvokeOnExecuting() { var mockJsonHttpClient = new Mock <IJsonHttpClient>(); var mockExecServiceProvider = new Mock <IExecutionServiceProvider>(); var mockInputAccessorProvider = new Mock <IInputObjectAccessorProvider>(); var mockOutputAccessorProvider = new Mock <IOutputObjectAccessorProvider>(); var mockSigner = new Mock <ISigner <HttpExecutionRequest> >(); var mockLogger = new Mock <ILogger <JsonHttpExecutionAdapter> >(); var execAdapter = new JsonHttpExecutionAdapter( mockLogger.Object, mockJsonHttpClient.Object, mockExecServiceProvider.Object, mockInputAccessorProvider.Object, mockOutputAccessorProvider.Object, mockSigner.Object); var execRequest = CreateDefaultExecutionRequest(); SetupDefaultMockExecutionServiceProvider(execRequest, mockExecServiceProvider); SetupDefaultMockInputObjectAccessorProvider(execRequest, mockInputAccessorProvider); SetupDefaultMockOutputObjectAccessorProvider(execRequest, mockOutputAccessorProvider); var httpExecResponse = new HttpExecutionResponse { ExecutionId = execRequest.ExecutionId }; mockJsonHttpClient .Setup(hc => hc.PostAsync <HttpExecutionResponse>(defaultHttpExtensionSettings.ExecutionUrl, It.IsAny <HttpExecutionRequest>())) .Returns(Task.FromResult(new HttpResponse <HttpExecutionResponse>(HttpStatusCode.OK, httpExecResponse))); var execContext = await execAdapter.ExecuteAsync(execRequest, CancellationToken.None); mockExecServiceProvider.Verify(sp => sp.OnExecutingAsync(execRequest)); }
public async Task ExecuteAsync_ValidationRequested_StatusShouldBeValidationFailedIfBadRequestAndErrorsProvided() { var mockJsonHttpClient = new Mock <IJsonHttpClient>(); var mockExecServiceProvider = new Mock <IExecutionServiceProvider>(); var mockInputAccessorProvider = new Mock <IInputObjectAccessorProvider>(); var mockOutputAccessorProvider = new Mock <IOutputObjectAccessorProvider>(); var mockSigner = new Mock <ISigner <HttpExecutionRequest> >(); var mockLogger = new Mock <ILogger <JsonHttpExecutionAdapter> >(); var execAdapter = new JsonHttpExecutionAdapter( mockLogger.Object, mockJsonHttpClient.Object, mockExecServiceProvider.Object, mockInputAccessorProvider.Object, mockOutputAccessorProvider.Object, mockSigner.Object); var execRequest = CreateDefaultExecutionRequest(); execRequest.ValidateOnly = true; execRequest.IsValidationSupported = true; SetupDefaultMockExecutionServiceProvider(execRequest, mockExecServiceProvider); SetupDefaultMockInputObjectAccessorProvider(execRequest, mockInputAccessorProvider); SetupDefaultMockOutputObjectAccessorProvider(execRequest, mockOutputAccessorProvider); var httpValidationError = new HttpExecutionValidationError { ErrorCode = "Wrong", ErrorId = CreateRandomId(), ErrorMessage = "You did it wrong." }; var httpExecResponse = new HttpExecutionResponse { ExecutionId = execRequest.ExecutionId, ValidationErrors = new List <HttpExecutionValidationError> { httpValidationError } }; mockJsonHttpClient .Setup(hc => hc.PostAsync <HttpExecutionResponse>(defaultHttpExtensionSettings.ValidationUrl, It.IsAny <HttpExecutionRequest>())) .Returns(Task.FromResult(new HttpResponse <HttpExecutionResponse>(HttpStatusCode.BadRequest, httpExecResponse))); var execContext = await execAdapter.ExecuteAsync(execRequest, CancellationToken.None); execContext.Status.Should().Be(ExecutionStatus.ValidationFailed); execContext.ValidationErrors.Should().HaveCount(1); var validationError = execContext.ValidationErrors[0]; validationError.ErrorCode.Should().Be(httpValidationError.ErrorCode); validationError.ErrorId.Should().Be(httpValidationError.ErrorId); validationError.ErrorMessage.Should().Be(httpValidationError.ErrorMessage); }
public IActionResult PostEcho(HttpExecutionRequest execRequest) { using (_logger.BeginScope("Echo Post")) { HttpExecutionResponse httpExecResponse = new HttpExecutionResponse(); httpExecResponse.ExecutionId = execRequest.ExecutionId; httpExecResponse.ResponseData = JObject.FromObject(execRequest); return(Ok(httpExecResponse)); } }
private Core.Models.ExecutionContext ProcessBadRequest(Core.Models.ExecutionContext execContext, HttpExecutionResponse httpExecResponse) { execContext.ValidationErrors = httpExecResponse?.ValidationErrors.Select(e => e.ToCoreModel()).ToList(); if (execContext.ValidationErrors.Any()) { return(execContext.UpdateStatus(ExecutionStatus.ValidationFailed)); } else { throw new HttpRequestException($"Extension returned an unexpected status code: [{HttpStatusCode.BadRequest}]."); } }
public async Task ExecuteAsync_ValidationRequested_StatusShouldBeFailedIfOtherStatusCode() { var mockJsonHttpClient = new Mock <IJsonHttpClient>(); var mockExecServiceProvider = new Mock <IExecutionServiceProvider>(); var mockInputAccessorProvider = new Mock <IInputObjectAccessorProvider>(); var mockOutputAccessorProvider = new Mock <IOutputObjectAccessorProvider>(); var mockSigner = new Mock <ISigner <HttpExecutionRequest> >(); var mockLogger = new Mock <ILogger <JsonHttpExecutionAdapter> >(); var execAdapter = new JsonHttpExecutionAdapter( mockLogger.Object, mockJsonHttpClient.Object, mockExecServiceProvider.Object, mockInputAccessorProvider.Object, mockOutputAccessorProvider.Object, mockSigner.Object); var execRequest = CreateDefaultExecutionRequest(); execRequest.ValidateOnly = true; execRequest.IsValidationSupported = true; SetupDefaultMockExecutionServiceProvider(execRequest, mockExecServiceProvider); SetupDefaultMockInputObjectAccessorProvider(execRequest, mockInputAccessorProvider); SetupDefaultMockOutputObjectAccessorProvider(execRequest, mockOutputAccessorProvider); var httpExecResponse = new HttpExecutionResponse { ExecutionId = execRequest.ExecutionId }; mockJsonHttpClient .Setup(hc => hc.PostAsync <HttpExecutionResponse>(defaultHttpExtensionSettings.ValidationUrl, It.IsAny <HttpExecutionRequest>())) .Returns(Task.FromResult(new HttpResponse <HttpExecutionResponse>(HttpStatusCode.InternalServerError, httpExecResponse))); var execContext = await execAdapter.ExecuteAsync(execRequest, CancellationToken.None); execContext.Status.Should().Be(ExecutionStatus.Failed); execContext.ValidationErrors.Should().BeEmpty(); }
public async Task ExecuteAsync_ExecutionRequested_StatusShouldBeSucceededIfOk() { var mockJsonHttpClient = new Mock <IJsonHttpClient>(); var mockExecServiceProvider = new Mock <IExecutionServiceProvider>(); var mockInputAccessorProvider = new Mock <IInputObjectAccessorProvider>(); var mockOutputAccessorProvider = new Mock <IOutputObjectAccessorProvider>(); var mockSigner = new Mock <ISigner <HttpExecutionRequest> >(); var mockLogger = new Mock <ILogger <JsonHttpExecutionAdapter> >(); var execAdapter = new JsonHttpExecutionAdapter( mockLogger.Object, mockJsonHttpClient.Object, mockExecServiceProvider.Object, mockInputAccessorProvider.Object, mockOutputAccessorProvider.Object, mockSigner.Object); var execRequest = CreateDefaultExecutionRequest(); SetupDefaultMockExecutionServiceProvider(execRequest, mockExecServiceProvider); SetupDefaultMockInputObjectAccessorProvider(execRequest, mockInputAccessorProvider); SetupDefaultMockOutputObjectAccessorProvider(execRequest, mockOutputAccessorProvider); var httpExecResponse = new HttpExecutionResponse { ExecutionId = execRequest.ExecutionId, ResponseData = JObject.FromObject(execRequest) }; mockJsonHttpClient .Setup(hc => hc.PostAsync <HttpExecutionResponse>(defaultHttpExtensionSettings.ExecutionUrl, It.IsAny <HttpExecutionRequest>())) .Returns(Task.FromResult(new HttpResponse <HttpExecutionResponse>(HttpStatusCode.OK, httpExecResponse))); var execContext = await execAdapter.ExecuteAsync(execRequest, CancellationToken.None); execContext.Status.Should().Be(ExecutionStatus.Succeeded); execContext.ResultData.Should().BeEquivalentTo(httpExecResponse.ResponseData); }
public async void ExecuteAsync_ExecutionRequested_ShouldPostExecutionRequestToExtension() { var mockJsonHttpClient = new Mock <IJsonHttpClient>(); var mockExecServiceProvider = new Mock <IExecutionServiceProvider>(); var mockInputAccessorProvider = new Mock <IInputObjectAccessorProvider>(); var mockOutputAccessorProvider = new Mock <IOutputObjectAccessorProvider>(); var mockSigner = new Mock <ISigner <HttpExecutionRequest> >(); var mockLogger = new Mock <ILogger <JsonHttpExecutionAdapter> >(); var execAdapter = new JsonHttpExecutionAdapter( mockLogger.Object, mockJsonHttpClient.Object, mockExecServiceProvider.Object, mockInputAccessorProvider.Object, mockOutputAccessorProvider.Object, mockSigner.Object); var execRequest = CreateDefaultExecutionRequest(); SetupDefaultMockExecutionServiceProvider(execRequest, mockExecServiceProvider); SetupDefaultMockInputObjectAccessorProvider(execRequest, mockInputAccessorProvider); SetupDefaultMockOutputObjectAccessorProvider(execRequest, mockOutputAccessorProvider); string executionUrl = null; HttpExecutionRequest httpExecRequest = null; execRequest.ExecutionParameters = JObject.FromObject(execRequest); var httpExecResponse = new HttpExecutionResponse { ExecutionId = execRequest.ExecutionId }; mockJsonHttpClient .Setup(hc => hc.PostAsync <HttpExecutionResponse>(defaultHttpExtensionSettings.ExecutionUrl, It.IsAny <HttpExecutionRequest>())) .Returns(Task.FromResult(new HttpResponse <HttpExecutionResponse>(HttpStatusCode.OK, httpExecResponse))) .Callback <string, object>((u, er) => { executionUrl = u; httpExecRequest = er as HttpExecutionRequest; }); await execAdapter.ExecuteAsync(execRequest, CancellationToken.None); executionUrl.Should().NotBeNull(); httpExecRequest.Should().NotBeNull(); executionUrl.Should().Be(DefaultExtensionExecutionUrl); httpExecRequest.CreatedDateTimeUtc.Should().Be(execRequest.CreatedDateTimeUtc); httpExecRequest.ExecutionId.Should().Be(execRequest.ExecutionId); httpExecRequest.ExecutionProfileName.Should().Be(execRequest.ExecutionProfileName); httpExecRequest.Executor.Should().Be(execRequest.Executor); httpExecRequest.ExpirationDateTimeUtc.Should().Be(execRequest.ExecutionTimeoutDateTimeUtc); httpExecRequest.ExtensionId.Should().Be(execRequest.ExtensionId); httpExecRequest.ExtensionVersionId.Should().Be(execRequest.ExtensionVersionId); httpExecRequest.GetExecutionStatusUrl.Should().Be(execRequest.GetExecutionStatusUrl); httpExecRequest.Priority.Should().Be(execRequest.Priority); httpExecRequest.Services.Should().BeEquivalentTo(defaultExecutionServiceConfiguration); httpExecRequest.StatusUpdateKey.Should().Be(execRequest.StatusUpdateKey); httpExecRequest.UpdateExecutionStatusUrl.Should().Be(execRequest.UpdateExecutionStatusUrl); httpExecRequest.RequestParameters.Should().BeEquivalentTo(execRequest.ExecutionParameters); }