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");
        }
예제 #7
0
        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);
        }
예제 #8
0
        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));
        }