/// <summary> /// Returns the result from the unit test requests. /// </summary> /// <param name="sender"> The sender object.</param> /// <param name="e"> The ResponseEventArgs.</param> private void UnitTestResult_EndHttp(object sender, ResponseEventArgs e) { if ( IsRunning ) { try { // Check test result Test test = e.State.TestItem.Tests.GetByIndex(e.State.TestItem.SelectedTestIndex); UnitTestResult testResult = asdeCommand.CheckTestResult(e.Response, test); // Create SessionCommandProcessEventArgs SessionCommandProcessEventArgs args = new SessionCommandProcessEventArgs("Test Result for '" + test.Name + "'"); args.ProcessType = SessionProcessType.TestResultOk; args.Detail = "Severity Level: " + testResult.SeverityLevel.ToString(); this.DisplaySessionProcessEvent(this, args); // Add response to report HtmlUnitTestReport report = rptBuilder.BuildReport(e, testResult); reports.Add(report); } catch (Exception ex) { Utils.ExceptionHandler.RegisterException(ex); AbortSessionRun(ex.Message); } } else { unitTestGetRequest.SafeAbortRequest(); unitTestPostRequest.SafeAbortRequest(); } }
/// <summary> /// Executes the next safe request in order. /// </summary> /// <param name="state"> The HTTP state.</param> private void ExecuteNextSafeRequest(HttpState state) { // Get safe session and execute Session safeSession = this.SafeSession; int k = state.SessionRequestId; // http settings HttpProperties httpSettings = null; if ( safeSession.SessionRequests[k].RequestHttpSettings == null ) { httpSettings = safeSessionPostRequest.ClientSettings; } else { httpSettings = safeSession.SessionRequests[k].RequestHttpSettings; } if ( safeSession.SessionRequests[k].RequestType == HttpRequestType.GET ) { GetSessionRequest sessionRequest = (GetSessionRequest)safeSession.SessionRequests[k]; SessionCommandProcessEventArgs args = new SessionCommandProcessEventArgs("Requesting " + sessionRequest.Url.ToString()); args.ProcessType = SessionProcessType.SafeRequest; this.DisplaySessionProcessEvent(this, args); // Request, we only use url, http settings and cookies, because // IE doesn't returns and arraylist of values for GET requests. StartGetRequest(safeSessionGetRequest, sessionRequest.Url.ToString(), null, sessionRequest.RequestCookies, httpSettings, state); } }
/// <summary> /// Executes the next safe request in order. Uses session cookies instead of updating them. /// </summary> /// <param name="state"> The HTTP state.</param> /// <param name="responseBufferData"> The ResponseBuffer.</param> private void ExecuteNextSafeRequest(HttpState state, ResponseBuffer responseBufferData) { CookieCollection cookies = null; // Get safe session and execute Session safeSession = this.SafeSession; int k = state.SessionRequestId; // http settings HttpProperties httpSettings = null; if ( safeSession.SessionRequests[k].RequestHttpSettings == null ) { httpSettings = safeSessionPostRequest.ClientSettings; } else { httpSettings = safeSession.SessionRequests[k].RequestHttpSettings; } if ( safeSession.SessionRequests[k].RequestType == HttpRequestType.GET ) { GetSessionRequest sessionRequest = (GetSessionRequest)safeSession.SessionRequests[k]; // // Location is found in Hashtable // if ( responseBufferData.ResponseHeaderCollection.ContainsKey("Location") ) // { // #region Redirect // // Location is not empty // if ( ((string)responseBufferData.ResponseHeaderCollection["Location"])!=String.Empty ) // { // string location = (string)responseBufferData.ResponseHeaderCollection["Location"]; // Uri url = (Uri)responseBufferData.ResponseHeaderCollection["Response Uri"]; // // // Get redirect uri // string redirectUri = UriResolver.ResolveUrl(url,location); // // if ( this.SafeSession.IsCookieUpdatable ) // { // // get cookies from cookie manager // cookies = cookieManager.GetCookies(new Uri(redirectUri)); // } // else // { // // else use saved cookies // cookies = sessionRequest.RequestCookies; // } // // this.ApplyUrlRedirection(state, cookies,httpSettings, redirectUri); // } // #endregion // } // else // { #region Get Request // get cookies. if ( this.SafeSession.IsCookieUpdatable ) { // get cookies from cookie manager cookies = cookieManager.GetCookies(sessionRequest.Url); } else { // else use saved cookies cookies = sessionRequest.RequestCookies; } this.DisplaySessionProcessEvent(this, new SessionCommandProcessEventArgs("Requesting " + sessionRequest.Url.ToString())); // Request, we only use url, http settings and cookies, because // IE doesn't returns and arraylist of values for GET requests. this.StartGetRequest(safeSessionGetRequest, sessionRequest.Url.ToString(), null, cookies, httpSettings, state); #endregion //} } else { #region Post Request PostSessionRequest sessionRequest = (PostSessionRequest)safeSession.SessionRequests[k]; // Post url string postUrl = String.Empty; #region Update post url //if ( this.TestSession.SessionRequests[k].UpdateSessionUrl ) //{ Uri postUri = null; // if response headers null, use from response buffer if ( sessionRequest.ResponseHeaders == null ) { postUri = (Uri)responseBufferData.ResponseHeaderCollection["Response Uri"]; } else { // if it has uri if ( sessionRequest.ResponseHeaders.ContainsKey("Response Uri") ) { if ( sessionRequest.ResponseHeaders["Response Uri"] != null ) { postUri = (Uri)sessionRequest.ResponseHeaders["Response Uri"]; } } } string s = string.Empty; if ( postUri.Query.Length > 0 ) { s = postUri.AbsoluteUri.Replace(postUri.Query,""); } else { s = postUri.AbsoluteUri; } string action = parser.GetFormActionByAbsoluteUrl(s, responseBufferData.HttpBody); if ( action == "" ) { postUrl = s; } else { // Resolve url postUrl = UriResolver.ResolveUrl(postUri,action); } //} #endregion // get cookies. if ( this.SafeSession.IsCookieUpdatable ) { // get cookies from cookie manager cookies = cookieManager.GetCookies(new Uri(postUrl)); } else { // else use saved cookies cookies = sessionRequest.RequestCookies; } SessionCommandProcessEventArgs args = new SessionCommandProcessEventArgs("Requesting " + postUrl); // Check form for updates session values // Convert form ArrayList listValues = parser.ConvertToArrayList(sessionRequest.Form, responseBufferData.HttpBody); // Display posted values string posted = ConvertToPostDataString(listValues); args.Detail = "Posted data: " + posted; args.ProcessType = SessionProcessType.SafeRequest; this.DisplaySessionProcessEvent(this, args); // Request post this.StartPostRequest(safeSessionPostRequest, postUrl, listValues, cookies, httpSettings, state); #endregion } }
/// <summary> /// Apply the test requests for a session request. /// </summary> /// <param name="sessionRequest"> The session request.</param> /// <param name="result"> The response buffer result from the safe session.</param> private void ApplyRequestTests(SessionRequest sessionRequest, ResponseBuffer result) { UnitTestItem unitTestItem = sessionRequest.WebUnitTest; unitTestItem.Form = sessionRequest.Form; CookieCollection cookies = null; //int availableTests = this.AvailableTests(); //bool lastItem = false; string requestUrl = sessionRequest.Url.ToString(); #region Run each test in SessionRequest WebUnitTestItem // run each test in Form foreach (DictionaryEntry de in unitTestItem.Tests) { Test test = (Test)de.Value; ArrayList values = new ArrayList(); // get cookies cookies = cookieManager.GetCookies(sessionRequest.Url); // set current test index unitTestItem.SelectedTestIndex = unitTestItem.Tests.IndexOfValue(test); // create SessionCommandProcessEventArgs SessionCommandProcessEventArgs args = new SessionCommandProcessEventArgs("Applying test '" + test.Name + "' to " + sessionRequest.Url.ToString()); args.ProcessType = SessionProcessType.TestRequest; #region Apply Test // -------------------------------------------------------------------------------- // Process data // Html Form Tag if ( test.UnitTestDataType == UnitTestDataContainer.HtmlFormTag ) { // is a form tag // apply test to form HtmlFormTag filledForm = ApplyTestToForm(test, sessionRequest.Form.CloneTag()); values = parser.ConvertToArrayList(filledForm, result.HttpBody, updateElementNames); } // Post Data Hashtable if ( test.UnitTestDataType == UnitTestDataContainer.PostDataHashtable ) { string postdata = ((PostSessionRequest)sessionRequest).PostData; // convert post data to hashtable FormConverter converter = new FormConverter(); Hashtable postDataHash = converter.ConvertPostDataString(postdata); // Applies test to post data hashtable Hashtable filledPostData = ApplyTestToPostData(test, (Hashtable)postDataHash.Clone()); values = converter.ConvertPostDataArrayList(filledPostData); } // Cookies if ( test.UnitTestDataType == UnitTestDataContainer.Cookies ) { cookies = ApplyTestToCookies(test, cookies); } // Url if( test.UnitTestDataType == UnitTestDataContainer.NoPostData ) { // a url test requestUrl = ApplyTestToUrl(test, WebServerUriType.Normal,sessionRequest.Url).ToString(); } // ----------------------------------------------------------------------------------- #endregion if ( (test.UnitTestDataType == UnitTestDataContainer.HtmlFormTag ) || ( test.UnitTestDataType == UnitTestDataContainer.PostDataHashtable ) ) { // Set post data for report test.Arguments.PostData = ConvertToPostDataString(values); args.Detail = "Posted Data:" + test.Arguments.PostData; } if ( test.UnitTestDataType == UnitTestDataContainer.NoPostData ) { args.Detail = "Url query:" + requestUrl; } if ( test.UnitTestDataType == UnitTestDataContainer.Cookies ) { StringBuilder cookieQuery = new StringBuilder(); foreach ( Cookie cky in cookies ) { cookieQuery.Append("Name:" + cky.Name); cookieQuery.Append(", "); cookieQuery.Append("Value:" + cky.Value); cookieQuery.Append(";"); } args.Detail = "Cookie:" + cookieQuery.ToString(); } // // set last item flag // if ( availableTests == 1) // { // lastItem = true; // } // display the current processing this.DisplaySessionProcessEvent(this,args); // clone test item and set last item value HttpState httpRequestState = new HttpState(); httpRequestState.TestItem = unitTestItem.Clone(); //httpRequestState.IsLastItem = lastItem; // http settings HttpProperties httpSettings = null; if ( sessionRequest.RequestHttpSettings == null ) { httpSettings = unitTestGetRequest.ClientSettings; } else { httpSettings = sessionRequest.RequestHttpSettings; } if ( sessionRequest.RequestType == HttpRequestType.GET ) { // get request this.StartGetRequest(unitTestGetRequest, requestUrl, null, cookies, httpSettings, httpRequestState); } else { // post request this.StartPostRequest(unitTestPostRequest, requestUrl, values, cookies, httpSettings, httpRequestState); } //availableTests--; } #endregion }