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); }
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); }
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); }