public async Task PollDeploymentStatusTest_ForErrorResponses(HttpStatusCode responseStatusCode, DeployStatus expectedDeployStatus) { // Arrange string deployUrl = "https://sitename.scm.azurewebsites.net/DeploymentStatus?Id=knownId"; Action <Mock <IHttpClient>, bool> verifyStep = (client, result) => { client.Verify(c => c.GetAsync( It.Is <Uri>(uri => string.Equals(uri.AbsoluteUri, deployUrl, StringComparison.Ordinal)), It.IsAny <CancellationToken>())); Assert.Equal($"{UserAgentName}/{UserAgentVersion}", client.Object.DefaultRequestHeaders.GetValues("User-Agent").FirstOrDefault()); Assert.True(result); }; Mock <IHttpClient> client = new Mock <IHttpClient>(); HttpRequestMessage requestMessage = new HttpRequestMessage(); client.Setup(x => x.DefaultRequestHeaders).Returns(requestMessage.Headers); client.Setup(c => c.GetAsync(new Uri(deployUrl, UriKind.RelativeOrAbsolute), It.IsAny <CancellationToken>())).Returns(() => { return(Task.FromResult(new HttpResponseMessage(responseStatusCode))); }); ZipDeploymentStatus deploymentStatus = new ZipDeploymentStatus(client.Object, $"{UserAgentName}/{UserAgentVersion}", null, false); // Act var actualdeployStatus = await deploymentStatus.PollDeploymentStatusAsync(deployUrl, userName, password); // Assert verifyStep(client, expectedDeployStatus == actualdeployStatus); }
public async Task PollDeploymentStatusTest_ForValidResponses(HttpStatusCode responseStatusCode, DeployStatus expectedDeployStatus) { // Arrange string deployUrl = "https://sitename.scm.azurewebsites.net/DeploymentStatus?Id=knownId"; Action <Mock <IHttpClient>, bool> verifyStep = (client, result) => { client.Verify(c => c.GetAsync( It.Is <Uri>(uri => string.Equals(uri.AbsoluteUri, deployUrl, StringComparison.Ordinal)), It.IsAny <CancellationToken>())); Assert.Equal($"{UserAgentName}/{UserAgentVersion}", client.Object.DefaultRequestHeaders.GetValues("User-Agent").FirstOrDefault()); Assert.True(result); }; var deploymentResponse = new DeploymentResponse() { Id = "20a106ca-3797-4dbb", Status = expectedDeployStatus, LogUrl = "https://mywebapp.scm.azurewebsites.net/api/deployments/latest/log", }; Mock <IHttpClient> client = new Mock <IHttpClient>(); HttpRequestMessage requestMessage = new HttpRequestMessage(); client.Setup(x => x.DefaultRequestHeaders).Returns(requestMessage.Headers); client.Setup(c => c.GetAsync(new Uri(deployUrl, UriKind.RelativeOrAbsolute), It.IsAny <CancellationToken>())).Returns(() => { string statusJson = JsonSerializer.Serialize(deploymentResponse); HttpContent httpContent = new StringContent(statusJson, Encoding.UTF8, "application/json"); HttpResponseMessage responseMessage = new HttpResponseMessage(responseStatusCode) { Content = httpContent }; return(Task.FromResult(responseMessage)); }); ZipDeploymentStatus deploymentStatus = new ZipDeploymentStatus(client.Object, $"{UserAgentName}/{UserAgentVersion}", null, false); // Act var actualdeployStatus = await deploymentStatus.PollDeploymentStatusAsync(deployUrl, userName, password); // Assert verifyStep(client, expectedDeployStatus == actualdeployStatus.Status); }
internal async System.Threading.Tasks.Task <bool> ZipDeployAsync(string zipToPublishPath, string userName, string password, string?publishUrl, string siteName, string userAgentVersion, IHttpClient client, bool logMessages) { if (!File.Exists(zipToPublishPath) || client == null) { return(false); } string zipDeployPublishUrl; if (!string.IsNullOrEmpty(publishUrl)) { if (!publishUrl !.EndsWith("/")) { publishUrl += "/"; } zipDeployPublishUrl = publishUrl + "api/zipdeploy"; } else if (!string.IsNullOrEmpty(siteName)) { zipDeployPublishUrl = $"https://{siteName}.scm.azurewebsites.net/api/zipdeploy"; } else { if (logMessages) { Log.LogError(StringMessages.NeitherSiteNameNorPublishUrlGivenError); } return(false); } if (logMessages) { Log.LogMessage(MessageImportance.High, String.Format(StringMessages.PublishingZipViaZipDeploy, zipToPublishPath, zipDeployPublishUrl)); } // use the async version of the api Uri uri = new Uri($"{zipDeployPublishUrl}?isAsync=true", UriKind.Absolute); string userAgent = $"{UserAgentName}/{userAgentVersion}"; FileStream stream = File.OpenRead(zipToPublishPath); IHttpResponse response = await client.PostWithBasicAuthAsync(uri, userName, password, "application/zip", userAgent, Encoding.UTF8, stream); if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.Accepted) { if (logMessages) { Log.LogError(String.Format(StringMessages.ZipDeployFailureErrorMessage, zipDeployPublishUrl, response.StatusCode)); } return(false); } else { if (logMessages) { Log.LogMessage(StringMessages.ZipFileUploaded); } string deploymentUrl = response.GetHeader("Location").FirstOrDefault(); if (!string.IsNullOrEmpty(deploymentUrl)) { ZipDeploymentStatus deploymentStatus = new ZipDeploymentStatus(client, userAgent, Log, logMessages); DeployStatus status = await deploymentStatus.PollDeploymentStatusAsync(deploymentUrl, userName, password); if (status == DeployStatus.Success) { Log.LogMessage(MessageImportance.High, StringMessages.ZipDeploymentSucceeded); return(true); } else if (status == DeployStatus.Failed || status == DeployStatus.Unknown) { Log.LogError(String.Format(StringMessages.ZipDeployFailureErrorMessage, zipDeployPublishUrl, status)); return(false); } } } return(true); }