From 68102b87863970708649d0c711ec54a617bdcf3e Mon Sep 17 00:00:00 2001 From: Praburaj Date: Thu, 18 Dec 2014 20:01:47 -0800 Subject: [PATCH] Enabling IIS variation of the test Also organizing some test code. --- test/E2ETests/Common/DeploymentUtility.cs | 47 +++++---- test/E2ETests/Common/IISApplication.cs | 6 +- test/E2ETests/Common/ServerType.cs | 3 +- .../FacebookLoginScenarios.cs | 34 +++---- .../GoogleLoginScenarios.cs | 34 +++---- ...MicrosoftAccountAuthenticationScenarios.cs | 34 +++---- .../{ => Implementation}/Scenarios.cs | 95 ++++++++++--------- .../TwitterLoginScenarios.cs | 32 +++---- test/E2ETests/NtlmAuthentationTest.cs | 24 ++--- test/E2ETests/PublishAndRunTests.cs | 24 ++--- test/E2ETests/SmokeTests.cs | 47 +++++---- 11 files changed, 202 insertions(+), 178 deletions(-) rename test/E2ETests/{ => Implementation}/FacebookLoginScenarios.cs (67%) rename test/E2ETests/{ => Implementation}/GoogleLoginScenarios.cs (68%) rename test/E2ETests/{ => Implementation}/MicrosoftAccountAuthenticationScenarios.cs (67%) rename test/E2ETests/{ => Implementation}/Scenarios.cs (81%) rename test/E2ETests/{ => Implementation}/TwitterLoginScenarios.cs (69%) diff --git a/test/E2ETests/Common/DeploymentUtility.cs b/test/E2ETests/Common/DeploymentUtility.cs index b3a648ea1f..be0a2b5737 100644 --- a/test/E2ETests/Common/DeploymentUtility.cs +++ b/test/E2ETests/Common/DeploymentUtility.cs @@ -66,7 +66,8 @@ namespace E2ETests if (!string.IsNullOrWhiteSpace(startParameters.EnvironmentName)) { - if (startParameters.ServerType != ServerType.IISNativeModule) + if (startParameters.ServerType != ServerType.IISNativeModule && + startParameters.ServerType != ServerType.IIS) { // To choose an environment based Startup. Environment.SetEnvironmentVariable("KRE_ENV", startParameters.EnvironmentName); @@ -92,7 +93,8 @@ namespace E2ETests //Reason to do pack here instead of in a common place is use the right KRE to do the packing. Previous line switches to use the right KRE. if (startParameters.PackApplicationBeforeStart) { - if (startParameters.ServerType == ServerType.IISNativeModule) + if (startParameters.ServerType == ServerType.IISNativeModule || + startParameters.ServerType == ServerType.IIS) { // Pack to IIS root\application folder. KpmPack(startParameters, Path.Combine(Environment.GetEnvironmentVariable("SystemDrive") + @"\", @"inetpub\wwwroot")); @@ -106,20 +108,23 @@ namespace E2ETests overrideConfig = Path.GetFullPath(overrideConfig); File.WriteAllText(overrideConfig, "{\"UseInMemoryStore\": \"true\"}"); - // Set runAllManagedModulesForAllRequests=true - var webConfig = Path.Combine(startParameters.ApplicationPath, "web.config"); - var configuration = new XmlDocument(); - configuration.LoadXml(File.ReadAllText(webConfig)); + if (startParameters.ServerType == ServerType.IISNativeModule) + { + // Set runAllManagedModulesForAllRequests=true + var webConfig = Path.Combine(startParameters.ApplicationPath, "web.config"); + var configuration = new XmlDocument(); + configuration.LoadXml(File.ReadAllText(webConfig)); - // https://github.com/aspnet/Helios/issues/77 - var rammfarAttribute = configuration.CreateAttribute("runAllManagedModulesForAllRequests"); - rammfarAttribute.Value = "true"; - var modulesNode = configuration.CreateElement("modules"); - modulesNode.Attributes.Append(rammfarAttribute); - var systemWebServerNode = configuration.CreateElement("system.webServer"); - systemWebServerNode.AppendChild(modulesNode); - configuration.SelectSingleNode("//configuration").AppendChild(systemWebServerNode); - configuration.Save(webConfig); + // https://github.com/aspnet/Helios/issues/77 + var rammfarAttribute = configuration.CreateAttribute("runAllManagedModulesForAllRequests"); + rammfarAttribute.Value = "true"; + var modulesNode = configuration.CreateElement("modules"); + modulesNode.Attributes.Append(rammfarAttribute); + var systemWebServerNode = configuration.CreateElement("system.webServer"); + systemWebServerNode.AppendChild(modulesNode); + configuration.SelectSingleNode("//configuration").AppendChild(systemWebServerNode); + configuration.Save(webConfig); + } Thread.Sleep(1 * 1000); } @@ -129,12 +134,13 @@ namespace E2ETests } } - if (startParameters.ServerType == ServerType.IISNativeModule) + if (startParameters.ServerType == ServerType.IISNativeModule || + startParameters.ServerType == ServerType.IIS) { startParameters.IISApplication = new IISApplication(startParameters); startParameters.IISApplication.SetupApplication(); } - else if (startParameters.ServerType == ServerType.Helios) + else if (startParameters.ServerType == ServerType.IISExpress) { hostProcess = StartHeliosHost(startParameters); } @@ -310,7 +316,9 @@ namespace E2ETests hostProcess.WaitForExit(60 * 1000); startParameters.ApplicationPath = - (startParameters.ServerType == ServerType.Helios || startParameters.ServerType == ServerType.IISNativeModule) ? + (startParameters.ServerType == ServerType.IISExpress || + startParameters.ServerType == ServerType.IISNativeModule || + startParameters.ServerType == ServerType.IIS) ? Path.Combine(startParameters.PackedApplicationRootPath, "wwwroot") : Path.Combine(startParameters.PackedApplicationRootPath, "approot", "src", "MusicStore"); @@ -363,7 +371,8 @@ namespace E2ETests public static void CleanUpApplication(StartParameters startParameters, Process hostProcess, string musicStoreDbName) { - if (startParameters.ServerType == ServerType.IISNativeModule) + if (startParameters.ServerType == ServerType.IISNativeModule || + startParameters.ServerType == ServerType.IIS) { // Stop & delete the application pool. if (startParameters.IISApplication != null) diff --git a/test/E2ETests/Common/IISApplication.cs b/test/E2ETests/Common/IISApplication.cs index 64e9eab1f1..26908fb9ba 100644 --- a/test/E2ETests/Common/IISApplication.cs +++ b/test/E2ETests/Common/IISApplication.cs @@ -49,7 +49,11 @@ namespace E2ETests private ApplicationPool CreateAppPool(string appPoolName) { var applicationPool = _serverManager.ApplicationPools.Add(appPoolName); - applicationPool.ManagedRuntimeVersion = NATIVE_MODULE_MANAGED_RUNTIME_VERSION; + if (_startParameters.ServerType == ServerType.IISNativeModule) + { + // Not assigning a runtime version will choose v4.0 default. + applicationPool.ManagedRuntimeVersion = NATIVE_MODULE_MANAGED_RUNTIME_VERSION; + } applicationPool.Enable32BitAppOnWin64 = (_startParameters.KreArchitecture == KreArchitecture.x86); return applicationPool; } diff --git a/test/E2ETests/Common/ServerType.cs b/test/E2ETests/Common/ServerType.cs index e229407ab8..ff2fa543b6 100644 --- a/test/E2ETests/Common/ServerType.cs +++ b/test/E2ETests/Common/ServerType.cs @@ -2,7 +2,8 @@ { public enum ServerType { - Helios, + IISExpress, + IIS, IISNativeModule, WebListener, Kestrel diff --git a/test/E2ETests/FacebookLoginScenarios.cs b/test/E2ETests/Implementation/FacebookLoginScenarios.cs similarity index 67% rename from test/E2ETests/FacebookLoginScenarios.cs rename to test/E2ETests/Implementation/FacebookLoginScenarios.cs index ce79fc5188..0d26ff6d4e 100644 --- a/test/E2ETests/FacebookLoginScenarios.cs +++ b/test/E2ETests/Implementation/FacebookLoginScenarios.cs @@ -11,10 +11,10 @@ namespace E2ETests { private void LoginWithFacebook() { - httpClientHandler = new HttpClientHandler() { AllowAutoRedirect = false }; - httpClient = new HttpClient(httpClientHandler) { BaseAddress = new Uri(ApplicationBaseUrl) }; + _httpClientHandler = new HttpClientHandler() { AllowAutoRedirect = false }; + _httpClient = new HttpClient(_httpClientHandler) { BaseAddress = new Uri(_applicationBaseUrl) }; - var response = httpClient.GetAsync("Account/Login").Result; + var response = _httpClient.GetAsync("Account/Login").Result; ThrowIfResponseStatusNotOk(response); var responseContent = response.Content.ReadAsStringAsync().Result; Console.WriteLine("Signing in with Facebook account"); @@ -26,23 +26,23 @@ namespace E2ETests }; var content = new FormUrlEncodedContent(formParameters.ToArray()); - response = httpClient.PostAsync("Account/ExternalLogin", content).Result; + response = _httpClient.PostAsync("Account/ExternalLogin", content).Result; Assert.Equal("https://www.facebook.com/v2.2/dialog/oauth", response.Headers.Location.AbsoluteUri.Replace(response.Headers.Location.Query, string.Empty)); var queryItems = QueryHelpers.ParseQuery(response.Headers.Location.Query); Assert.Equal("code", queryItems["response_type"]); Assert.Equal("[AppId]", queryItems["client_id"]); - Assert.Equal(ApplicationBaseUrl + "signin-facebook", queryItems["redirect_uri"]); + Assert.Equal(_applicationBaseUrl + "signin-facebook", queryItems["redirect_uri"]); Assert.Equal("email,read_friendlists,user_checkins", queryItems["scope"]); Assert.Equal("ValidStateData", queryItems["state"]); Assert.Equal("custom", queryItems["custom_redirect_uri"]); //Check for the correlation cookie - Assert.NotNull(httpClientHandler.CookieContainer.GetCookies(new Uri(ApplicationBaseUrl)).GetCookieWithName(".AspNet.Correlation.Facebook")); + Assert.NotNull(_httpClientHandler.CookieContainer.GetCookies(new Uri(_applicationBaseUrl)).GetCookieWithName(".AspNet.Correlation.Facebook")); //This is just to generate a correlation cookie. Previous step would generate this cookie, but we have reset the handler now. - httpClientHandler = new HttpClientHandler() { AllowAutoRedirect = true }; - httpClient = new HttpClient(httpClientHandler) { BaseAddress = new Uri(ApplicationBaseUrl) }; + _httpClientHandler = new HttpClientHandler() { AllowAutoRedirect = true }; + _httpClient = new HttpClient(_httpClientHandler) { BaseAddress = new Uri(_applicationBaseUrl) }; - response = httpClient.GetAsync("Account/Login").Result; + response = _httpClient.GetAsync("Account/Login").Result; responseContent = response.Content.ReadAsStringAsync().Result; formParameters = new List> { @@ -52,19 +52,19 @@ namespace E2ETests }; content = new FormUrlEncodedContent(formParameters.ToArray()); - response = httpClient.PostAsync("Account/ExternalLogin", content).Result; + response = _httpClient.PostAsync("Account/ExternalLogin", content).Result; //Post a message to the Facebook middleware - response = httpClient.GetAsync("signin-facebook?code=ValidCode&state=ValidStateData").Result; + response = _httpClient.GetAsync("signin-facebook?code=ValidCode&state=ValidStateData").Result; ThrowIfResponseStatusNotOk(response); responseContent = response.Content.ReadAsStringAsync().Result; //Correlation cookie not getting cleared after successful signin? if (!Helpers.RunningOnMono) { - Assert.Null(httpClientHandler.CookieContainer.GetCookies(new Uri(ApplicationBaseUrl)).GetCookieWithName(".AspNet.Correlation.Facebook")); + Assert.Null(_httpClientHandler.CookieContainer.GetCookies(new Uri(_applicationBaseUrl)).GetCookieWithName(".AspNet.Correlation.Facebook")); } - Assert.Equal(ApplicationBaseUrl + "Account/ExternalLoginCallback?ReturnUrl=%2F", response.RequestMessage.RequestUri.AbsoluteUri); + Assert.Equal(_applicationBaseUrl + "Account/ExternalLoginCallback?ReturnUrl=%2F", response.RequestMessage.RequestUri.AbsoluteUri); Assert.Contains("AspnetvnextTest@test.com", responseContent, StringComparison.OrdinalIgnoreCase); formParameters = new List> @@ -74,20 +74,20 @@ namespace E2ETests }; content = new FormUrlEncodedContent(formParameters.ToArray()); - response = httpClient.PostAsync("Account/ExternalLoginConfirmation", content).Result; + response = _httpClient.PostAsync("Account/ExternalLoginConfirmation", content).Result; ThrowIfResponseStatusNotOk(response); responseContent = response.Content.ReadAsStringAsync().Result; Assert.Contains(string.Format("Hello {0}!", "AspnetvnextTest@test.com"), responseContent, StringComparison.OrdinalIgnoreCase); Assert.Contains("Log off", responseContent, StringComparison.OrdinalIgnoreCase); //Verify cookie sent - Assert.NotNull(httpClientHandler.CookieContainer.GetCookies(new Uri(ApplicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.Application")); - Assert.Null(httpClientHandler.CookieContainer.GetCookies(new Uri(ApplicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.ExternalLogin")); + Assert.NotNull(_httpClientHandler.CookieContainer.GetCookies(new Uri(_applicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.Application")); + Assert.Null(_httpClientHandler.CookieContainer.GetCookies(new Uri(_applicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.ExternalLogin")); Console.WriteLine("Successfully signed in with user '{0}'", "AspnetvnextTest@test.com"); Console.WriteLine("Verifying if the middleware notifications were fired"); //Check for a non existing item - response = httpClient.GetAsync(string.Format("Admin/StoreManager/GetAlbumIdFromName?albumName={0}", "123")).Result; + response = _httpClient.GetAsync(string.Format("Admin/StoreManager/GetAlbumIdFromName?albumName={0}", "123")).Result; //This action requires admin permissions. If notifications are fired this permission is granted Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); Console.WriteLine("Middleware notifications were fired successfully"); diff --git a/test/E2ETests/GoogleLoginScenarios.cs b/test/E2ETests/Implementation/GoogleLoginScenarios.cs similarity index 68% rename from test/E2ETests/GoogleLoginScenarios.cs rename to test/E2ETests/Implementation/GoogleLoginScenarios.cs index 658cdbd3fa..7542d75f37 100644 --- a/test/E2ETests/GoogleLoginScenarios.cs +++ b/test/E2ETests/Implementation/GoogleLoginScenarios.cs @@ -11,10 +11,10 @@ namespace E2ETests { private void LoginWithGoogle() { - httpClientHandler = new HttpClientHandler() { AllowAutoRedirect = false }; - httpClient = new HttpClient(httpClientHandler) { BaseAddress = new Uri(ApplicationBaseUrl) }; + _httpClientHandler = new HttpClientHandler() { AllowAutoRedirect = false }; + _httpClient = new HttpClient(_httpClientHandler) { BaseAddress = new Uri(_applicationBaseUrl) }; - var response = httpClient.GetAsync("Account/Login").Result; + var response = _httpClient.GetAsync("Account/Login").Result; ThrowIfResponseStatusNotOk(response); var responseContent = response.Content.ReadAsStringAsync().Result; Console.WriteLine("Signing in with Google account"); @@ -26,24 +26,24 @@ namespace E2ETests }; var content = new FormUrlEncodedContent(formParameters.ToArray()); - response = httpClient.PostAsync("Account/ExternalLogin", content).Result; + response = _httpClient.PostAsync("Account/ExternalLogin", content).Result; Assert.Equal("https://accounts.google.com/o/oauth2/auth", response.Headers.Location.AbsoluteUri.Replace(response.Headers.Location.Query, string.Empty)); var queryItems = QueryHelpers.ParseQuery(response.Headers.Location.Query); Assert.Equal("code", queryItems["response_type"]); Assert.Equal("offline", queryItems["access_type"]); Assert.Equal("[ClientId]", queryItems["client_id"]); - Assert.Equal(ApplicationBaseUrl + "signin-google", queryItems["redirect_uri"]); + Assert.Equal(_applicationBaseUrl + "signin-google", queryItems["redirect_uri"]); Assert.Equal("openid profile email", queryItems["scope"]); Assert.Equal("ValidStateData", queryItems["state"]); Assert.Equal("custom", queryItems["custom_redirect_uri"]); //Check for the correlation cookie - Assert.NotNull(httpClientHandler.CookieContainer.GetCookies(new Uri(ApplicationBaseUrl)).GetCookieWithName(".AspNet.Correlation.Google")); + Assert.NotNull(_httpClientHandler.CookieContainer.GetCookies(new Uri(_applicationBaseUrl)).GetCookieWithName(".AspNet.Correlation.Google")); //This is just to generate a correlation cookie. Previous step would generate this cookie, but we have reset the handler now. - httpClientHandler = new HttpClientHandler() { AllowAutoRedirect = true }; - httpClient = new HttpClient(httpClientHandler) { BaseAddress = new Uri(ApplicationBaseUrl) }; + _httpClientHandler = new HttpClientHandler() { AllowAutoRedirect = true }; + _httpClient = new HttpClient(_httpClientHandler) { BaseAddress = new Uri(_applicationBaseUrl) }; - response = httpClient.GetAsync("Account/Login").Result; + response = _httpClient.GetAsync("Account/Login").Result; responseContent = response.Content.ReadAsStringAsync().Result; formParameters = new List> { @@ -53,19 +53,19 @@ namespace E2ETests }; content = new FormUrlEncodedContent(formParameters.ToArray()); - response = httpClient.PostAsync("Account/ExternalLogin", content).Result; + response = _httpClient.PostAsync("Account/ExternalLogin", content).Result; //Post a message to the Google middleware - response = httpClient.GetAsync("signin-google?code=ValidCode&state=ValidStateData").Result; + response = _httpClient.GetAsync("signin-google?code=ValidCode&state=ValidStateData").Result; ThrowIfResponseStatusNotOk(response); responseContent = response.Content.ReadAsStringAsync().Result; //Correlation cookie not getting cleared after successful signin? if (!Helpers.RunningOnMono) { - Assert.Null(httpClientHandler.CookieContainer.GetCookies(new Uri(ApplicationBaseUrl)).GetCookieWithName(".AspNet.Correlation.Google")); + Assert.Null(_httpClientHandler.CookieContainer.GetCookies(new Uri(_applicationBaseUrl)).GetCookieWithName(".AspNet.Correlation.Google")); } - Assert.Equal(ApplicationBaseUrl + "Account/ExternalLoginCallback?ReturnUrl=%2F", response.RequestMessage.RequestUri.AbsoluteUri); + Assert.Equal(_applicationBaseUrl + "Account/ExternalLoginCallback?ReturnUrl=%2F", response.RequestMessage.RequestUri.AbsoluteUri); Assert.Contains("AspnetvnextTest@gmail.com", responseContent, StringComparison.OrdinalIgnoreCase); formParameters = new List> @@ -75,20 +75,20 @@ namespace E2ETests }; content = new FormUrlEncodedContent(formParameters.ToArray()); - response = httpClient.PostAsync("Account/ExternalLoginConfirmation", content).Result; + response = _httpClient.PostAsync("Account/ExternalLoginConfirmation", content).Result; ThrowIfResponseStatusNotOk(response); responseContent = response.Content.ReadAsStringAsync().Result; Assert.Contains(string.Format("Hello {0}!", "AspnetvnextTest@gmail.com"), responseContent, StringComparison.OrdinalIgnoreCase); Assert.Contains("Log off", responseContent, StringComparison.OrdinalIgnoreCase); //Verify cookie sent - Assert.NotNull(httpClientHandler.CookieContainer.GetCookies(new Uri(ApplicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.Application")); - Assert.Null(httpClientHandler.CookieContainer.GetCookies(new Uri(ApplicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.ExternalLogin")); + Assert.NotNull(_httpClientHandler.CookieContainer.GetCookies(new Uri(_applicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.Application")); + Assert.Null(_httpClientHandler.CookieContainer.GetCookies(new Uri(_applicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.ExternalLogin")); Console.WriteLine("Successfully signed in with user '{0}'", "AspnetvnextTest@gmail.com"); Console.WriteLine("Verifying if the middleware notifications were fired"); //Check for a non existing item - response = httpClient.GetAsync(string.Format("Admin/StoreManager/GetAlbumIdFromName?albumName={0}", "123")).Result; + response = _httpClient.GetAsync(string.Format("Admin/StoreManager/GetAlbumIdFromName?albumName={0}", "123")).Result; //This action requires admin permissions. If notifications are fired this permission is granted Console.WriteLine(response.Content.ReadAsStringAsync().Result); Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); diff --git a/test/E2ETests/MicrosoftAccountAuthenticationScenarios.cs b/test/E2ETests/Implementation/MicrosoftAccountAuthenticationScenarios.cs similarity index 67% rename from test/E2ETests/MicrosoftAccountAuthenticationScenarios.cs rename to test/E2ETests/Implementation/MicrosoftAccountAuthenticationScenarios.cs index d2907b8c4f..6b7f4cbcf0 100644 --- a/test/E2ETests/MicrosoftAccountAuthenticationScenarios.cs +++ b/test/E2ETests/Implementation/MicrosoftAccountAuthenticationScenarios.cs @@ -11,10 +11,10 @@ namespace E2ETests { private void LoginWithMicrosoftAccount() { - httpClientHandler = new HttpClientHandler() { AllowAutoRedirect = false }; - httpClient = new HttpClient(httpClientHandler) { BaseAddress = new Uri(ApplicationBaseUrl) }; + _httpClientHandler = new HttpClientHandler() { AllowAutoRedirect = false }; + _httpClient = new HttpClient(_httpClientHandler) { BaseAddress = new Uri(_applicationBaseUrl) }; - var response = httpClient.GetAsync("Account/Login").Result; + var response = _httpClient.GetAsync("Account/Login").Result; ThrowIfResponseStatusNotOk(response); var responseContent = response.Content.ReadAsStringAsync().Result; Console.WriteLine("Signing in with Microsoft account"); @@ -26,24 +26,24 @@ namespace E2ETests }; var content = new FormUrlEncodedContent(formParameters.ToArray()); - response = httpClient.PostAsync("Account/ExternalLogin", content).Result; + response = _httpClient.PostAsync("Account/ExternalLogin", content).Result; Assert.Equal("https://login.live.com/oauth20_authorize.srf", response.Headers.Location.AbsoluteUri.Replace(response.Headers.Location.Query, string.Empty)); var queryItems = QueryHelpers.ParseQuery(response.Headers.Location.Query); Assert.Equal("code", queryItems["response_type"]); Assert.Equal("[ClientId]", queryItems["client_id"]); - Assert.Equal(ApplicationBaseUrl + "signin-microsoft", queryItems["redirect_uri"]); + Assert.Equal(_applicationBaseUrl + "signin-microsoft", queryItems["redirect_uri"]); Assert.Equal("wl.basic wl.signin", queryItems["scope"]); Assert.Equal("ValidStateData", queryItems["state"]); Assert.Equal("custom", queryItems["custom_redirect_uri"]); //Check for the correlation cookie - Assert.NotNull(httpClientHandler.CookieContainer.GetCookies(new Uri(ApplicationBaseUrl)).GetCookieWithName(".AspNet.Correlation.Microsoft")); + Assert.NotNull(_httpClientHandler.CookieContainer.GetCookies(new Uri(_applicationBaseUrl)).GetCookieWithName(".AspNet.Correlation.Microsoft")); //This is just to generate a correlation cookie. Previous step would generate this cookie, but we have reset the handler now. - httpClientHandler = new HttpClientHandler() { AllowAutoRedirect = true }; - httpClient = new HttpClient(httpClientHandler) { BaseAddress = new Uri(ApplicationBaseUrl) }; + _httpClientHandler = new HttpClientHandler() { AllowAutoRedirect = true }; + _httpClient = new HttpClient(_httpClientHandler) { BaseAddress = new Uri(_applicationBaseUrl) }; - response = httpClient.GetAsync("Account/Login").Result; + response = _httpClient.GetAsync("Account/Login").Result; responseContent = response.Content.ReadAsStringAsync().Result; formParameters = new List> { @@ -53,19 +53,19 @@ namespace E2ETests }; content = new FormUrlEncodedContent(formParameters.ToArray()); - response = httpClient.PostAsync("Account/ExternalLogin", content).Result; + response = _httpClient.PostAsync("Account/ExternalLogin", content).Result; //Post a message to the MicrosoftAccount middleware - response = httpClient.GetAsync("signin-microsoft?code=ValidCode&state=ValidStateData").Result; + response = _httpClient.GetAsync("signin-microsoft?code=ValidCode&state=ValidStateData").Result; ThrowIfResponseStatusNotOk(response); responseContent = response.Content.ReadAsStringAsync().Result; //Correlation cookie not getting cleared after successful signin? if (!Helpers.RunningOnMono) { - Assert.Null(httpClientHandler.CookieContainer.GetCookies(new Uri(ApplicationBaseUrl)).GetCookieWithName(".AspNet.Correlation.Microsoft")); + Assert.Null(_httpClientHandler.CookieContainer.GetCookies(new Uri(_applicationBaseUrl)).GetCookieWithName(".AspNet.Correlation.Microsoft")); } - Assert.Equal(ApplicationBaseUrl + "Account/ExternalLoginCallback?ReturnUrl=%2F", response.RequestMessage.RequestUri.AbsoluteUri); + Assert.Equal(_applicationBaseUrl + "Account/ExternalLoginCallback?ReturnUrl=%2F", response.RequestMessage.RequestUri.AbsoluteUri); formParameters = new List> { @@ -74,20 +74,20 @@ namespace E2ETests }; content = new FormUrlEncodedContent(formParameters.ToArray()); - response = httpClient.PostAsync("Account/ExternalLoginConfirmation", content).Result; + response = _httpClient.PostAsync("Account/ExternalLoginConfirmation", content).Result; ThrowIfResponseStatusNotOk(response); responseContent = response.Content.ReadAsStringAsync().Result; Assert.Contains(string.Format("Hello {0}!", "microsoft@test.com"), responseContent, StringComparison.OrdinalIgnoreCase); Assert.Contains("Log off", responseContent, StringComparison.OrdinalIgnoreCase); //Verify cookie sent - Assert.NotNull(httpClientHandler.CookieContainer.GetCookies(new Uri(ApplicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.Application")); - Assert.Null(httpClientHandler.CookieContainer.GetCookies(new Uri(ApplicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.ExternalLogin")); + Assert.NotNull(_httpClientHandler.CookieContainer.GetCookies(new Uri(_applicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.Application")); + Assert.Null(_httpClientHandler.CookieContainer.GetCookies(new Uri(_applicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.ExternalLogin")); Console.WriteLine("Successfully signed in with user '{0}'", "microsoft@test.com"); Console.WriteLine("Verifying if the middleware notifications were fired"); //Check for a non existing item - response = httpClient.GetAsync(string.Format("Admin/StoreManager/GetAlbumIdFromName?albumName={0}", "123")).Result; + response = _httpClient.GetAsync(string.Format("Admin/StoreManager/GetAlbumIdFromName?albumName={0}", "123")).Result; //This action requires admin permissions. If notifications are fired this permission is granted Console.WriteLine(response.Content.ReadAsStringAsync().Result); Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); diff --git a/test/E2ETests/Scenarios.cs b/test/E2ETests/Implementation/Scenarios.cs similarity index 81% rename from test/E2ETests/Scenarios.cs rename to test/E2ETests/Implementation/Scenarios.cs index 3ceadcca58..65d6499ddc 100644 --- a/test/E2ETests/Scenarios.cs +++ b/test/E2ETests/Implementation/Scenarios.cs @@ -14,20 +14,20 @@ namespace E2ETests { Console.WriteLine("Validating if static contents are served.."); Console.WriteLine("Fetching favicon.ico.."); - var response = httpClient.GetAsync("favicon.ico").Result; + var response = _httpClient.GetAsync("favicon.ico").Result; ThrowIfResponseStatusNotOk(response); Console.WriteLine("Etag received: {0}", response.Headers.ETag.Tag); //Check if you receive a NotModified on sending an etag Console.WriteLine("Sending an IfNoneMatch header with e-tag"); - httpClient.DefaultRequestHeaders.IfNoneMatch.Add(response.Headers.ETag); - response = httpClient.GetAsync("favicon.ico").Result; + _httpClient.DefaultRequestHeaders.IfNoneMatch.Add(response.Headers.ETag); + response = _httpClient.GetAsync("favicon.ico").Result; Assert.Equal(HttpStatusCode.NotModified, response.StatusCode); - httpClient.DefaultRequestHeaders.IfNoneMatch.Clear(); + _httpClient.DefaultRequestHeaders.IfNoneMatch.Clear(); Console.WriteLine("Successfully received a NotModified status"); Console.WriteLine("Fetching /Content/bootstrap.css.."); - response = httpClient.GetAsync("Content/bootstrap.css").Result; + response = _httpClient.GetAsync("Content/bootstrap.css").Result; ThrowIfResponseStatusNotOk(response); Console.WriteLine("Verified static contents are served successfully"); } @@ -54,8 +54,9 @@ namespace E2ETests private string PrefixBaseAddress(string url) { - url = startParameters.ServerType == ServerType.IISNativeModule ? - string.Format(url, startParameters.IISApplication.VirtualDirectoryName) : + url = (_startParameters.ServerType == ServerType.IISNativeModule || + _startParameters.ServerType == ServerType.IIS) ? + string.Format(url, _startParameters.IISApplication.VirtualDirectoryName) : string.Format(url, string.Empty); return url.Replace("//", "/").Replace("%2F%2F", "%2F").Replace("%2F/", "%2F"); @@ -73,13 +74,13 @@ namespace E2ETests private void AccessStoreWithoutPermissions(string email = null) { Console.WriteLine("Trying to access StoreManager that needs ManageStore claim with the current user : {0}", email ?? "Anonymous"); - var response = httpClient.GetAsync("Admin/StoreManager/").Result; + var response = _httpClient.GetAsync("Admin/StoreManager/").Result; ThrowIfResponseStatusNotOk(response); var responseContent = response.Content.ReadAsStringAsync().Result; ValidateLayoutPage(responseContent); Assert.Contains("Log in – MVC Music Store", responseContent, StringComparison.OrdinalIgnoreCase); Assert.Contains("

Use a local account to log in.

", responseContent, StringComparison.OrdinalIgnoreCase); - Assert.Equal(ApplicationBaseUrl + PrefixBaseAddress("Account/Login?ReturnUrl=%2F{0}%2FAdmin%2FStoreManager%2F"), response.RequestMessage.RequestUri.AbsoluteUri); + Assert.Equal(_applicationBaseUrl + PrefixBaseAddress("Account/Login?ReturnUrl=%2F{0}%2FAdmin%2FStoreManager%2F"), response.RequestMessage.RequestUri.AbsoluteUri); Console.WriteLine("Redirected to login page as expected."); } @@ -87,17 +88,17 @@ namespace E2ETests private void AccessStoreWithPermissions() { Console.WriteLine("Trying to access the store inventory.."); - var response = httpClient.GetAsync("Admin/StoreManager/").Result; + var response = _httpClient.GetAsync("Admin/StoreManager/").Result; ThrowIfResponseStatusNotOk(response); var responseContent = response.Content.ReadAsStringAsync().Result; - Assert.Equal(ApplicationBaseUrl + "Admin/StoreManager/", response.RequestMessage.RequestUri.AbsoluteUri); + Assert.Equal(_applicationBaseUrl + "Admin/StoreManager/", response.RequestMessage.RequestUri.AbsoluteUri); Console.WriteLine("Successfully acccessed the store inventory"); } private void RegisterUserWithNonMatchingPasswords() { Console.WriteLine("Trying to create user with not matching password and confirm password"); - var response = httpClient.GetAsync("Account/Register").Result; + var response = _httpClient.GetAsync("Account/Register").Result; ThrowIfResponseStatusNotOk(response); var responseContent = response.Content.ReadAsStringAsync().Result; ValidateLayoutPage(responseContent); @@ -113,16 +114,16 @@ namespace E2ETests }; var content = new FormUrlEncodedContent(formParameters.ToArray()); - response = httpClient.PostAsync("Account/Register", content).Result; + response = _httpClient.PostAsync("Account/Register", content).Result; responseContent = response.Content.ReadAsStringAsync().Result; - Assert.Null(httpClientHandler.CookieContainer.GetCookies(new Uri(ApplicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.Application")); + Assert.Null(_httpClientHandler.CookieContainer.GetCookies(new Uri(_applicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.Application")); Assert.Contains("
  • The password and confirmation password do not match.
  • ", responseContent, StringComparison.OrdinalIgnoreCase); Console.WriteLine("Server side model validator rejected the user '{0}''s registration as passwords do not match.", generatedEmail); } private string RegisterValidUser() { - var response = httpClient.GetAsync("Account/Register").Result; + var response = _httpClient.GetAsync("Account/Register").Result; ThrowIfResponseStatusNotOk(response); var responseContent = response.Content.ReadAsStringAsync().Result; ValidateLayoutPage(responseContent); @@ -138,17 +139,17 @@ namespace E2ETests }; var content = new FormUrlEncodedContent(formParameters.ToArray()); - response = httpClient.PostAsync("Account/Register", content).Result; + response = _httpClient.PostAsync("Account/Register", content).Result; responseContent = response.Content.ReadAsStringAsync().Result; //Account verification - Assert.Equal(ApplicationBaseUrl + "Account/Register", response.RequestMessage.RequestUri.AbsoluteUri); + Assert.Equal(_applicationBaseUrl + "Account/Register", response.RequestMessage.RequestUri.AbsoluteUri); Assert.Contains("For DEMO only: You can click this link to confirm the email:", responseContent, StringComparison.OrdinalIgnoreCase); var startIndex = responseContent.IndexOf("[[link]]", startIndex); var confirmUrl = responseContent.Substring(startIndex, endIndex - startIndex); confirmUrl = WebUtility.HtmlDecode(confirmUrl); - response = httpClient.GetAsync(confirmUrl).Result; + response = _httpClient.GetAsync(confirmUrl).Result; ThrowIfResponseStatusNotOk(response); responseContent = response.Content.ReadAsStringAsync().Result; Assert.Contains("Thank you for confirming your email.", responseContent, StringComparison.OrdinalIgnoreCase); @@ -158,7 +159,7 @@ namespace E2ETests private void RegisterExistingUser(string email) { Console.WriteLine("Trying to register a user with name '{0}' again", email); - var response = httpClient.GetAsync("Account/Register").Result; + var response = _httpClient.GetAsync("Account/Register").Result; ThrowIfResponseStatusNotOk(response); var responseContent = response.Content.ReadAsStringAsync().Result; Console.WriteLine("Creating a new user with name '{0}'", email); @@ -171,7 +172,7 @@ namespace E2ETests }; var content = new FormUrlEncodedContent(formParameters.ToArray()); - response = httpClient.PostAsync("Account/Register", content).Result; + response = _httpClient.PostAsync("Account/Register", content).Result; responseContent = response.Content.ReadAsStringAsync().Result; Assert.Contains(string.Format("Name {0} is already taken.", email), responseContent, StringComparison.OrdinalIgnoreCase); Console.WriteLine("Identity threw a valid exception that user '{0}' already exists in the system", email); @@ -180,7 +181,7 @@ namespace E2ETests private void SignOutUser(string email) { Console.WriteLine("Signing out from '{0}''s session", email); - var response = httpClient.GetAsync(string.Empty).Result; + var response = _httpClient.GetAsync(string.Empty).Result; ThrowIfResponseStatusNotOk(response); var responseContent = response.Content.ReadAsStringAsync().Result; ValidateLayoutPage(responseContent); @@ -190,7 +191,7 @@ namespace E2ETests }; var content = new FormUrlEncodedContent(formParameters.ToArray()); - response = httpClient.PostAsync("Account/LogOff", content).Result; + response = _httpClient.PostAsync("Account/LogOff", content).Result; responseContent = response.Content.ReadAsStringAsync().Result; if (!Helpers.RunningOnMono) @@ -201,20 +202,20 @@ namespace E2ETests Assert.Contains("mvcmusicstore.codeplex.com", responseContent, StringComparison.OrdinalIgnoreCase); Assert.Contains("/Images/home-showcase.png", responseContent, StringComparison.OrdinalIgnoreCase); //Verify cookie cleared on logout - Assert.Null(httpClientHandler.CookieContainer.GetCookies(new Uri(ApplicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.Application")); + Assert.Null(_httpClientHandler.CookieContainer.GetCookies(new Uri(_applicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.Application")); Console.WriteLine("Successfully signed out of '{0}''s session", email); } else { //Bug in Mono - on logout the cookie is not cleared in the cookie container and not redirected. Work around by reinstantiating the httpClient. - httpClientHandler = new HttpClientHandler(); - httpClient = new HttpClient(httpClientHandler) { BaseAddress = new Uri(ApplicationBaseUrl) }; + _httpClientHandler = new HttpClientHandler(); + _httpClient = new HttpClient(_httpClientHandler) { BaseAddress = new Uri(_applicationBaseUrl) }; } } private void SignInWithInvalidPassword(string email, string invalidPassword) { - var response = httpClient.GetAsync("Account/Login").Result; + var response = _httpClient.GetAsync("Account/Login").Result; ThrowIfResponseStatusNotOk(response); var responseContent = response.Content.ReadAsStringAsync().Result; Console.WriteLine("Signing in with user '{0}'", email); @@ -226,17 +227,17 @@ namespace E2ETests }; var content = new FormUrlEncodedContent(formParameters.ToArray()); - response = httpClient.PostAsync("Account/Login", content).Result; + response = _httpClient.PostAsync("Account/Login", content).Result; responseContent = response.Content.ReadAsStringAsync().Result; Assert.Contains("
    • Invalid login attempt.
    • ", responseContent, StringComparison.OrdinalIgnoreCase); //Verify cookie not sent - Assert.Null(httpClientHandler.CookieContainer.GetCookies(new Uri(ApplicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.Application")); + Assert.Null(_httpClientHandler.CookieContainer.GetCookies(new Uri(_applicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.Application")); Console.WriteLine("Identity successfully prevented an invalid user login."); } private void SignInWithUser(string email, string password) { - var response = httpClient.GetAsync("Account/Login").Result; + var response = _httpClient.GetAsync("Account/Login").Result; ThrowIfResponseStatusNotOk(response); var responseContent = response.Content.ReadAsStringAsync().Result; Console.WriteLine("Signing in with user '{0}'", email); @@ -248,18 +249,18 @@ namespace E2ETests }; var content = new FormUrlEncodedContent(formParameters.ToArray()); - response = httpClient.PostAsync("Account/Login", content).Result; + response = _httpClient.PostAsync("Account/Login", content).Result; responseContent = response.Content.ReadAsStringAsync().Result; Assert.Contains(string.Format("Hello {0}!", email), responseContent, StringComparison.OrdinalIgnoreCase); Assert.Contains("Log off", responseContent, StringComparison.OrdinalIgnoreCase); //Verify cookie sent - Assert.NotNull(httpClientHandler.CookieContainer.GetCookies(new Uri(ApplicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.Application")); + Assert.NotNull(_httpClientHandler.CookieContainer.GetCookies(new Uri(_applicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.Application")); Console.WriteLine("Successfully signed in with user '{0}'", email); } private void ChangePassword(string email) { - var response = httpClient.GetAsync("Manage/ChangePassword").Result; + var response = _httpClient.GetAsync("Manage/ChangePassword").Result; ThrowIfResponseStatusNotOk(response); var responseContent = response.Content.ReadAsStringAsync().Result; var formParameters = new List> @@ -271,10 +272,10 @@ namespace E2ETests }; var content = new FormUrlEncodedContent(formParameters.ToArray()); - response = httpClient.PostAsync("Manage/ChangePassword", content).Result; + response = _httpClient.PostAsync("Manage/ChangePassword", content).Result; responseContent = response.Content.ReadAsStringAsync().Result; Assert.Contains("Your password has been changed.", responseContent, StringComparison.OrdinalIgnoreCase); - Assert.NotNull(httpClientHandler.CookieContainer.GetCookies(new Uri(ApplicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.Application")); + Assert.NotNull(_httpClientHandler.CookieContainer.GetCookies(new Uri(_applicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.Application")); Console.WriteLine("Successfully changed the password for user '{0}'", email); } @@ -283,7 +284,7 @@ namespace E2ETests var albumName = Guid.NewGuid().ToString().Replace("-", string.Empty).Substring(0, 12); string dataFromHub = null; var OnReceivedEvent = new AutoResetEvent(false); - var hubConnection = new HubConnection(ApplicationBaseUrl + "SignalR"); + var hubConnection = new HubConnection(_applicationBaseUrl + "SignalR"); hubConnection.Received += (data) => { Console.WriteLine("Data received by SignalR client: {0}", data); @@ -295,7 +296,7 @@ namespace E2ETests hubConnection.Start().Wait(); Console.WriteLine("Trying to create an album with name '{0}'", albumName); - var response = httpClient.GetAsync("Admin/StoreManager/create").Result; + var response = _httpClient.GetAsync("Admin/StoreManager/create").Result; ThrowIfResponseStatusNotOk(response); var responseContent = response.Content.ReadAsStringAsync().Result; var formParameters = new List> @@ -309,9 +310,9 @@ namespace E2ETests }; var content = new FormUrlEncodedContent(formParameters.ToArray()); - response = httpClient.PostAsync("Admin/StoreManager/create", content).Result; + response = _httpClient.PostAsync("Admin/StoreManager/create", content).Result; responseContent = response.Content.ReadAsStringAsync().Result; - Assert.Equal(ApplicationBaseUrl + "Admin/StoreManager", response.RequestMessage.RequestUri.AbsoluteUri); + Assert.Equal(_applicationBaseUrl + "Admin/StoreManager", response.RequestMessage.RequestUri.AbsoluteUri); Assert.Contains(albumName, responseContent); Console.WriteLine("Waiting for the SignalR client to receive album created announcement"); @@ -325,7 +326,7 @@ namespace E2ETests private string FetchAlbumIdFromName(string albumName) { Console.WriteLine("Fetching the album id of '{0}'", albumName); - var response = httpClient.GetAsync(string.Format("Admin/StoreManager/GetAlbumIdFromName?albumName={0}", albumName)).Result; + var response = _httpClient.GetAsync(string.Format("Admin/StoreManager/GetAlbumIdFromName?albumName={0}", albumName)).Result; ThrowIfResponseStatusNotOk(response); var albumId = response.Content.ReadAsStringAsync().Result; Console.WriteLine("Album id for album '{0}' is '{1}'", albumName, albumId); @@ -335,7 +336,7 @@ namespace E2ETests private void VerifyAlbumDetails(string albumId, string albumName) { Console.WriteLine("Getting details of album with Id '{0}'", albumId); - var response = httpClient.GetAsync(string.Format("Admin/StoreManager/Details?id={0}", albumId)).Result; + var response = _httpClient.GetAsync(string.Format("Admin/StoreManager/Details?id={0}", albumId)).Result; ThrowIfResponseStatusNotOk(response); var responseContent = response.Content.ReadAsStringAsync().Result; Assert.Contains(albumName, responseContent, StringComparison.OrdinalIgnoreCase); @@ -348,7 +349,7 @@ namespace E2ETests private void GetAlbumDetailsFromStore(string albumId, string albumName) { Console.WriteLine("Getting details of album with Id '{0}'", albumId); - var response = httpClient.GetAsync(string.Format("Store/Details/{0}", albumId)).Result; + var response = _httpClient.GetAsync(string.Format("Store/Details/{0}", albumId)).Result; ThrowIfResponseStatusNotOk(response); var responseContent = response.Content.ReadAsStringAsync().Result; Assert.Contains(albumName, responseContent, StringComparison.OrdinalIgnoreCase); @@ -357,7 +358,7 @@ namespace E2ETests private void AddAlbumToCart(string albumId, string albumName) { Console.WriteLine("Adding album id '{0}' to the cart", albumId); - var response = httpClient.GetAsync(string.Format("ShoppingCart/AddToCart?id={0}", albumId)).Result; + var response = _httpClient.GetAsync(string.Format("ShoppingCart/AddToCart?id={0}", albumId)).Result; ThrowIfResponseStatusNotOk(response); var responseContent = response.Content.ReadAsStringAsync().Result; Assert.Contains(albumName, responseContent, StringComparison.OrdinalIgnoreCase); @@ -368,7 +369,7 @@ namespace E2ETests private void CheckOutCartItems() { Console.WriteLine("Checking out the cart contents..."); - var response = httpClient.GetAsync("Checkout/AddressAndPayment").Result; + var response = _httpClient.GetAsync("Checkout/AddressAndPayment").Result; ThrowIfResponseStatusNotOk(response); var responseContent = response.Content.ReadAsStringAsync().Result; @@ -388,10 +389,10 @@ namespace E2ETests }; var content = new FormUrlEncodedContent(formParameters.ToArray()); - response = httpClient.PostAsync("Checkout/AddressAndPayment", content).Result; + response = _httpClient.PostAsync("Checkout/AddressAndPayment", content).Result; responseContent = response.Content.ReadAsStringAsync().Result; Assert.Contains("

      Checkout Complete

      ", responseContent, StringComparison.OrdinalIgnoreCase); - Assert.StartsWith(ApplicationBaseUrl + "Checkout/Complete/", response.RequestMessage.RequestUri.AbsoluteUri, StringComparison.OrdinalIgnoreCase); + Assert.StartsWith(_applicationBaseUrl + "Checkout/Complete/", response.RequestMessage.RequestUri.AbsoluteUri, StringComparison.OrdinalIgnoreCase); } private void DeleteAlbum(string albumId, string albumName) @@ -404,11 +405,11 @@ namespace E2ETests }; var content = new FormUrlEncodedContent(formParameters.ToArray()); - var response = httpClient.PostAsync("Admin/StoreManager/RemoveAlbum", content).Result; + var response = _httpClient.PostAsync("Admin/StoreManager/RemoveAlbum", content).Result; ThrowIfResponseStatusNotOk(response); Console.WriteLine("Verifying if the album '{0}' is deleted from store", albumName); - response = httpClient.GetAsync(string.Format("Admin/StoreManager/GetAlbumIdFromName?albumName={0}", albumName)).Result; + response = _httpClient.GetAsync(string.Format("Admin/StoreManager/GetAlbumIdFromName?albumName={0}", albumName)).Result; Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); Console.WriteLine("Album is successfully deleted from the store.", albumName, albumId); } diff --git a/test/E2ETests/TwitterLoginScenarios.cs b/test/E2ETests/Implementation/TwitterLoginScenarios.cs similarity index 69% rename from test/E2ETests/TwitterLoginScenarios.cs rename to test/E2ETests/Implementation/TwitterLoginScenarios.cs index d51560b1e3..529a7d8166 100644 --- a/test/E2ETests/TwitterLoginScenarios.cs +++ b/test/E2ETests/Implementation/TwitterLoginScenarios.cs @@ -14,10 +14,10 @@ namespace E2ETests { private void LoginWithTwitter() { - httpClientHandler = new HttpClientHandler() { AllowAutoRedirect = false }; - httpClient = new HttpClient(httpClientHandler) { BaseAddress = new Uri(ApplicationBaseUrl) }; + _httpClientHandler = new HttpClientHandler() { AllowAutoRedirect = false }; + _httpClient = new HttpClient(_httpClientHandler) { BaseAddress = new Uri(_applicationBaseUrl) }; - var response = httpClient.GetAsync("Account/Login").Result; + var response = _httpClient.GetAsync("Account/Login").Result; ThrowIfResponseStatusNotOk(response); var responseContent = response.Content.ReadAsStringAsync().Result; Console.WriteLine("Signing in with Twitter account"); @@ -29,19 +29,19 @@ namespace E2ETests }; var content = new FormUrlEncodedContent(formParameters.ToArray()); - response = httpClient.PostAsync("Account/ExternalLogin", content).Result; + response = _httpClient.PostAsync("Account/ExternalLogin", content).Result; Assert.Equal("https://twitter.com/oauth/authenticate", response.Headers.Location.AbsoluteUri.Replace(response.Headers.Location.Query, string.Empty)); var queryItems = QueryHelpers.ParseQuery(response.Headers.Location.Query); Assert.Equal("custom", queryItems["custom_redirect_uri"]); Assert.Equal("valid_oauth_token", queryItems["oauth_token"]); //Check for the correlation cookie - Assert.NotNull(httpClientHandler.CookieContainer.GetCookies(new Uri(ApplicationBaseUrl))["__TwitterState"]); + Assert.NotNull(_httpClientHandler.CookieContainer.GetCookies(new Uri(_applicationBaseUrl))["__TwitterState"]); //This is just to generate a correlation cookie. Previous step would generate this cookie, but we have reset the handler now. - httpClientHandler = new HttpClientHandler() { AllowAutoRedirect = true }; - httpClient = new HttpClient(httpClientHandler) { BaseAddress = new Uri(ApplicationBaseUrl) }; + _httpClientHandler = new HttpClientHandler() { AllowAutoRedirect = true }; + _httpClient = new HttpClient(_httpClientHandler) { BaseAddress = new Uri(_applicationBaseUrl) }; - response = httpClient.GetAsync("Account/Login").Result; + response = _httpClient.GetAsync("Account/Login").Result; responseContent = response.Content.ReadAsStringAsync().Result; formParameters = new List> { @@ -51,19 +51,19 @@ namespace E2ETests }; content = new FormUrlEncodedContent(formParameters.ToArray()); - response = httpClient.PostAsync("Account/ExternalLogin", content).Result; + response = _httpClient.PostAsync("Account/ExternalLogin", content).Result; //Post a message to the Facebook middleware - response = httpClient.GetAsync("signin-twitter?oauth_token=valid_oauth_token&oauth_verifier=valid_oauth_verifier").Result; + response = _httpClient.GetAsync("signin-twitter?oauth_token=valid_oauth_token&oauth_verifier=valid_oauth_verifier").Result; ThrowIfResponseStatusNotOk(response); responseContent = response.Content.ReadAsStringAsync().Result; //Check correlation cookie not getting cleared after successful signin if (!Helpers.RunningOnMono) { - Assert.Null(httpClientHandler.CookieContainer.GetCookies(new Uri(ApplicationBaseUrl))["__TwitterState"]); + Assert.Null(_httpClientHandler.CookieContainer.GetCookies(new Uri(_applicationBaseUrl))["__TwitterState"]); } - Assert.Equal(ApplicationBaseUrl + "Account/ExternalLoginCallback?ReturnUrl=%2F", response.RequestMessage.RequestUri.AbsoluteUri); + Assert.Equal(_applicationBaseUrl + "Account/ExternalLoginCallback?ReturnUrl=%2F", response.RequestMessage.RequestUri.AbsoluteUri); //Twitter does not give back the email claim for some reason. //Assert.Contains("AspnetvnextTest@gmail.com", responseContent, StringComparison.OrdinalIgnoreCase); @@ -74,20 +74,20 @@ namespace E2ETests }; content = new FormUrlEncodedContent(formParameters.ToArray()); - response = httpClient.PostAsync("Account/ExternalLoginConfirmation", content).Result; + response = _httpClient.PostAsync("Account/ExternalLoginConfirmation", content).Result; ThrowIfResponseStatusNotOk(response); responseContent = response.Content.ReadAsStringAsync().Result; Assert.Contains(string.Format("Hello {0}!", "twitter@test.com"), responseContent, StringComparison.OrdinalIgnoreCase); Assert.Contains("Log off", responseContent, StringComparison.OrdinalIgnoreCase); //Verify cookie sent - Assert.NotNull(httpClientHandler.CookieContainer.GetCookies(new Uri(ApplicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.Application")); - Assert.Null(httpClientHandler.CookieContainer.GetCookies(new Uri(ApplicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.ExternalLogin")); + Assert.NotNull(_httpClientHandler.CookieContainer.GetCookies(new Uri(_applicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.Application")); + Assert.Null(_httpClientHandler.CookieContainer.GetCookies(new Uri(_applicationBaseUrl)).GetCookieWithName(".AspNet.Microsoft.AspNet.Identity.ExternalLogin")); Console.WriteLine("Successfully signed in with user '{0}'", "twitter@test.com"); Console.WriteLine("Verifying if the middleware notifications were fired"); //Check for a non existing item - response = httpClient.GetAsync(string.Format("Admin/StoreManager/GetAlbumIdFromName?albumName={0}", "123")).Result; + response = _httpClient.GetAsync(string.Format("Admin/StoreManager/GetAlbumIdFromName?albumName={0}", "123")).Result; //This action requires admin permissions. If notifications are fired this permission is granted Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); Console.WriteLine("Middleware notifications were fired successfully"); diff --git a/test/E2ETests/NtlmAuthentationTest.cs b/test/E2ETests/NtlmAuthentationTest.cs index 3c810ed2cd..8b5c1cd7df 100644 --- a/test/E2ETests/NtlmAuthentationTest.cs +++ b/test/E2ETests/NtlmAuthentationTest.cs @@ -11,44 +11,44 @@ namespace E2ETests { [ConditionalTheory] [OSSkipCondition(OperatingSystems.Unix | OperatingSystems.MacOSX)] - [InlineData(ServerType.Helios, KreFlavor.CoreClr, KreArchitecture.x86, "http://localhost:5001/")] - [InlineData(ServerType.Helios, KreFlavor.DesktopClr, KreArchitecture.amd64, "http://localhost:5001/")] + [InlineData(ServerType.IISExpress, KreFlavor.CoreClr, KreArchitecture.x86, "http://localhost:5001/")] + [InlineData(ServerType.IISExpress, KreFlavor.DesktopClr, KreArchitecture.amd64, "http://localhost:5001/")] [InlineData(ServerType.WebListener, KreFlavor.CoreClr, KreArchitecture.amd64, "http://localhost:5002/")] public void NtlmAuthenticationTest(ServerType serverType, KreFlavor kreFlavor, KreArchitecture architecture, string applicationBaseUrl) { Console.WriteLine("Variation Details : HostType = {0}, KreFlavor = {1}, Architecture = {2}, applicationBaseUrl = {3}", serverType, kreFlavor, architecture, applicationBaseUrl); - startParameters = new StartParameters + _startParameters = new StartParameters { ServerType = serverType, KreFlavor = kreFlavor, KreArchitecture = architecture, EnvironmentName = "NtlmAuthentication", //Will pick the Start class named 'StartupNtlmAuthentication' - ApplicationHostConfigTemplateContent = (serverType == ServerType.Helios) ? File.ReadAllText("NtlmAuthentation.config") : null, + ApplicationHostConfigTemplateContent = (serverType == ServerType.IISExpress) ? File.ReadAllText("NtlmAuthentation.config") : null, SiteName = "MusicStoreNtlmAuthentication" //This is configured in the NtlmAuthentication.config }; var testStartTime = DateTime.Now; var musicStoreDbName = Guid.NewGuid().ToString().Replace("-", string.Empty); - Console.WriteLine("Pointing MusicStore DB to '{0}'", string.Format(Connection_string_Format, musicStoreDbName)); + Console.WriteLine("Pointing MusicStore DB to '{0}'", string.Format(CONNECTION_STRING_FORMAT, musicStoreDbName)); //Override the connection strings using environment based configuration - Environment.SetEnvironmentVariable("SQLAZURECONNSTR_DefaultConnection", string.Format(Connection_string_Format, musicStoreDbName)); + Environment.SetEnvironmentVariable("SQLAZURECONNSTR_DefaultConnection", string.Format(CONNECTION_STRING_FORMAT, musicStoreDbName)); - ApplicationBaseUrl = applicationBaseUrl; + _applicationBaseUrl = applicationBaseUrl; Process hostProcess = null; bool testSuccessful = false; try { - hostProcess = DeploymentUtility.StartApplication(startParameters, musicStoreDbName); + hostProcess = DeploymentUtility.StartApplication(_startParameters, musicStoreDbName); - httpClientHandler = new HttpClientHandler() { UseDefaultCredentials = true }; - httpClient = new HttpClient(httpClientHandler) { BaseAddress = new Uri(applicationBaseUrl) }; + _httpClientHandler = new HttpClientHandler() { UseDefaultCredentials = true }; + _httpClient = new HttpClient(_httpClientHandler) { BaseAddress = new Uri(applicationBaseUrl) }; //Request to base address and check if various parts of the body are rendered & measure the cold startup time. - var response = httpClient.GetAsync(string.Empty).Result; + var response = _httpClient.GetAsync(string.Empty).Result; var responseContent = response.Content.ReadAsStringAsync().Result; var initializationCompleteTime = DateTime.Now; Console.WriteLine("[Time]: Approximate time taken for application initialization : '{0}' seconds", (initializationCompleteTime - testStartTime).TotalSeconds); @@ -72,7 +72,7 @@ namespace E2ETests Console.WriteLine("Some tests failed. Proceeding with cleanup."); } - DeploymentUtility.CleanUpApplication(startParameters, hostProcess, musicStoreDbName); + DeploymentUtility.CleanUpApplication(_startParameters, hostProcess, musicStoreDbName); } } } diff --git a/test/E2ETests/PublishAndRunTests.cs b/test/E2ETests/PublishAndRunTests.cs index 7bf3733d03..ea27c18ad4 100644 --- a/test/E2ETests/PublishAndRunTests.cs +++ b/test/E2ETests/PublishAndRunTests.cs @@ -13,7 +13,7 @@ namespace E2ETests { [ConditionalTheory] [FrameworkSkipCondition(RuntimeFrameworks.Mono)] - [InlineData(ServerType.Helios, KreFlavor.DesktopClr, KreArchitecture.x86, "http://localhost:5001/")] + [InlineData(ServerType.IISExpress, KreFlavor.DesktopClr, KreArchitecture.x86, "http://localhost:5001/")] public void Publish_And_Run_Tests_On_X86(ServerType serverType, KreFlavor kreFlavor, KreArchitecture architecture, string applicationBaseUrl) { Publish_And_Run_Tests(serverType, kreFlavor, architecture, applicationBaseUrl); @@ -41,7 +41,7 @@ namespace E2ETests { Console.WriteLine("Variation Details : HostType = {0}, KreFlavor = {1}, Architecture = {2}, applicationBaseUrl = {3}", serverType, kreFlavor, architecture, applicationBaseUrl); - startParameters = new StartParameters + _startParameters = new StartParameters { ServerType = serverType, KreFlavor = kreFlavor, @@ -52,21 +52,21 @@ namespace E2ETests var testStartTime = DateTime.Now; var musicStoreDbName = Guid.NewGuid().ToString().Replace("-", string.Empty); - Console.WriteLine("Pointing MusicStore DB to '{0}'", string.Format(Connection_string_Format, musicStoreDbName)); + Console.WriteLine("Pointing MusicStore DB to '{0}'", string.Format(CONNECTION_STRING_FORMAT, musicStoreDbName)); //Override the connection strings using environment based configuration - Environment.SetEnvironmentVariable("SQLAZURECONNSTR_DefaultConnection", string.Format(Connection_string_Format, musicStoreDbName)); + Environment.SetEnvironmentVariable("SQLAZURECONNSTR_DefaultConnection", string.Format(CONNECTION_STRING_FORMAT, musicStoreDbName)); - ApplicationBaseUrl = applicationBaseUrl; + _applicationBaseUrl = applicationBaseUrl; Process hostProcess = null; bool testSuccessful = false; try { - hostProcess = DeploymentUtility.StartApplication(startParameters, musicStoreDbName); + hostProcess = DeploymentUtility.StartApplication(_startParameters, musicStoreDbName); - httpClientHandler = new HttpClientHandler() { UseDefaultCredentials = true }; - httpClient = new HttpClient(httpClientHandler) { BaseAddress = new Uri(applicationBaseUrl) }; + _httpClientHandler = new HttpClientHandler() { UseDefaultCredentials = true }; + _httpClient = new HttpClient(_httpClientHandler) { BaseAddress = new Uri(applicationBaseUrl) }; HttpResponseMessage response = null; string responseContent = null; @@ -78,7 +78,7 @@ namespace E2ETests { try { - response = httpClient.GetAsync(string.Empty).Result; + response = _httpClient.GetAsync(string.Empty).Result; responseContent = response.Content.ReadAsStringAsync().Result; initializationCompleteTime = DateTime.Now; Console.WriteLine("[Time]: Approximate time taken for application initialization : '{0}' seconds", (initializationCompleteTime - testStartTime).TotalSeconds); @@ -101,9 +101,9 @@ namespace E2ETests //Static files are served? VerifyStaticContentServed(); - if (serverType != ServerType.Helios) + if (serverType != ServerType.IISExpress) { - if (Directory.GetFiles(startParameters.ApplicationPath, "*.cmd", SearchOption.TopDirectoryOnly).Length > 0) + if (Directory.GetFiles(_startParameters.ApplicationPath, "*.cmd", SearchOption.TopDirectoryOnly).Length > 0) { throw new Exception("packExclude parameter values are not honored"); } @@ -121,7 +121,7 @@ namespace E2ETests Console.WriteLine("Some tests failed. Proceeding with cleanup."); } - DeploymentUtility.CleanUpApplication(startParameters, hostProcess, musicStoreDbName); + DeploymentUtility.CleanUpApplication(_startParameters, hostProcess, musicStoreDbName); } } } diff --git a/test/E2ETests/SmokeTests.cs b/test/E2ETests/SmokeTests.cs index 94c83af96c..d5a06b910c 100644 --- a/test/E2ETests/SmokeTests.cs +++ b/test/E2ETests/SmokeTests.cs @@ -10,19 +10,19 @@ namespace E2ETests { public partial class SmokeTests { - private const string Connection_string_Format = "Server=(localdb)\\MSSQLLocalDB;Database={0};Trusted_Connection=True;MultipleActiveResultSets=true"; + private const string CONNECTION_STRING_FORMAT = "Server=(localdb)\\MSSQLLocalDB;Database={0};Trusted_Connection=True;MultipleActiveResultSets=true"; - private string ApplicationBaseUrl; - private HttpClient httpClient; - private HttpClientHandler httpClientHandler; - private StartParameters startParameters; + private string _applicationBaseUrl; + private HttpClient _httpClient; + private HttpClientHandler _httpClientHandler; + private StartParameters _startParameters; [ConditionalTheory] [FrameworkSkipCondition(RuntimeFrameworks.Mono)] - [InlineData(ServerType.Helios, KreFlavor.DesktopClr, KreArchitecture.x86, "http://localhost:5001/")] + [InlineData(ServerType.IISExpress, KreFlavor.DesktopClr, KreArchitecture.x86, "http://localhost:5001/")] [InlineData(ServerType.WebListener, KreFlavor.DesktopClr, KreArchitecture.x86, "http://localhost:5002/")] [InlineData(ServerType.Kestrel, KreFlavor.DesktopClr, KreArchitecture.x86, "http://localhost:5004/")] - [InlineData(ServerType.Helios, KreFlavor.CoreClr, KreArchitecture.x86, "http://localhost:5001/")] + [InlineData(ServerType.IISExpress, KreFlavor.CoreClr, KreArchitecture.x86, "http://localhost:5001/")] [InlineData(ServerType.WebListener, KreFlavor.CoreClr, KreArchitecture.x86, "http://localhost:5002/")] [InlineData(ServerType.Kestrel, KreFlavor.CoreClr, KreArchitecture.x86, "http://localhost:5004/")] public void SmokeTestSuite_OnX86(ServerType serverType, KreFlavor kreFlavor, KreArchitecture architecture, string applicationBaseUrl) @@ -34,7 +34,7 @@ namespace E2ETests [FrameworkSkipCondition(RuntimeFrameworks.Mono)] [SkipOn32BitOS] [InlineData(ServerType.WebListener, KreFlavor.DesktopClr, KreArchitecture.amd64, "http://localhost:5002/")] - [InlineData(ServerType.Helios, KreFlavor.CoreClr, KreArchitecture.amd64, "http://localhost:5001/")] + [InlineData(ServerType.IISExpress, KreFlavor.CoreClr, KreArchitecture.amd64, "http://localhost:5001/")] [InlineData(ServerType.Kestrel, KreFlavor.CoreClr, KreArchitecture.amd64, "http://localhost:5004/")] public void SmokeTestSuite_OnAMD64(ServerType serverType, KreFlavor kreFlavor, KreArchitecture architecture, string applicationBaseUrl) { @@ -70,11 +70,20 @@ namespace E2ETests SmokeTestSuite(serverType, kreFlavor, architecture, applicationBaseUrl); } + [ConditionalTheory] + [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [OSSkipCondition(OperatingSystems.MacOSX | OperatingSystems.Unix)] + [InlineData(ServerType.IISNativeModule, KreFlavor.CoreClr, KreArchitecture.x86, "http://localhost:5005/")] + public void SmokeTestSuite_On_IIS_X86(ServerType serverType, KreFlavor kreFlavor, KreArchitecture architecture, string applicationBaseUrl) + { + SmokeTestSuite(serverType, kreFlavor, architecture, applicationBaseUrl); + } + private void SmokeTestSuite(ServerType serverType, KreFlavor kreFlavor, KreArchitecture architecture, string applicationBaseUrl) { Console.WriteLine("Variation Details : HostType = {0}, KreFlavor = {1}, Architecture = {2}, applicationBaseUrl = {3}", serverType, kreFlavor, architecture, applicationBaseUrl); - startParameters = new StartParameters + _startParameters = new StartParameters { ServerType = serverType, KreFlavor = kreFlavor, @@ -85,26 +94,26 @@ namespace E2ETests var testStartTime = DateTime.Now; var musicStoreDbName = Guid.NewGuid().ToString().Replace("-", string.Empty); - Console.WriteLine("Pointing MusicStore DB to '{0}'", string.Format(Connection_string_Format, musicStoreDbName)); + Console.WriteLine("Pointing MusicStore DB to '{0}'", string.Format(CONNECTION_STRING_FORMAT, musicStoreDbName)); //Override the connection strings using environment based configuration - Environment.SetEnvironmentVariable("SQLAZURECONNSTR_DefaultConnection", string.Format(Connection_string_Format, musicStoreDbName)); + Environment.SetEnvironmentVariable("SQLAZURECONNSTR_DefaultConnection", string.Format(CONNECTION_STRING_FORMAT, musicStoreDbName)); - ApplicationBaseUrl = applicationBaseUrl; + _applicationBaseUrl = applicationBaseUrl; Process hostProcess = null; bool testSuccessful = false; try { - hostProcess = DeploymentUtility.StartApplication(startParameters, musicStoreDbName); - if (serverType == ServerType.IISNativeModule) + hostProcess = DeploymentUtility.StartApplication(_startParameters, musicStoreDbName); + if (serverType == ServerType.IISNativeModule || serverType == ServerType.IIS) { // Accomodate the vdir name. - ApplicationBaseUrl += startParameters.IISApplication.VirtualDirectoryName + "/"; + _applicationBaseUrl += _startParameters.IISApplication.VirtualDirectoryName + "/"; } - httpClientHandler = new HttpClientHandler(); - httpClient = new HttpClient(httpClientHandler) { BaseAddress = new Uri(ApplicationBaseUrl) }; + _httpClientHandler = new HttpClientHandler(); + _httpClient = new HttpClient(_httpClientHandler) { BaseAddress = new Uri(_applicationBaseUrl) }; HttpResponseMessage response = null; string responseContent = null; @@ -115,7 +124,7 @@ namespace E2ETests { try { - response = httpClient.GetAsync(string.Empty).Result; + response = _httpClient.GetAsync(string.Empty).Result; responseContent = response.Content.ReadAsStringAsync().Result; initializationCompleteTime = DateTime.Now; Console.WriteLine("[Time]: Approximate time taken for application initialization : '{0}' seconds", (initializationCompleteTime - testStartTime).TotalSeconds); @@ -224,7 +233,7 @@ namespace E2ETests Console.WriteLine("Some tests failed. Proceeding with cleanup."); } - DeploymentUtility.CleanUpApplication(startParameters, hostProcess, musicStoreDbName); + DeploymentUtility.CleanUpApplication(_startParameters, hostProcess, musicStoreDbName); } } }