public async Task WaitForCompletionOrCreateCheckStatusResponseAsync_Returns_HTTP_200_Response_After_Few_Iterations() { var httpApiHandler = new HttpApiHandler(GetTestExtension(), null); var stopwatch = Stopwatch.StartNew(); var httpResponseMessage = await httpApiHandler.WaitForCompletionOrCreateCheckStatusResponseAsync( new HttpRequestMessage { RequestUri = new Uri(TestConstants.RequestUri), }, TestConstants.InstanceIdIterations, new OrchestrationClientAttribute { TaskHub = TestConstants.TaskHub, ConnectionName = TestConstants.ConnectionName, }, TimeSpan.FromSeconds(30), TimeSpan.FromSeconds(8)); stopwatch.Stop(); Assert.Equal(HttpStatusCode.OK, httpResponseMessage.StatusCode); var content = await httpResponseMessage.Content.ReadAsStringAsync(); var value = JsonConvert.DeserializeObject <string>(content); Assert.Equal("Hello Tokyo!", value); Assert.True(stopwatch.Elapsed < TimeSpan.FromSeconds(30)); }
public async Task CreateCheckStatusResponse_Returns_Correct_HTTP_202_Response() { var httpApiHandler = new HttpApiHandler(GetTestExtension(), null); var httpResponseMessage = httpApiHandler.CreateCheckStatusResponse( new HttpRequestMessage { RequestUri = new Uri(TestConstants.RequestUri), }, TestConstants.InstanceId, new OrchestrationClientAttribute { TaskHub = TestConstants.TaskHub, ConnectionName = TestConstants.ConnectionName, }); Assert.Equal(HttpStatusCode.Accepted, httpResponseMessage.StatusCode); var content = await httpResponseMessage.Content.ReadAsStringAsync(); var status = JsonConvert.DeserializeObject <JObject>(content); Assert.Equal(status["id"], TestConstants.InstanceId); Assert.Equal( $"{TestConstants.NotificationUrlBase}/instances/7b59154ae666471993659902ed0ba742?taskHub=SampleHubVS&connection=Storage&code=mykey", status["statusQueryGetUri"]); Assert.Equal( $"{TestConstants.NotificationUrlBase}/instances/7b59154ae666471993659902ed0ba742/raiseEvent/{{eventName}}?taskHub=SampleHubVS&connection=Storage&code=mykey", status["sendEventPostUri"]); Assert.Equal( $"{TestConstants.NotificationUrlBase}/instances/7b59154ae666471993659902ed0ba742/terminate?reason={{text}}&taskHub=SampleHubVS&connection=Storage&code=mykey", status["terminatePostUri"]); Assert.Equal( $"{TestConstants.NotificationUrlBase}/instances/7b59154ae666471993659902ed0ba742?taskHub=SampleHubVS&connection=Storage&code=mykey", status["purgeHistoryDeleteUri"]); }
private async Task CheckRuntimeStatus(string instanceId, OrchestrationRuntimeStatus runtimeStatus, HttpStatusCode httpStatusCode = HttpStatusCode.OK) { var httpApiHandler = new HttpApiHandler(new DurableTaskExtensionMock() { NotificationUrl = new Uri(TestConstants.NotificationUrl) }, null); var httpResponseMessage = await httpApiHandler.WaitForCompletionOrCreateCheckStatusResponseAsync( new HttpRequestMessage { RequestUri = new Uri(TestConstants.RequestUri), }, instanceId, new OrchestrationClientAttribute { TaskHub = TestConstants.TaskHub, ConnectionName = TestConstants.ConnectionName, }, TimeSpan.FromSeconds(30), TimeSpan.FromSeconds(8)); Assert.Equal(httpResponseMessage.StatusCode, httpStatusCode); var content = await httpResponseMessage.Content.ReadAsStringAsync(); var response = JsonConvert.DeserializeObject <JObject>(content); Assert.Equal(response["runtimeStatus"], runtimeStatus.ToString()); }
public async Task WaitForCompletionOrCreateCheckStatusResponseAsync_Returns_HTTP_200_Response() { var httpApiHandler = new HttpApiHandler(new DurableTaskExtensionMock() { NotificationUrl = new Uri(TestConstants.NotificationUrl) }, null); var httpResponseMessage = await httpApiHandler.WaitForCompletionOrCreateCheckStatusResponseAsync( new HttpRequestMessage { RequestUri = new Uri(TestConstants.RequestUri), }, TestConstants.IntanceIdFactComplete, new OrchestrationClientAttribute { TaskHub = TestConstants.TaskHub, ConnectionName = TestConstants.ConnectionName, }, TimeSpan.FromSeconds(100), TimeSpan.FromSeconds(10)); Assert.Equal(HttpStatusCode.OK, httpResponseMessage.StatusCode); var content = await httpResponseMessage.Content.ReadAsStringAsync(); var value = JsonConvert.DeserializeObject <string>(content); Assert.Equal("Hello Tokyo!", value); }
private void CreateCheckStatusResponse_Throws_Exception_When_NotificationUrl_Missing() { var httpApiHandler = new HttpApiHandler(new DurableTaskExtension(), null); var ex = Assert.Throws <InvalidOperationException>(() => httpApiHandler.CreateCheckStatusResponse(new HttpRequestMessage(), string.Empty, null)); Assert.Equal("Webhooks are not configured", ex.Message); }
public async Task CreateCheckStatusResponse_Returns_Corrent_HTTP_202_Response() { var httpApiHandler = new HttpApiHandler(new DurableTaskExtension() { NotificationUrl = new Uri(TestConstants.NotificationUrl) }, null); var httpResponseMessage = httpApiHandler.CreateCheckStatusResponse( new HttpRequestMessage { RequestUri = new Uri(TestConstants.RequestUri), }, TestConstants.InstanceId, new OrchestrationClientAttribute { TaskHub = TestConstants.TaskHub, ConnectionName = TestConstants.ConnectionName, }); Assert.Equal(httpResponseMessage.StatusCode, HttpStatusCode.Accepted); var content = await httpResponseMessage.Content.ReadAsStringAsync(); var status = JsonConvert.DeserializeObject <JObject>(content); Assert.Equal(status["id"], TestConstants.InstanceId); Assert.Equal( status["statusQueryGetUri"], "http://localhost:7071/admin/extensions/DurableTaskExtension/instances/7b59154ae666471993659902ed0ba742?taskHub=SampleHubVS&connection=Storage&code=mykey"); Assert.Equal( status["sendEventPostUri"], "http://localhost:7071/admin/extensions/DurableTaskExtension/instances/7b59154ae666471993659902ed0ba742/raiseEvent/{eventName}?taskHub=SampleHubVS&connection=Storage&code=mykey"); Assert.Equal( status["terminatePostUri"], "http://localhost:7071/admin/extensions/DurableTaskExtension/instances/7b59154ae666471993659902ed0ba742/terminate?reason={text}&taskHub=SampleHubVS&connection=Storage&code=mykey"); }
public void CreateCheckStatus_Returns_Correct_HttpManagementPayload_based_on_default_values() { var httpApiHandler = new HttpApiHandler(GetTestExtension(), null); HttpManagementPayload httpManagementPayload = httpApiHandler.CreateHttpManagementPayload(TestConstants.InstanceId, null, null); Assert.NotNull(httpManagementPayload); Assert.Equal(httpManagementPayload.Id, TestConstants.InstanceId); Assert.Equal( $"{TestConstants.NotificationUrlBase}/instances/7b59154ae666471993659902ed0ba742?taskHub=DurableFunctionsHub&connection=Storage&code=mykey", httpManagementPayload.StatusQueryGetUri); Assert.Equal( $"{TestConstants.NotificationUrlBase}/instances/7b59154ae666471993659902ed0ba742/raiseEvent/{{eventName}}?taskHub=DurableFunctionsHub&connection=Storage&code=mykey", httpManagementPayload.SendEventPostUri); Assert.Equal( $"{TestConstants.NotificationUrlBase}/instances/7b59154ae666471993659902ed0ba742/terminate?reason={{text}}&taskHub=DurableFunctionsHub&connection=Storage&code=mykey", httpManagementPayload.TerminatePostUri); }
public async Task WaitForCompletionOrCreateCheckStatusResponseAsync_Throws_Exception_When_Bad_Timeout_Request() { var httpApiHandler = new HttpApiHandler(GetTestExtension(), null); var ex = await Assert.ThrowsAsync <ArgumentException>(() => httpApiHandler.WaitForCompletionOrCreateCheckStatusResponseAsync( new HttpRequestMessage { RequestUri = new Uri(TestConstants.RequestUri), }, TestConstants.InstanceId, new OrchestrationClientAttribute { TaskHub = TestConstants.TaskHub, ConnectionName = TestConstants.ConnectionName, }, TimeSpan.FromSeconds(0), TimeSpan.FromSeconds(100))); Assert.Equal($"Total timeout 0 should be bigger than retry timeout 100", ex.Message); }
public void CreateCheckStatus_Returns_Correct_HttpManagementPayload_based_on_custom_values() { var httpApiHandler = new HttpApiHandler(GetTestExtension(), null); HttpManagementPayload httpManagementPayload = httpApiHandler.CreateHttpManagementPayload(TestConstants.InstanceId, TestConstants.TaskHub, TestConstants.CustomConnectionName); Assert.NotNull(httpManagementPayload); Assert.Equal(httpManagementPayload.Id, TestConstants.InstanceId); Assert.Equal( $"{TestConstants.NotificationUrlBase}/instances/7b59154ae666471993659902ed0ba742?taskHub=SampleHubVS&connection=TestConnection&code=mykey", httpManagementPayload.StatusQueryGetUri); Assert.Equal( $"{TestConstants.NotificationUrlBase}/instances/7b59154ae666471993659902ed0ba742/raiseEvent/{{eventName}}?taskHub=SampleHubVS&connection=TestConnection&code=mykey", httpManagementPayload.SendEventPostUri); Assert.Equal( $"{TestConstants.NotificationUrlBase}/instances/7b59154ae666471993659902ed0ba742/terminate?reason={{text}}&taskHub=SampleHubVS&connection=TestConnection&code=mykey", httpManagementPayload.TerminatePostUri); Assert.Equal( $"{TestConstants.NotificationUrlBase}/instances/7b59154ae666471993659902ed0ba742?taskHub=SampleHubVS&connection=TestConnection&code=mykey", httpManagementPayload.PurgeHistoryDeleteUri); }
public async Task WaitForCompletionOrCreateCheckStatusResponseAsync_Returns_HTTP_202_Response_After_Timeout() { var httpApiHandler = new HttpApiHandler(new DurableTaskExtensionMock() { NotificationUrl = new Uri(TestConstants.NotificationUrl) }, null); var stopWatch = Stopwatch.StartNew(); var httpResponseMessage = await httpApiHandler.WaitForCompletionOrCreateCheckStatusResponseAsync( new HttpRequestMessage { RequestUri = new Uri(TestConstants.RequestUri), }, TestConstants.RandomInstanceId, new OrchestrationClientAttribute { TaskHub = TestConstants.TaskHub, ConnectionName = TestConstants.ConnectionName, }, TimeSpan.FromSeconds(100), TimeSpan.FromSeconds(10)); stopWatch.Stop(); Assert.Equal(HttpStatusCode.Accepted, httpResponseMessage.StatusCode); var content = await httpResponseMessage.Content.ReadAsStringAsync(); var status = JsonConvert.DeserializeObject <JObject>(content); Assert.Equal(status["id"], TestConstants.RandomInstanceId); Assert.Equal( "http://localhost:7071/admin/extensions/DurableTaskExtension/instances/9b59154ae666471993659902ed0ba749?taskHub=SampleHubVS&connection=Storage&code=mykey", status["statusQueryGetUri"]); Assert.Equal( "http://localhost:7071/admin/extensions/DurableTaskExtension/instances/9b59154ae666471993659902ed0ba749/raiseEvent/{eventName}?taskHub=SampleHubVS&connection=Storage&code=mykey", status["sendEventPostUri"]); Assert.Equal( "http://localhost:7071/admin/extensions/DurableTaskExtension/instances/9b59154ae666471993659902ed0ba749/terminate?reason={text}&taskHub=SampleHubVS&connection=Storage&code=mykey", status["terminatePostUri"]); Assert.True(stopWatch.Elapsed > TimeSpan.FromSeconds(30)); }