/// <summary> /// Determines whether the specified ServiceRequestInformation is equal to the current instance. /// </summary> /// <param name="obj">The ServiceRequestInformation to compare with the current instance.</param> /// <returns>Returns true is given ServiceRequestInformation is equal to current instance</returns> public bool Equals(ServiceRequestInformation obj) { if (Status != obj.Status || StatusInformation != obj.StatusInformation) { return(false); } return(true); }
/// <summary> /// Fetch results asynchronous /// </summary> /// <param name="blastParameters">Blast Input config parameters</param> /// <returns></returns> private TestCaseOutput FetchResultsAsync(Dictionary <string, object> blastParameters) { // Get the input query string string sequenceString = blastParameters[Constants.QuerySeqString] as string; Sequence sequence = new Sequence(Alphabets.DNA, sequenceString); // Set NCBIHandler configuration services IBlastServiceHandler service = null; object resultsObject = null; try { service = new AzureBlastHandler(); ConfigParameters configParams = new ConfigParameters(); configParams.UseBrowserProxy = true; configParams.DefaultTimeout = 5; configParams.Connection = new Uri(Constants.AzureUri); service.Configuration = configParams; BlastParameters blastSearchPams = blastParameters[Constants.BlastParmsConst] as BlastParameters; // Get Request identifier from web service. string reqId = service.SubmitRequest(sequence, blastSearchPams); // Get request information for first time. ServiceRequestInformation info = service.GetRequestStatus(reqId); // Ping service until request staus is ready. int maxAttempts = 10; int attempt = 1; while (attempt <= maxAttempts && info.Status != ServiceRequestStatus.Ready && info.Status != ServiceRequestStatus.Error) { System.Threading.Thread.Sleep(2000); ++attempt; info = service.GetRequestStatus(reqId); } IBlastParser blastXmlParser = new BlastXmlParser(); using (StringReader reader = new StringReader(service.GetResult(reqId, blastSearchPams))) { resultsObject = blastXmlParser.Parse(reader); } } finally { if (service != null) { ((IDisposable)service).Dispose(); } } return(new TestCaseOutput(resultsObject, false)); }
/// <summary> /// Validate general http request status by /// differnt parameters for Azure web service.. /// <param name="nodeName">different alphabet node name</param> /// </summary> void ValidateGeneralGetRequestStatusMethod(string nodeName) { // Gets the search query parameter and their values. string querySequence = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.QuerySequency); string queryDatabaseValue = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.DatabaseValue); string queryProgramValue = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.ProgramValue); string queryDatabaseParameter = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.DatabaseParameter); string queryProgramParameter = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.ProgramParameter); // Set Blast Parameters BlastParameters queryParams = new BlastParameters(); queryParams.Add(queryDatabaseParameter, queryDatabaseValue); queryParams.Add(queryProgramParameter, queryProgramValue); Dictionary <string, object> testCaseParms = new Dictionary <string, object>(); testCaseParms.Add(Constants.BlastParmsConst, queryParams); testCaseParms.Add(Constants.QuerySeqString, querySequence); TestCaseParameters parameters = new TestCaseParameters( Constants.AzureWebServiceRequestStatusForDnaTest, null, GetRequestStatus, testCaseParms); object resultsObject = _TestCaseSimulator.Simulate(parameters).Result; ServiceRequestInformation reqInfo = resultsObject as ServiceRequestInformation; // Validate job status. if (reqInfo.Status != ServiceRequestStatus.Waiting && reqInfo.Status != ServiceRequestStatus.Ready && reqInfo.Status != ServiceRequestStatus.Queued) { string error = ApplicationLog.WriteLine(string.Format( null, "Unexpected error", reqInfo.Status)); Assert.Fail(error); Console.WriteLine(string.Format((IFormatProvider)null, "Azure Blast BVT: Unexpected error", reqInfo.Status)); } else { Console.WriteLine(string.Format((IFormatProvider)null, "Azure Blast BVT: Client Request status has been validated successfully.")); Console.WriteLine(string.Format((IFormatProvider)null, "Azure Blast BVT: Request status {0} ", reqInfo.Status)); } }
/// <summary> /// Get the status of job using job id and control id after submitting the job /// </summary> /// <param name="parameters">job id, control id</param> /// <returns>result with status of job</returns> public MBF.Web.ServiceRequestInformation GetRequestStatus(ServiceParameters parameters) { string jobStatus = _baseClient.GetJobInfo(parameters.JobId, parameters.Parameters[CONTROLID].ToString()); string[] statusArray = jobStatus.Split('|'); ServiceRequestInformation info = new ServiceRequestInformation(); switch (statusArray[6]) { case "FINISHED": info.Status = ServiceRequestStatus.Ready; break; case "ERROR": info.Status = ServiceRequestStatus.Error; break; default: break; } return(info); }
/// <summary> /// Process the request. This method takes care of executing the rest of the steps /// to complete the blast search request in a background thread. Which involves /// 1. Submit the job to server /// 2. Ping the service with the request identifier to get the status of request. /// 3. Repeat step 1, at "RetryInterval" for "RetryCount" till a "success"/"failure" /// status. /// 4. If the status is a "failure" raise an completed event to notify the user /// with appropriate details. /// 5. If the status "success". Get the output of search from server in xml format. /// 6. Parse the xml and the framework object model. /// 7. Raise the completed event and notify user with the output. /// </summary> /// <param name="sender">Client request NCBI Blast search</param> /// <param name="argument">Thread event argument</param> private void ProcessRequestThread(object sender, DoWorkEventArgs argument) { BlastThreadParameter threadParameter = (BlastThreadParameter)argument.Argument; string requestIdentifier = threadParameter.RequestIdentifier; try { ServiceRequestInformation requestInfo = new ServiceRequestInformation(); requestInfo.Status = ServiceRequestStatus.Queued; int retryCount = 0; do { requestInfo = GetRequestStatus(requestIdentifier); if (requestInfo.Status == ServiceRequestStatus.Ready || requestInfo.Status == ServiceRequestStatus.Error || workerThread.CancellationPending) { break; } retryCount++; Thread.Sleep(RetryInterval * retryCount); }while (retryCount < RetryCount); if (workerThread.CancellationPending) { argument.Cancel = true; } else { BlastRequestCompletedEventArgs eventArgument = null; string message; if (requestInfo.Status == ServiceRequestStatus.Ready) { string output = GetResult( requestIdentifier, threadParameter.Parameters); IList <BlastResult> result = Parser.Parse(new StringReader(output)); eventArgument = new BlastRequestCompletedEventArgs( requestIdentifier, true, result, null, string.Empty, workerThread.CancellationPending); argument.Result = eventArgument; } else if (requestInfo.Status == ServiceRequestStatus.Error) { message = String.Format(CultureInfo.InvariantCulture, Resources.BLASTREQUESTFAILED, requestIdentifier, requestInfo.Status, requestInfo.StatusInformation); eventArgument = new BlastRequestCompletedEventArgs( requestIdentifier, false, null, new Exception(message), message, workerThread.CancellationPending); argument.Result = eventArgument; } else { message = String.Format(CultureInfo.InvariantCulture, Resources.BLASTRETRIESEXCEEDED, requestIdentifier, requestInfo.Status, requestInfo.StatusInformation); eventArgument = new BlastRequestCompletedEventArgs( requestIdentifier, false, null, new TimeoutException(message), message, workerThread.CancellationPending); argument.Result = eventArgument; } } } catch (Exception ex) { BlastRequestCompletedEventArgs eventArgument = new BlastRequestCompletedEventArgs( string.Empty, false, null, ex, ex.Message, workerThread.CancellationPending); argument.Result = eventArgument; } }
/// <summary> /// Return the status of a submitted job. /// </summary> /// <param name="requestIdentifier">Identifier for the request of interest.</param> /// <returns>The status of the request.</returns> public ServiceRequestInformation GetRequestStatus(string requestIdentifier) { string information = string.Empty; string errorInformation = string.Empty; WebAccessor accessor = new WebAccessor(); WebAccessorResponse webAccessorResponse = null; ServiceRequestInformation status = new ServiceRequestInformation(); Dictionary <string, string> settings = new Dictionary <string, string>(); settings.Add(PARAMETERCMD, "GET"); settings.Add(PARAMETERRID, System.Web.HttpUtility.UrlEncode(requestIdentifier)); if (Configuration.UseBrowserProxy) { accessor.GetBrowserProxy(); } webAccessorResponse = accessor.SubmitHttpRequest( ServiceUri, true, settings); if (!webAccessorResponse.IsSuccessful) { // failure accessor.Close(); status.Status = ServiceRequestStatus.Error; status.StatusInformation = webAccessorResponse.StatusDescription; return(status); } webAccessorResponse.StatusDescription = string.Empty; information = ExtractInfoSection(webAccessorResponse.ResponseString); if (String.IsNullOrEmpty(information)) { status.Status = ServiceRequestStatus.Error; // see if we got an error message errorInformation = ExtractBlastErrorSection(webAccessorResponse.ResponseString); if (string.IsNullOrEmpty(errorInformation)) { status.StatusInformation = "An unknown server error has occurred."; } else { status.StatusInformation = errorInformation; } return(status); } else { int statusStart = information.IndexOf("Status=", StringComparison.OrdinalIgnoreCase); if (statusStart >= 0) { statusStart += "Status=".Length; int statusEnd = information.IndexOf('\n', statusStart); if (statusEnd >= 0) { webAccessorResponse.StatusDescription = information.Substring(statusStart, statusEnd - statusStart); } } } if (webAccessorResponse.StatusDescription == STATUSWAITING) { status.Status = ServiceRequestStatus.Waiting; return(status); } else if (webAccessorResponse.StatusDescription == STATUSREADY) { status.Status = ServiceRequestStatus.Ready; return(status); } status.Status = ServiceRequestStatus.Error; status.StatusInformation = webAccessorResponse.StatusDescription; return(status); }
/// <summary> /// Validate general http request status by /// differnt parameters for Ebi web service.. /// <param name="nodeName">different alphabet node name</param> /// </summary> void ValidateEbiGeneralGetRequestStatusMethod(string nodeName, string alphabet) { // Gets the search query parameter and their values. string querySequence = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.QuerySequency); string queryDatabaseValue = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.DatabaseValue); string queryProgramValue = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.ProgramValue); string queryDatabaseParameter = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.DatabaseParameter); string queryProgramParameter = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.ProgramParameter); string emailParameter = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.Emailparameter); string email = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.EmailAdress); string reqId = string.Empty; // Create a sequence. Sequence seq = new Sequence(Utility.GetAlphabet(alphabet), querySequence); // Set Service confiruration parameters true. IBlastServiceHandler ebiBlastService = new EbiWuBlastHandler(); ConfigParameters configParameters = new ConfigParameters(); configParameters.UseBrowserProxy = true; ebiBlastService.Configuration = configParameters; // Create search parameters object. BlastParameters queryParams = new BlastParameters(); queryParams.Add(queryDatabaseParameter, queryDatabaseValue); queryParams.Add(queryProgramParameter, queryProgramValue); queryParams.Add(emailParameter, email); queryParams.Add("SequenceType", alphabet.ToLower(CultureInfo.CurrentCulture).Replace("ambiguous", "")); // Create a request reqId = ebiBlastService.SubmitRequest(seq, queryParams); // validate request identifier. Assert.IsNotNull(reqId); // submit request identifier and get the status ServiceRequestInformation reqInfo = ebiBlastService.GetRequestStatus(reqId); // Validate job status. if (reqInfo.Status != ServiceRequestStatus.Waiting && reqInfo.Status != ServiceRequestStatus.Ready) { string error = ApplicationLog.WriteLine( string.Concat("Unexpected error", reqInfo.Status)); Assert.Fail(error); Console.WriteLine(string.Concat( "Unexpected error ", reqInfo.Status)); } else { Console.WriteLine(string.Concat( "Request status ", reqInfo.Status)); } }
/// <summary> /// Validate general fetching results.by passing /// differnt parameters for Ebi web service.. /// <param name="nodeName">xml node name.</param> /// <param name="isFetchSynchronous">Is Fetch Synchronous?</param> /// </summary> void ValidateEBIWuBlastResultsFetch( string nodeName, bool isFetchSynchronous) { // Gets the search query parameter and their values. string alphabetName = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.AlphabetNameNode); string querySequence = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.QuerySequency); string queryDatabaseValue = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.DatabaseValue); string emailParameter = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.Emailparameter); string email = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.EmailAdress); string queryProgramValue = utilityObj.xmlUtil.GetTextValue( Constants.EbiAsynchronousResultsNode, Constants.ProgramValue); string queryDatabaseParameter = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.DatabaseParameter); string queryProgramParameter = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.ProgramParameter); string expectedHitId = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.HitID); string expectedAccession = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.HitAccession); string expectedResultCount = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.ResultsCount); string expectedHitsCount = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.HitsCount); string expectedEntropyStatistics = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.EntropyStatistics); string expectedKappaStatistics = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.KappaStatistics); string expectedLambdaStatistics = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.LambdaStatistics); string expectedLength = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.Length); object responseResults = null; Sequence seq = new Sequence(Utility.GetAlphabet(alphabetName), querySequence); // create Ebi Blast service object. IBlastServiceHandler service = new EbiWuBlastHandler(); ConfigParameters configParams = new ConfigParameters(); configParams.UseBrowserProxy = true; service.Configuration = configParams; BlastParameters searchParams = new BlastParameters(); // Set Request parameters. searchParams.Add(queryDatabaseParameter, queryDatabaseValue); searchParams.Add(queryProgramParameter, queryProgramValue); searchParams.Add(emailParameter, email); searchParams.Add("SequenceType", alphabetName.ToLower(CultureInfo.CurrentCulture).Replace("ambiguous", "")); // Create a request without passing sequence. string reqId = service.SubmitRequest(seq, searchParams); // validate request identifier. Assert.IsNotNull(reqId); // query the status ServiceRequestInformation info = service.GetRequestStatus(reqId); if (info.Status != ServiceRequestStatus.Waiting && info.Status != ServiceRequestStatus.Ready) { string err = ApplicationLog.WriteLine("Unexpected status: '{0}'", info.Status); Assert.Fail(err); } // get async results, poll until ready int maxAttempts = 20; int attempt = 1; while (attempt <= maxAttempts && info.Status != ServiceRequestStatus.Error && info.Status != ServiceRequestStatus.Ready) { if (isFetchSynchronous) { info = service.GetRequestStatus(reqId); Thread.Sleep(info.Status == ServiceRequestStatus.Waiting || info.Status == ServiceRequestStatus.Queued ? 20000 * attempt : 0); } else { Thread.Sleep(info.Status == ServiceRequestStatus.Waiting ? 20000 : 0); info = service.GetRequestStatus(reqId); } ++attempt; } IBlastParser blastXmlParser = new BlastXmlParser(); responseResults = blastXmlParser.Parse( new StringReader(service.GetResult(reqId, searchParams))); // Validate blast results. Assert.IsNotNull(responseResults); List <BlastResult> eBlastResults = responseResults as List <BlastResult>; Assert.IsNotNull(eBlastResults); Assert.AreEqual(eBlastResults.Count.ToString( (IFormatProvider)null), expectedResultCount); Assert.AreEqual(eBlastResults[0].Records.Count.ToString(( IFormatProvider)null), expectedResultCount); BlastSearchRecord record = eBlastResults[0].Records[0]; Assert.AreEqual(record.Statistics.Kappa.ToString( (IFormatProvider)null), expectedKappaStatistics); Assert.AreEqual(record.Statistics.Lambda.ToString( (IFormatProvider)null), expectedLambdaStatistics); Assert.AreEqual(record.Statistics.Entropy.ToString( (IFormatProvider)null), expectedEntropyStatistics); Assert.AreEqual(record.Hits.Count.ToString( (IFormatProvider)null), expectedHitsCount); Hit hit = record.Hits[0]; Assert.AreEqual(hit.Accession, expectedAccession); Assert.AreEqual(hit.Length.ToString((IFormatProvider)null), expectedLength); Assert.AreEqual(hit.Id.ToString((IFormatProvider)null), expectedHitId); Assert.AreEqual(hit.Hsps.Count.ToString((IFormatProvider)null), expectedResultCount); Console.WriteLine(string.Format((IFormatProvider)null, "Ebi Blast BVT: Hits count '{0}'.", eBlastResults.Count)); Console.WriteLine(string.Format((IFormatProvider)null, "Ebi Blast BVT: Accession '{0}'.", hit.Accession)); Console.WriteLine(string.Format((IFormatProvider)null, "Ebi Blast BVT: Hit Id '{0}'.", hit.Id)); Console.WriteLine(string.Format((IFormatProvider)null, "Ebi Blast BVT: Hits Count '{0}'.", hit.Hsps.Count)); // Validate the results Synchronously with the results got earlier. if (isFetchSynchronous) { IList <BlastResult> syncBlastResults = service.FetchResultsSync(reqId, searchParams) as List <BlastResult>; Assert.IsNotNull(syncBlastResults); if (null != eBlastResults[0].Records[0].Hits && 0 < eBlastResults[0].Records[0].Hits.Count && null != eBlastResults[0].Records[0].Hits[0].Hsps && 0 < eBlastResults[0].Records[0].Hits[0].Hsps.Count) { Assert.AreEqual(eBlastResults[0].Records[0].Hits[0].Hsps[0].QuerySequence, syncBlastResults[0].Records[0].Hits[0].Hsps[0].QuerySequence); } else { ApplicationLog.WriteLine( "No significant hits found with the these parameters."); Console.WriteLine("No significant hits found with the these parameters."); } } }
public void ValidateProcessRequestThread() { // Gets the search query parameter and their values. string alphabetName = utilityObj.xmlUtil.GetTextValue( Constants.EbiSynchronousResults, Constants.AlphabetNameNode); string querySequence = utilityObj.xmlUtil.GetTextValue( Constants.EbiSynchronousResults, Constants.QuerySequency); string queryDatabaseValue = utilityObj.xmlUtil.GetTextValue( Constants.EbiSynchronousResults, Constants.DatabaseValue); string emailParameter = utilityObj.xmlUtil.GetTextValue( Constants.EbiSynchronousResults, Constants.Emailparameter); string email = utilityObj.xmlUtil.GetTextValue( Constants.EbiSynchronousResults, Constants.EmailAdress); string queryProgramValue = utilityObj.xmlUtil.GetTextValue( Constants.EbiAsynchronousResultsNode, Constants.ProgramValue); string queryDatabaseParameter = utilityObj.xmlUtil.GetTextValue( Constants.EbiSynchronousResults, Constants.DatabaseParameter); string queryProgramParameter = utilityObj.xmlUtil.GetTextValue( Constants.EbiSynchronousResults, Constants.ProgramParameter); Sequence seq = new Sequence(Utility.GetAlphabet(alphabetName), querySequence); // create Ebi Blast service object. EbiWuBlastHandler service = new EbiWuBlastHandler(); try { service.RequestCompleted += new EventHandler <BlastRequestCompletedEventArgs>(ebiBlastService_RequestCompleted); ConfigParameters configParams = new ConfigParameters(); configParams.UseBrowserProxy = true; service.Configuration = configParams; BlastParameters searchParams = new BlastParameters(); // Set Request parameters. searchParams.Add(queryDatabaseParameter, queryDatabaseValue); searchParams.Add(queryProgramParameter, queryProgramValue); searchParams.Add(emailParameter, email); searchParams.Add("SequenceType", alphabetName.ToLower(CultureInfo.CurrentCulture).Replace("ambiguous", "")); // Create a request without passing sequence. string reqId = service.SubmitRequest(seq, searchParams); // validate request identifier. Assert.IsNotNull(reqId); // query the status ServiceRequestInformation info = service.GetRequestStatus(reqId); if (info.Status != ServiceRequestStatus.Waiting && info.Status != ServiceRequestStatus.Ready) { string err = ApplicationLog.WriteLine("Unexpected status: '{0}'", info.Status); Assert.Fail(err); } } catch (Exception ex) { Assert.Fail(ex.Message); } finally { if (service != null) { service.Dispose(); } } }
/// <summary> /// Validate general http request status by /// differnt parameters for Ebi web service.. /// <param name="nodeName">different alphabet node name</param> /// </summary> static void ValidateEbiGeneralGetRequestStatusMethod(string nodeName) { if (_IsWebServiceAvailable) { // Gets the search query parameter and their values. string alphabetName = Utility._xmlUtil.GetTextValue( nodeName, Constants.AlphabetNameNode); string querySequence = Utility._xmlUtil.GetTextValue( nodeName, Constants.QuerySequency); string queryDatabaseValue = Utility._xmlUtil.GetTextValue( nodeName, Constants.DatabaseValue); string queryProgramValue = Utility._xmlUtil.GetTextValue( nodeName, Constants.ProgramValue); string queryDatabaseParameter = Utility._xmlUtil.GetTextValue( nodeName, Constants.DatabaseParameter); string queryProgramParameter = Utility._xmlUtil.GetTextValue( nodeName, Constants.ProgramParameter); string emailParameter = Utility._xmlUtil.GetTextValue( nodeName, Constants.Emailparameter); string email = Utility._xmlUtil.GetTextValue( nodeName, Constants.EmailAdress); string reqId = string.Empty; // Create a sequence. Sequence seq = new Sequence(Utility.GetAlphabet(alphabetName), querySequence); // Set Service confiruration parameters true. IBlastServiceHandler ebiBlastService = new EbiWuBlastHandler(); ConfigParameters configParameters = new ConfigParameters(); configParameters.UseBrowserProxy = true; ebiBlastService.Configuration = configParameters; // Create search parameters object. BlastParameters queryParams = new BlastParameters(); // Add mandatory parameter values to search query parameters. queryParams.Add(queryDatabaseParameter, queryDatabaseValue); queryParams.Add(queryProgramParameter, queryProgramValue); queryParams.Add(emailParameter, email); // Create a request reqId = ebiBlastService.SubmitRequest(seq, queryParams); // validate request identifier. Assert.IsNotNull(reqId); // submit request identifier and get the status ServiceRequestInformation reqInfo = ebiBlastService.GetRequestStatus(reqId); // Validate job status. if (reqInfo.Status != ServiceRequestStatus.Waiting && reqInfo.Status != ServiceRequestStatus.Ready) { string error = ApplicationLog.WriteLine(string.Format( null, "Unexpected error", reqInfo.Status)); Assert.Fail(error); Console.WriteLine(string.Format(null, "Unexpected error", reqInfo.Status)); } else { Console.WriteLine(string.Format(null, "Request status {0} ", reqInfo.Status)); } } else { Assert.Ignore("The test case ignored due to connection failure"); } }
/// <summary> /// Validate general fetching results.by passing /// differnt parameters for BioHPC Blast web service. /// <param name="nodeName">xml node name.</param> /// <param name="isFetchSynchronous">Is Fetch Synchronous?</param> /// </summary> static void ValidateBioHPCBlastResultsFetch( string nodeName, bool isFetchSynchronous) { if (_IsWebServiceAvailable) { // Gets the search query parameter and their values. string alphabetName = Utility._xmlUtil.GetTextValue( nodeName, Constants.AlphabetNameNode); string querySequence = Utility._xmlUtil.GetTextValue( nodeName, Constants.QuerySequency); string queryDatabaseValue = Utility._xmlUtil.GetTextValue( nodeName, Constants.DatabaseValue); string email = Utility._xmlUtil.GetTextValue( nodeName, Constants.EmailAdress); string queryProgramValue = Utility._xmlUtil.GetTextValue( nodeName, Constants.ProgramValue); string queryDatabaseParameter = Utility._xmlUtil.GetTextValue( nodeName, Constants.DatabaseParameter); string queryProgramParameter = Utility._xmlUtil.GetTextValue( nodeName, Constants.ProgramParameter); string expectedHitId = Utility._xmlUtil.GetTextValue( nodeName, Constants.HitID); string expectedAccession = Utility._xmlUtil.GetTextValue( nodeName, Constants.HitAccession); string expectedResultCount = Utility._xmlUtil.GetTextValue( nodeName, Constants.ResultsCount); string expectedHitsCount = Utility._xmlUtil.GetTextValue( nodeName, Constants.HitsCount); string expectedEntropyStatistics = Utility._xmlUtil.GetTextValue( nodeName, Constants.EntropyStatistics); string expectedKappaStatistics = Utility._xmlUtil.GetTextValue( nodeName, Constants.KappaStatistics); string expectedLambdaStatistics = Utility._xmlUtil.GetTextValue( nodeName, Constants.LambdaStatistics); string expectedLength = Utility._xmlUtil.GetTextValue( nodeName, Constants.Length); int maxAttempts = int.Parse(Utility._xmlUtil.GetTextValue( nodeName, Constants.MaxAttemptsNode)); int waitingTime = int.Parse(Utility._xmlUtil.GetTextValue( nodeName, Constants.WaitingTimeNode)); string expect = Utility._xmlUtil.GetTextValue( nodeName, Constants.Expectparameter); string emailNotify = Utility._xmlUtil.GetTextValue( nodeName, Constants.EmailNotifyParameterNode); string jobName = Utility._xmlUtil.GetTextValue( nodeName, Constants.JobNameParameterNode); string expectValue = Utility._xmlUtil.GetTextValue( nodeName, Constants.ExpectNode); string emailNotifyValue = Utility._xmlUtil.GetTextValue( nodeName, Constants.EmailNotifyNode); string jobNameValue = Utility._xmlUtil.GetTextValue( nodeName, Constants.JobNameNode); object responseResults = null; Sequence seq = new Sequence( Utility.GetAlphabet(alphabetName), querySequence); // create BioHPC Blast Web Service object. IBlastServiceHandler service = new BioHPCBlastHandler(); ConfigParameters configPams = new ConfigParameters(); configPams.EmailAddress = email; configPams.Password = String.Empty; configPams.UseBrowserProxy = true; service.Configuration = configPams; BlastParameters searchParams = new BlastParameters(); // Set Request parameters. searchParams.Add(queryDatabaseParameter, queryDatabaseValue); searchParams.Add(queryProgramParameter, queryProgramValue); searchParams.Add(expect, expectValue); searchParams.Add(emailNotify, emailNotifyValue); searchParams.Add(jobName, jobNameValue); // Create a request without passing sequence. string reqId = service.SubmitRequest(seq, searchParams); // validate request identifier. Assert.IsNotNull(reqId); ServiceRequestInformation info = service.GetRequestStatus(reqId); if (info.Status != ServiceRequestStatus.Waiting && info.Status != ServiceRequestStatus.Ready && info.Status != ServiceRequestStatus.Queued) { string err = ApplicationLog.WriteLine("Unexpected status: '{0}'", info.Status); Assert.Fail(err); } // get async results, poll until ready int attempt = 1; while (attempt <= maxAttempts && info.Status != ServiceRequestStatus.Error && info.Status != ServiceRequestStatus.Ready) { ++attempt; if (isFetchSynchronous) { info = service.GetRequestStatus(reqId); Thread.Sleep( info.Status == ServiceRequestStatus.Waiting || info.Status == ServiceRequestStatus.Queued ? waitingTime * attempt : 0); } else { Thread.Sleep( info.Status == ServiceRequestStatus.Waiting || info.Status == ServiceRequestStatus.Queued ? waitingTime * attempt : 0); info = service.GetRequestStatus(reqId); } } IBlastParser blastXmlParser = new BlastXmlParser(); responseResults = blastXmlParser.Parse( new StringReader(service.GetResult(reqId, searchParams))); // Validate blast results. Assert.IsNotNull(responseResults); List <BlastResult> eBlastResults = responseResults as List <BlastResult>; Assert.IsNotNull(eBlastResults); Assert.AreEqual(eBlastResults.Count.ToString( (IFormatProvider)null), expectedResultCount); Assert.AreEqual(eBlastResults[0].Records.Count.ToString(( IFormatProvider)null), expectedResultCount); BlastSearchRecord record = eBlastResults[0].Records[0]; Assert.AreEqual(record.Statistics.Kappa.ToString( (IFormatProvider)null), expectedKappaStatistics); Assert.AreEqual(record.Statistics.Lambda.ToString( (IFormatProvider)null), expectedLambdaStatistics); Assert.AreEqual(record.Statistics.Entropy.ToString( (IFormatProvider)null), expectedEntropyStatistics); Assert.AreEqual(record.Hits.Count.ToString( (IFormatProvider)null), expectedHitsCount); Hit hit = record.Hits[0]; Assert.AreEqual(hit.Accession, expectedAccession); Assert.AreEqual(hit.Length.ToString(), expectedLength); Assert.AreEqual(hit.Id.ToString((IFormatProvider)null), expectedHitId); Assert.AreEqual(hit.Hsps.Count.ToString((IFormatProvider)null), expectedResultCount); Console.WriteLine(string.Format(null, "BioHPC Blast BVT : Hits count '{0}'.", eBlastResults.Count)); Console.WriteLine(string.Format(null, "BioHPC Blast BVT : Accession '{0}'.", hit.Accession)); Console.WriteLine(string.Format(null, "BioHPC Blast BVT : Hit Id '{0}'.", hit.Id)); Console.WriteLine(string.Format(null, "BioHPC Blast BVT : Hits Count '{0}'.", hit.Hsps.Count)); // Validate the results Synchronously with the results got earlier. if (isFetchSynchronous) { IList <BlastResult> syncBlastResults = service.FetchResultsSync(reqId, searchParams) as List <BlastResult>; Assert.IsNotNull(syncBlastResults); if (null != eBlastResults[0].Records[0].Hits && 0 < eBlastResults[0].Records[0].Hits.Count && null != eBlastResults[0].Records[0].Hits[0].Hsps && 0 < eBlastResults[0].Records[0].Hits[0].Hsps.Count) { Assert.AreEqual( eBlastResults[0].Records[0].Hits[0].Hsps[0].QuerySequence, syncBlastResults[0].Records[0].Hits[0].Hsps[0].QuerySequence); } else { ApplicationLog.WriteLine( "No significant hits found with the these parameters."); Console.WriteLine( "No significant hits found with the these parameters."); } } } else { Assert.Ignore( "The test case ignored due to connection failure"); } }
/// <summary> /// Fetch Asynchronous results /// </summary> /// <param name="blastParameters">Blast config parameters</param> /// <returns>BioHPC Web service results</returns> private TestCaseOutput FetchResultsASyncTest(Dictionary <string, object> blastParameters) { // Get the input query string string sequenceString = blastParameters[Constants.QuerySeqString] as string; string alphabetName = blastParameters[Constants.AlphabetString] as string; string email = blastParameters[Constants.EmailString] as string; Sequence sequence = new Sequence(Utility.GetAlphabet(alphabetName), sequenceString); string maxAttempts = blastParameters[Constants.MaxAttemptString] as string; string waitTime = blastParameters[Constants.WaitTimeString] as string; //Set BioHPC web service config parameters IBlastServiceHandler service = null; object responseResults = null; try { service = new BioHPCBlastHandler(); ConfigParameters configParameters = new ConfigParameters(); configParameters.EmailAddress = email; configParameters.Password = String.Empty; configParameters.UseBrowserProxy = true; service.Configuration = configParameters; BlastParameters blastSearchPams = blastParameters[Constants.BlastParmsConst] as BlastParameters; // Submit request and get request identifier string reqId = service.SubmitRequest(sequence, blastSearchPams); // validate request identifier. Assert.IsNotNull(reqId); ServiceRequestInformation info = service.GetRequestStatus(reqId); if (info.Status != ServiceRequestStatus.Waiting && info.Status != ServiceRequestStatus.Ready && info.Status != ServiceRequestStatus.Queued) { string err = ApplicationLog.WriteLine("Unexpected status: '{0}'", info.Status); Assert.Fail(err); } // get async results, poll until ready int attempt = 1; while (attempt <= Int32.Parse(maxAttempts, (IFormatProvider)null) && info.Status != ServiceRequestStatus.Error && info.Status != ServiceRequestStatus.Ready) { ++attempt; info = service.GetRequestStatus(reqId); Thread.Sleep( info.Status == ServiceRequestStatus.Waiting || info.Status == ServiceRequestStatus.Queued ? Int32.Parse(waitTime, (IFormatProvider)null) * attempt : 0); } IBlastParser blastXmlParser = new BlastXmlParser(); using (StringReader reader = new StringReader(service.GetResult(reqId, blastSearchPams))) { responseResults = blastXmlParser.Parse(reader); } } finally { if (service != null) { ((IDisposable)service).Dispose(); } } return(new TestCaseOutput(responseResults, false)); }
/// <summary> /// The execution method for the activity. /// </summary> /// <param name="executionContext">The execution context.</param> /// <returns>The execution status.</returns> protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) { FastAParser fastaParser = new FastAParser(); fastaParser.Open(InputFile); ISequence searchSequence = fastaParser.Parse().FirstOrDefault(); NCBIBlastHandler service = new NCBIBlastHandler(); ConfigParameters configParams = new ConfigParameters(); configParams.UseBrowserProxy = true; service.Configuration = configParams; BlastParameters searchParams = new BlastParameters(); // fill in the BLAST settings: searchParams.Add("Program", "blastn"); searchParams.Add("Database", "nr"); // higher Expect will return more results searchParams.Add("Expect", "1e-10"); searchParams.Add("CompositionBasedStatistics", "0"); // create the request string jobID = service.SubmitRequest(searchSequence, searchParams); // query the status ServiceRequestInformation info = service.GetRequestStatus(jobID); if (info.Status != ServiceRequestStatus.Waiting && info.Status != ServiceRequestStatus.Ready) { // TODO: Add error handling here } // get async results, poll until ready int maxAttempts = 10; int attempt = 1; while (attempt <= maxAttempts && info.Status != ServiceRequestStatus.Error && info.Status != ServiceRequestStatus.Ready) { ++attempt; info = service.GetRequestStatus(jobID); Thread.Sleep( info.Status == ServiceRequestStatus.Waiting || info.Status == ServiceRequestStatus.Queued ? 20000 * attempt : 0); } // Get blast result. BlastXmlParser blastParser = new BlastXmlParser(); IList <BlastResult> results = blastParser.Parse(new StringReader(service.GetResult(jobID, searchParams))); // Convert blast result to BlastCollator. List <BlastResultCollator> blastResultCollator = new List <BlastResultCollator>(); foreach (BlastResult result in results) { foreach (BlastSearchRecord record in result.Records) { if (null != record.Hits && 0 < record.Hits.Count) { foreach (Hit hit in record.Hits) { if (null != hit.Hsps && 0 < hit.Hsps.Count) { foreach (Hsp hsp in hit.Hsps) { BlastResultCollator blast = new BlastResultCollator(); blast.Alignment = hsp.AlignmentLength; blast.Bit = hsp.BitScore; blast.EValue = hsp.EValue; blast.Identity = hsp.IdentitiesCount; blast.Length = hit.Length; blast.QEnd = hsp.QueryEnd; blast.QStart = hsp.QueryStart; blast.QueryId = record.IterationQueryId; blast.SEnd = hsp.HitEnd; blast.SStart = hsp.HitStart; blast.SubjectId = hit.Id; blast.Positives = hsp.PositivesCount; blast.QueryString = hsp.QuerySequence; blast.SubjectString = hsp.HitSequence; blast.Accession = hit.Accession; blast.Description = hit.Def; blastResultCollator.Add(blast); } } } } } } BlastXmlSerializer serializer = new BlastXmlSerializer(); Stream stream = serializer.SerializeBlastOutput(blastResultCollator); // set result to the output property. BlastResult = GetSerializedData(stream); return(ActivityExecutionStatus.Closed); }
public void BeginAsyncRequestTest() { status = new ServiceRequestInformation(); BlastParameters searchParams = new BlastParameters(); // fill in the BLAST settings: searchParams.Add("Command", "Put"); searchParams.Add("Program", "blastn"); searchParams.Add("Expect", "1e-10"); searchParams.Add("CompositionBasedStatistics", "0"); string badDbName = "ThisDatabaseDoesNotExist"; searchParams.Add("Database", badDbName); // test parameters string sequence = @"GACGCCGCCGCCACCACCGCCACCGCCGCAGCAGAAGCAGCGCACCGCAGGAGGGAAG" + "ATGCCGGCGGGGCACGGGCTGCGGGCGCGGACGGCGACCTCTTCGCGCGGCCGTTCCGCAAGAAGGGTTA" + "CATCCCGCTCACCACCTACCTGAGGACGTACAAGATCGGCGATTACGTNGACGTCAAGGTGAACGGTG"; searchParams.Add("Query", sequence); AutoResetEvent requestSubmitWait = new AutoResetEvent(false); AsyncWebMethodRequest input = new AsyncWebMethodRequest( new Uri("http://www.ncbi.nlm.nih.gov/blast/Blast.cgi"), CredentialCache.DefaultCredentials, searchParams.Settings, BuildQueryString(searchParams.Settings), SubmitRequestCompleted, requestSubmitWait); WebAccessor target = new WebAccessor(); target.GetBrowserProxy(); target.BeginAsyncRequest(input); WaitHandle.WaitAny(new WaitHandle[] { requestSubmitWait }); Assert.IsFalse(string.IsNullOrEmpty(requestIdentifier)); // query the status Dictionary <string, string> settings = new Dictionary <string, string>(); settings.Add("CMD", "GET"); settings.Add("RID", HttpUtility.UrlEncode(requestIdentifier)); AutoResetEvent requestStatusWait = new AutoResetEvent(false); input = new AsyncWebMethodRequest( new Uri("http://www.ncbi.nlm.nih.gov/blast/Blast.cgi"), CredentialCache.DefaultCredentials, settings, BuildQueryString(settings), RequestStatusCompleted, requestStatusWait); target.BeginAsyncRequest(input); WaitHandle.WaitAny(new WaitHandle[] { requestStatusWait }); bool ok = false; if (status.Status != ServiceRequestStatus.Waiting && status.Status != ServiceRequestStatus.Ready) { if (status.StatusInformation.Contains(badDbName) && status.StatusInformation.Contains("No alias or index file found for nucleotide database")) { ok = true; } } if (!ok) { Assert.Fail("Failed to find server error message for bad request. Info: " + status.StatusInformation); } }
/// <summary> /// Validate general http request status by /// differnt parameters for BioHPC Blast Web Service. /// <param name="nodeName">different alphabet node name</param> /// </summary> void ValidateBioHPCGeneralGetRequestStatusMethod(string nodeName, string moleculeType) { // Gets the search query parameter and their values. string alphabetName = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.AlphabetNameNode); string querySequence = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.QuerySequency); string queryDatabaseValue = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.DatabaseValue); string queryProgramValue = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.ProgramValue); string queryDatabaseParameter = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.DatabaseParameter); string queryProgramParameter = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.ProgramParameter); string email = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.EmailAdress); string expect = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.Expectparameter); string emailNotify = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.EmailNotifyParameterNode); string jobName = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.JobNameParameterNode); string expectValue = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.ExpectNode); string emailNotifyValue = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.EmailNotifyNode); string jobNameValue = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.JobNameNode); // Create a sequence. Sequence seq = new Sequence(Utility.GetAlphabet(alphabetName), querySequence); // Set Service confiruration parameters true. IBlastServiceHandler service = new BioHPCBlastHandler(); ConfigParameters configParameters = new ConfigParameters(); configParameters.EmailAddress = email; configParameters.Password = String.Empty; configParameters.UseBrowserProxy = true; service.Configuration = configParameters; // Create search parameters object. BlastParameters queryParams = new BlastParameters(); // Add mandatory parameter values to search query parameters. queryParams.Add(queryDatabaseParameter, queryDatabaseValue); queryParams.Add(queryProgramParameter, queryProgramValue); queryParams.Add(expect, expectValue); queryParams.Add(emailNotify, emailNotifyValue); queryParams.Add(jobName, jobNameValue); // Create a request // Waiting for the any previous request to get completed. Thread.Sleep(150000); string reqId = service.SubmitRequest(seq, queryParams); // validate request identifier. Assert.IsNotNull(reqId); // submit request identifier and get the status ServiceRequestInformation reqInfo = service.GetRequestStatus(reqId); // Validate job status. if (reqInfo.Status != ServiceRequestStatus.Waiting && reqInfo.Status != ServiceRequestStatus.Ready && reqInfo.Status != ServiceRequestStatus.Queued) { string error = ApplicationLog.WriteLine(string.Concat( "Unexpected error ", reqInfo.Status)); Assert.Fail(error); Console.WriteLine(string.Concat( "Unexpected error ", reqInfo.Status)); } else { Console.WriteLine(string.Concat( "Request status ", reqInfo.Status)); } }
/// <summary> /// Validate general http request status by /// differnt parameters for Azure web service.. /// <param name="nodeName">different alphabet node name</param> /// </summary> void ValidateGeneralGetRequestStatusMethod(string nodeName) { // Gets the search query parameter and their values. string alphabet = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.AlphabetNameNode); string querySequence = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.QuerySequency); string queryDatabaseValue = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.DatabaseValue); string queryProgramValue = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.ProgramValue); string queryDatabaseParameter = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.DatabaseParameter); string queryProgramParameter = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.ProgramParameter); string reqId = string.Empty; Sequence seq = new Sequence(Utility.GetAlphabet(alphabet), querySequence); // Set Service confiruration parameters true. IBlastServiceHandler service = new AzureBlastHandler(); ConfigParameters configParams = new ConfigParameters(); configParams.UseBrowserProxy = true; configParams.DefaultTimeout = 5; configParams.Connection = new Uri(Constants.AzureUri); service.Configuration = configParams; // Create search parameters object. BlastParameters searchParams = new BlastParameters(); // Add mandatory parameter values to search query parameters. searchParams.Add(queryProgramParameter, queryProgramValue); searchParams.Add(queryDatabaseParameter, queryDatabaseValue); // Get Request identifier from web service. reqId = service.SubmitRequest(seq, searchParams); // Get request information for first time. ServiceRequestInformation reqInfo = service.GetRequestStatus(reqId); // Validate job status. if (reqInfo.Status != ServiceRequestStatus.Waiting && reqInfo.Status != ServiceRequestStatus.Ready && reqInfo.Status != ServiceRequestStatus.Queued) { string error = ApplicationLog.WriteLine(string.Concat( "Unexpected error", reqInfo.Status)); Assert.Fail(error); Console.WriteLine(string.Concat( "Azure Blast BVT: Unexpected error ", reqInfo.Status)); } else { Console.WriteLine(string.Format((IFormatProvider)null, "Azure Blast BVT: Client Request status has been validated successfully.")); Console.WriteLine(string.Concat( "Azure Blast BVT: Request status ", reqInfo.Status)); } }
/// <summary> /// Validate Fetch results Asynchronous. /// </summary> /// <param name="blastParameters">Ebi blast service config parameters</param> /// <returns></returns> private TestCaseOutput FetchResultsSync(Dictionary <string, object> blastParameters) { // Get the input query string string sequenceString = blastParameters[Constants.QuerySeqString] as string; string alphabetName = blastParameters[Constants.AlphabetString] as string; Sequence sequence = new Sequence(Utility.GetAlphabet(alphabetName), sequenceString); // create Ebi Blast service object. IBlastServiceHandler service = null; IList <BlastResult> syncBlastResults = null; try { service = new EbiWuBlastHandler(); ConfigParameters configParams = new ConfigParameters(); configParams.UseBrowserProxy = true; service.Configuration = configParams; BlastParameters blastSearchPams = blastParameters[Constants.BlastParmsConst] as BlastParameters; // Create a request without passing sequence. string reqId = service.SubmitRequest(sequence, blastSearchPams); // validate request identifier. Assert.IsNotNull(reqId); // query the status ServiceRequestInformation info = service.GetRequestStatus(reqId); if (info.Status != ServiceRequestStatus.Waiting && info.Status != ServiceRequestStatus.Ready) { string err = ApplicationLog.WriteLine("Unexpected status: '{0}'", info.Status); Assert.Fail(err); } // get async results, poll until ready int maxAttempts = 3; int attempt = 1; while (attempt <= maxAttempts && info.Status != ServiceRequestStatus.Error && info.Status != ServiceRequestStatus.Ready) { info = service.GetRequestStatus(reqId); Thread.Sleep(info.Status == ServiceRequestStatus.Waiting || info.Status == ServiceRequestStatus.Queued ? 20000 * attempt : 0); ++attempt; } syncBlastResults = service.FetchResultsSync(reqId, blastSearchPams) as List <BlastResult>; } finally { if (service != null) { ((IDisposable)service).Dispose(); } } return(new TestCaseOutput(syncBlastResults, false)); }
/// <summary> /// Validate general http request status by /// differnt parameters for Ebi web service.. /// <param name="nodeName">different alphabet node name</param> /// </summary> void ValidateEbiGeneralGetRequestStatusMethod(string nodeName, string alphabet) { // Gets the search query parameter and their values. string alphabetName = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.AlphabetNameNode); string querySequence = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.QuerySequency); string queryDatabaseValue = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.DatabaseValue); string queryProgramValue = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.ProgramValue); string queryDatabaseParameter = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.DatabaseParameter); string queryProgramParameter = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.ProgramParameter); string emailParameter = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.Emailparameter); string email = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.EmailAdress); // Set Blast Parameters BlastParameters queryParams = new BlastParameters(); queryParams.Add(queryDatabaseParameter, queryDatabaseValue); queryParams.Add(queryProgramParameter, queryProgramValue); queryParams.Add(emailParameter, email); Dictionary <string, object> testCaseParms = new Dictionary <string, object>(); testCaseParms.Add(Constants.BlastParmsConst, queryParams); testCaseParms.Add(Constants.QuerySeqString, querySequence); testCaseParms.Add(Constants.AlphabetString, alphabetName); TestCaseParameters parameters = null; object resultsObject = null; if (alphabet == "Protein") { parameters = parameters = new TestCaseParameters(Constants.EbiGetRequestStatusInfoForProteinSeqTest, null, GetRequestStatusTest, testCaseParms); resultsObject = _TestCaseSimulator.Simulate(parameters).Result; } else { parameters = parameters = new TestCaseParameters( Constants.EbiGetRequestStatusInfoForDnaSeqNode, null, GetRequestStatusTest, testCaseParms); resultsObject = _TestCaseSimulator.Simulate(parameters).Result; } // submit request identifier and get the status ServiceRequestInformation reqInfo = resultsObject as ServiceRequestInformation; // Validate job status. if (reqInfo.Status != ServiceRequestStatus.Waiting && reqInfo.Status != ServiceRequestStatus.Ready) { string error = ApplicationLog.WriteLine(string.Format( null, "Unexpected error", reqInfo.Status)); Assert.Fail(error); Console.WriteLine(string.Format((IFormatProvider)null, "Unexpected error", reqInfo.Status)); } else { Console.WriteLine(string.Format((IFormatProvider)null, "Request status {0} ", reqInfo.Status)); } }
/// <summary> /// Validate general http request status by /// differnt parameters for BioHPC Blast Web Service. /// <param name="nodeName">different alphabet node name</param> /// </summary> void ValidateBioHPCGeneralGetRequestStatusMethod(string nodeName, string moleculeType) { // Gets the search query parameter and their values. string alphabetName = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.AlphabetNameNode); string querySequence = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.QuerySequency); string queryDatabaseValue = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.DatabaseValue); string queryProgramValue = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.ProgramValue); string queryDatabaseParameter = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.DatabaseParameter); string queryProgramParameter = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.ProgramParameter); string email = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.EmailAdress); string expect = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.Expectparameter); string emailNotify = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.EmailNotifyParameterNode); string jobName = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.JobNameParameterNode); string expectValue = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.ExpectNode); string emailNotifyValue = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.EmailNotifyNode); string jobNameValue = _utilityObj._xmlUtil.GetTextValue( nodeName, Constants.JobNameNode); // Set Blast Parameters BlastParameters queryParams = new BlastParameters(); // Add mandatory parameter values to search query parameters. queryParams.Add(queryDatabaseParameter, queryDatabaseValue); queryParams.Add(queryProgramParameter, queryProgramValue); queryParams.Add(expect, expectValue); queryParams.Add(emailNotify, emailNotifyValue); queryParams.Add(jobName, jobNameValue); Dictionary <string, object> testCaseParms = new Dictionary <string, object>(); testCaseParms.Add(Constants.BlastParmsConst, queryParams); testCaseParms.Add(Constants.QuerySeqString, querySequence); testCaseParms.Add(Constants.AlphabetString, alphabetName); testCaseParms.Add(Constants.EmailString, email); TestCaseParameters parameters = null; object resultsObject = null; if ("Dna" == moleculeType) { parameters = new TestCaseParameters( Constants.BioHPCGetRequestStatusInfoForDnaSeqTest, null, GetRequestStatus, testCaseParms); resultsObject = _TestCaseSimulator.Simulate(parameters).Result; } else { parameters = new TestCaseParameters( Constants.BioHPCGetRequestStatusInfoForProteinSeqTest, null, GetRequestStatus, testCaseParms); resultsObject = _TestCaseSimulator.Simulate(parameters).Result; } // Get service request status information. ServiceRequestInformation reqInfo = resultsObject as ServiceRequestInformation; // Validate job status. if (reqInfo.Status != ServiceRequestStatus.Waiting && reqInfo.Status != ServiceRequestStatus.Ready && reqInfo.Status != ServiceRequestStatus.Queued) { string error = ApplicationLog.WriteLine(string.Concat( "Unexpected error ", reqInfo.Status)); Assert.Fail(error); Console.WriteLine(string.Concat( "Unexpected error ", reqInfo.Status)); } else { Console.WriteLine(string.Concat( "Request status ", reqInfo.Status)); } }
public void EBIWuBlastResultsWithQueryParams() { // Gets the search query parameter and their values. string alphabetName = Utility._xmlUtil.GetTextValue( Constants.EbiAsynchronousResultsNode, Constants.AlphabetNameNode); string querySequence = Utility._xmlUtil.GetTextValue( Constants.EbiAsynchronousResultsNode, Constants.QuerySequency); string queryDatabaseValue = Utility._xmlUtil.GetTextValue( Constants.EbiAsynchronousResultsNode, Constants.DatabaseValue); string emailParameter = Utility._xmlUtil.GetTextValue( Constants.EbiAsynchronousResultsNode, Constants.Emailparameter); string email = Utility._xmlUtil.GetTextValue( Constants.EbiAsynchronousResultsNode, Constants.EmailAdress); string queryProgramValue = Utility._xmlUtil.GetTextValue( Constants.EbiAsynchronousResultsNode, Constants.ProgramValue); string queryDatabaseParameter = Utility._xmlUtil.GetTextValue( Constants.EbiAsynchronousResultsNode, Constants.DatabaseParameter); string queryProgramParameter = Utility._xmlUtil.GetTextValue( Constants.EbiAsynchronousResultsNode, Constants.ProgramParameter); string expectedHitId = Utility._xmlUtil.GetTextValue( Constants.EbiAsynchronousResultsNode, Constants.HitID); string expectedAccession = Utility._xmlUtil.GetTextValue( Constants.EbiAsynchronousResultsNode, Constants.HitAccession); string expectedResultCount = Utility._xmlUtil.GetTextValue( Constants.EbiAsynchronousResultsNode, Constants.ResultsCount); string expectedHitsCount = Utility._xmlUtil.GetTextValue( Constants.EbiAsynchronousResultsNode, Constants.HitsCount); string expectedEntropyStatistics = Utility._xmlUtil.GetTextValue( Constants.EbiAsynchronousResultsNode, Constants.EntropyStatistics); string expectedKappaStatistics = Utility._xmlUtil.GetTextValue( Constants.EbiAsynchronousResultsNode, Constants.KappaStatistics); string expectedLambdaStatistics = Utility._xmlUtil.GetTextValue( Constants.EbiAsynchronousResultsNode, Constants.LambdaStatistics); string expectedLength = Utility._xmlUtil.GetTextValue( Constants.EbiAsynchronousResultsNode, Constants.Length); object responseResults = null; Sequence seq = new Sequence(Utility.GetAlphabet(alphabetName), querySequence); // create Ebi Blast service object. IBlastServiceHandler service = new EbiWuBlastHandler(); ConfigParameters configParams = new ConfigParameters(); configParams.UseBrowserProxy = true; service.Configuration = configParams; BlastParameters searchParams = new BlastParameters(); // Set Request parameters. searchParams.Add(queryDatabaseParameter, queryDatabaseValue); searchParams.Add(queryProgramParameter, queryProgramValue); searchParams.Add(emailParameter, email); // Create a request without passing sequence. string reqId = service.SubmitRequest(seq, searchParams); // validate request identifier. Assert.IsNotNull(reqId); // query the status ServiceRequestInformation info = service.GetRequestStatus(reqId); if (info.Status != ServiceRequestStatus.Waiting && info.Status != ServiceRequestStatus.Ready) { string err = ApplicationLog.WriteLine("Unexpected status: '{0}'", info.Status); Assert.Fail(err); } // get async results, poll until ready int maxAttempts = 15; int attempt = 1; while (attempt <= maxAttempts && info.Status != ServiceRequestStatus.Error && info.Status != ServiceRequestStatus.Ready) { Thread.Sleep( info.Status == ServiceRequestStatus.Waiting ? 20000 : 0); info = service.GetRequestStatus(reqId); ++attempt; } IBlastParser blastXmlParser = new BlastXmlParser(); responseResults = blastXmlParser.Parse( new StringReader(service.GetResult(reqId, searchParams))); // Validate blast results. Assert.IsNotNull(responseResults); List <BlastResult> eBlastResults = responseResults as List <BlastResult>; Assert.IsNotNull(eBlastResults); Assert.AreEqual(eBlastResults.Count.ToString( (IFormatProvider)null), expectedResultCount); Assert.AreEqual(eBlastResults[0].Records.Count.ToString(( IFormatProvider)null), expectedResultCount); BlastSearchRecord record = eBlastResults[0].Records[0]; Assert.AreEqual(record.Statistics.Kappa.ToString( (IFormatProvider)null), expectedKappaStatistics); Assert.AreEqual(record.Statistics.Lambda.ToString( (IFormatProvider)null), expectedLambdaStatistics); Assert.AreEqual(record.Statistics.Entropy.ToString( (IFormatProvider)null), expectedEntropyStatistics); Assert.AreEqual(record.Hits.Count.ToString( (IFormatProvider)null), expectedHitsCount); Hit hit = record.Hits[0]; Assert.AreEqual(hit.Accession, expectedAccession); Assert.AreEqual(hit.Length.ToString(), expectedLength); Assert.AreEqual(hit.Id.ToString((IFormatProvider)null), expectedHitId); Assert.AreEqual(hit.Hsps.Count.ToString((IFormatProvider)null), expectedResultCount); Console.WriteLine(string.Format(null, "Ebi Blast BVT: Hits count '{0}'.", eBlastResults.Count)); Console.WriteLine(string.Format(null, "Ebi Blast BVT: Accession '{0}'.", hit.Accession)); Console.WriteLine(string.Format(null, "Ebi Blast BVT: Hit Id '{0}'.", hit.Id)); Console.WriteLine(string.Format(null, "Ebi Blast BVT: Hits Count '{0}'.", hit.Hsps.Count)); Console.WriteLine(string.Format(null, "Ebi Blast BVT: Hits Length '{0}'.", hit.Length)); }
/// <summary> /// Validates general Add method test cases with the xml node name specified. /// </summary> /// <param name="nodeName">xml node name.</param> /// <param name="isSyncFetch">True for Synchronous fetch</param> void GeneralMethodToValidateResults(string nodeName, bool isSyncFetch) { // Gets the search query parameter and their values. string alphabet = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.AlphabetNameNode); string querySequence = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.QuerySequency); string queryDatabaseValue = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.DatabaseValue); string queryProgramValue = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.ProgramValue); string queryDatabaseParameter = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.DatabaseParameter); string queryProgramParameter = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.ProgramParameter); string expectedHitId = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.HitID); string expectedAccession = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.HitAccession); string expectedResultCount = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.ResultsCount); string expectedHitsCount = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.HitsCount); string expectedEntropyStatistics = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.EntropyStatistics); string expectedKappaStatistics = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.KappaStatistics); string expectedLambdaStatistics = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.LambdaStatistics); string expectedHspHitsCount = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.HspHitsCount); string expectedSleepTime = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.SleepTime); string reqId = string.Empty; object responseResults = null; int maxAttempts = 20; int attempt = 1; Sequence seq = new Sequence(Utility.GetAlphabet(alphabet), querySequence); // Set Service confiruration parameters true. IBlastServiceHandler service = new AzureBlastHandler(); ConfigParameters configParams = new ConfigParameters(); configParams.UseBrowserProxy = true; configParams.DefaultTimeout = 5; configParams.Connection = new Uri(Constants.AzureUri); service.Configuration = configParams; // Create search parameters object. BlastParameters searchParams = new BlastParameters(); // Add mandatory parameter values to search query parameters. searchParams.Add(queryProgramParameter, queryProgramValue); searchParams.Add(queryDatabaseParameter, queryDatabaseValue); // Get Request identifier from web service. reqId = service.SubmitRequest(seq, searchParams); // Get request information for first time. ServiceRequestInformation info = service.GetRequestStatus(reqId); // Ping service until request staus is ready. while (attempt <= maxAttempts && info.Status != ServiceRequestStatus.Ready && info.Status != ServiceRequestStatus.Error) { System.Threading.Thread.Sleep(Convert.ToInt32(expectedSleepTime, (IFormatProvider)null)); ++attempt; info = service.GetRequestStatus(reqId); } // Get results. if (isSyncFetch) { responseResults = service.FetchResultsSync(reqId, searchParams); } else { responseResults = service.GetResult(reqId, searchParams); } Assert.IsNotNull(responseResults); if (!isSyncFetch) { //Parse and validate results BlastXmlParser parser = new BlastXmlParser(); IList <BlastResult> blastResults = parser.Parse(new StringReader(responseResults.ToString())); Assert.AreEqual(blastResults.Count.ToString( (IFormatProvider)null), expectedHitsCount); Assert.AreEqual(blastResults[0].Records.Count.ToString( (IFormatProvider)null), expectedHitsCount); BlastSearchRecord record = blastResults[0].Records[0]; Assert.AreEqual(record.Statistics.Kappa.ToString( (IFormatProvider)null), expectedKappaStatistics); Assert.AreEqual(record.Statistics.Lambda.ToString( (IFormatProvider)null), expectedLambdaStatistics); Assert.AreEqual(record.Statistics.Entropy.ToString( (IFormatProvider)null), expectedEntropyStatistics); Assert.AreEqual(record.Hits.Count.ToString( (IFormatProvider)null), expectedResultCount); Hit hit = record.Hits[0]; Assert.AreEqual(hit.Accession, expectedAccession); Assert.AreEqual(hit.Id.ToString((IFormatProvider)null), expectedHitId); Assert.AreEqual(hit.Hsps.Count.ToString((IFormatProvider)null), expectedHspHitsCount); ApplicationLog.WriteLine(string.Format((IFormatProvider)null, "Azure Blast BVT: Hits Count '{0}'.", hit.Hsps.Count)); ApplicationLog.WriteLine(string.Format((IFormatProvider)null, "Azure Blast BVT: Hits Count '{0}'.", hit.Hsps.Count)); ApplicationLog.WriteLine(string.Format((IFormatProvider)null, "Azure Blast BVT: Hits count '{0}'.", blastResults.Count)); ApplicationLog.WriteLine(string.Format((IFormatProvider)null, "Azure Blast BVT: Accession '{0}'.", hit.Accession)); } }
/// <summary> /// Validate if the connection is successful /// </summary> /// <returns>True, if connection is successful</returns> static bool ValidateWebServiceConnection() { // Gets the search query parameter and their values. string alphabet = Utility._xmlUtil.GetTextValue( Constants.AzureBlastResultsNode, Constants.AlphabetNameNode); string querySequence = Utility._xmlUtil.GetTextValue( Constants.AzureBlastResultsNode, Constants.QuerySequency); string queryDatabaseValue = Utility._xmlUtil.GetTextValue( Constants.AzureBlastResultsNode, Constants.DatabaseValue); string queryProgramValue = Utility._xmlUtil.GetTextValue( Constants.AzureBlastResultsNode, Constants.ProgramValue); string queryDatabaseParameter = Utility._xmlUtil.GetTextValue( Constants.AzureBlastResultsNode, Constants.DatabaseParameter); string queryProgramParameter = Utility._xmlUtil.GetTextValue( Constants.AzureBlastResultsNode, Constants.ProgramParameter); string expectedSleepTime = Utility._xmlUtil.GetTextValue( Constants.AzureBlastResultsNode, Constants.SleepTime); string reqId = string.Empty; object responseResults = null; int maxAttempts = 20; int attempt = 1; Sequence seq = new Sequence(Utility.GetAlphabet(alphabet), querySequence); // Set Service confiruration parameters true. IBlastServiceHandler service = new AzureBlastHandler(); ConfigParameters configParams = new ConfigParameters(); configParams.UseBrowserProxy = true; configParams.DefaultTimeout = 5; configParams.Connection = new Uri(Constants.AzureUri); service.Configuration = configParams; // Create search parameters object. BlastParameters searchParams = new BlastParameters(); // Add mandatory parameter values to search query parameters. searchParams.Add(queryProgramParameter, queryProgramValue); searchParams.Add(queryDatabaseParameter, queryDatabaseValue); try { // Get Request identifier from web service. reqId = service.SubmitRequest(seq, searchParams); // Get request information for first time. ServiceRequestInformation info = service.GetRequestStatus(reqId); // Ping service until request staus is ready. while (attempt <= maxAttempts && info.Status != ServiceRequestStatus.Ready && info.Status != ServiceRequestStatus.Error) { System.Threading.Thread.Sleep(Convert.ToInt32(expectedSleepTime)); ++attempt; info = service.GetRequestStatus(reqId); } responseResults = service.GetResult(reqId, searchParams); if (null == responseResults) { Console.WriteLine( "Azure BVT : Connection not successful with no Response result"); ApplicationLog.WriteLine( "Azure BVT : Connection not successful with no Response result"); return(false); } } catch (Exception ex) { Console.WriteLine(string.Format( "Azure BVT : Connection not successful with error '{0}'", ex.Message)); ApplicationLog.WriteLine(string.Format( "Azure BVT : Connection not successful with error '{0}'", ex.Message)); return(false); } Console.WriteLine("Azure BVT : Connection Successful"); return(true); }