Пример #1
0
        public async Task RunningHost_EnableDrainMode_ReturnsAccepted()
        {
            // Validate the drain state is "Disabled" initially
            var response = await SamplesTestHelpers.InvokeDrainStatus(this);

            var responseString = response.Content.ReadAsStringAsync().Result;
            var drainStatus    = JsonConvert.DeserializeObject <DrainModeStatus>(responseString);

            Assert.Equal(drainStatus.State, DrainModeState.Disabled);

            // Validate ability to call HttpTrigger without issues
            response = await SamplesTestHelpers.InvokeHttpTrigger(this, "HttpTrigger");

            Assert.Equal(HttpStatusCode.OK, response.StatusCode);

            // Put the host in drain mode and validate returns Accepted
            response = await SamplesTestHelpers.InvokeDrain(this);

            Assert.Equal(HttpStatusCode.Accepted, response.StatusCode);

            // Validate the drain state is changed to "Completed"
            response = await SamplesTestHelpers.InvokeDrainStatus(this);

            responseString = response.Content.ReadAsStringAsync().Result;
            drainStatus    = JsonConvert.DeserializeObject <DrainModeStatus>(responseString);

            Assert.Equal(DrainModeState.Completed, drainStatus.State);

            // Validate HttpTrigger function is still working
            response = await SamplesTestHelpers.InvokeHttpTrigger(this, "HttpTrigger");

            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
        }
Пример #2
0
        public async Task RunningHost_EnableDrainMode_FunctionInvocationCancelled_ReturnsNotFound()
        {
            // Validate the drain state is "Disabled" initially
            var response = await SamplesTestHelpers.InvokeDrainStatus(this);

            var responseString = response.Content.ReadAsStringAsync().Result;
            var drainStatus    = JsonConvert.DeserializeObject <DrainModeStatus>(responseString);

            Assert.Equal(drainStatus.State, DrainModeState.Disabled);

            _ = Task.Run(async() =>
            {
                // Put the host in drain mode
                await TestHelpers.Await(async() =>
                {
                    response = await SamplesTestHelpers.InvokeDrain(this);
                    Assert.Equal(HttpStatusCode.Accepted, response.StatusCode);
                    return(true);
                }, 10000);
            });

            // Call function with cancellation token handler
            response = await SamplesTestHelpers.InvokeHttpTrigger(this, "HttpTrigger-Cancellation");

            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
        }
        public async Task DrainModeEnabled_RunningHost_StartsNewHost_ReturnsOk()
        {
            // Validate the drain state is "Disabled" initially
            var response = await SamplesTestHelpers.InvokeDrainStatus(this);

            var responseString = response.Content.ReadAsStringAsync().Result;
            var drainStatus    = JsonConvert.DeserializeObject <DrainModeStatus>(responseString);

            Assert.Equal(drainStatus.State, DrainModeState.Disabled);

            // Capture pre-drain instance ID
            var originalInstanceId = this.HostInstanceId;

            // Validate ability to call HttpTrigger without issues
            response = await SamplesTestHelpers.InvokeHttpTrigger(this, "HttpTrigger");

            Assert.Equal(HttpStatusCode.OK, response.StatusCode);

            // Put the host in drain mode
            response = await SamplesTestHelpers.InvokeDrain(this);

            // Validate the drain state is changed to "Completed"
            response = await SamplesTestHelpers.InvokeDrainStatus(this);

            responseString = response.Content.ReadAsStringAsync().Result;
            drainStatus    = JsonConvert.DeserializeObject <DrainModeStatus>(responseString);

            Assert.Equal(DrainModeState.Completed, drainStatus.State);

            // Validate host is "Running" after resume is called
            response = await SamplesTestHelpers.InvokeResume(this);

            responseString = response.Content.ReadAsStringAsync().Result;
            var resumeStatus = JsonConvert.DeserializeObject <ResumeStatus>(responseString);

            Assert.Equal(ScriptHostState.Running, resumeStatus.State);

            // Validate the drain state is changed to "Disabled"
            response = await SamplesTestHelpers.InvokeDrainStatus(this);

            responseString = response.Content.ReadAsStringAsync().Result;
            drainStatus    = JsonConvert.DeserializeObject <DrainModeStatus>(responseString);

            Assert.Equal(DrainModeState.Disabled, drainStatus.State);

            // Validate HttpTrigger function is still working
            response = await SamplesTestHelpers.InvokeHttpTrigger(this, "HttpTrigger");

            Assert.Equal(HttpStatusCode.OK, response.StatusCode);

            // Validate the instance ID has changed
            Assert.NotEqual(originalInstanceId, this.HostInstanceId);
        }
Пример #4
0
        public async Task DrainStatus_RunningHost_ReturnsExpected()
        {
            // Validate the state is "Disabled" initially
            var response = await SamplesTestHelpers.InvokeDrainStatus(this);

            var responseString = response.Content.ReadAsStringAsync().Result;
            var status         = JsonConvert.DeserializeObject <DrainModeStatus>(responseString);

            Assert.Equal(DrainModeState.Disabled, status.State);

            ManualResetEvent resetEvent = new ManualResetEvent(false);

            _ = Task.Run(async() =>
            {
                // Put the host to drain mode
                response = await SamplesTestHelpers.InvokeDrain(this);

                // Validate the state is changed to "InProgress"
                await TestHelpers.Await(async() =>
                {
                    var response       = await SamplesTestHelpers.InvokeDrainStatus(this);
                    var responseString = response.Content.ReadAsStringAsync().Result;
                    var status         = JsonConvert.DeserializeObject <DrainModeStatus>(responseString);

                    return(status.State == DrainModeState.InProgress);
                }, 20000);

                // Validate the state is changed to "Completed"
                await TestHelpers.Await(async() =>
                {
                    var response       = await SamplesTestHelpers.InvokeDrainStatus(this);
                    var responseString = response.Content.ReadAsStringAsync().Result;
                    var status         = JsonConvert.DeserializeObject <DrainModeStatus>(responseString);

                    return(status.State == DrainModeState.Completed);
                }, 20000);

                resetEvent.Set();
            });

            response = await SamplesTestHelpers.InvokeHttpTrigger(this, "HttpTrigger-LongRun");

            Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
            bool result = resetEvent.WaitOne(30000);

            Assert.True(result);
        }