internal StepType GetEventSearchResultsTest(out FindEventResultList target, out SoapException ex, out int Timeout, string SearchToken, int MinResults, bool MinResultsSpecified, int MaxResults, bool MaxResultsSpecified, string WaitTime) { StepType res = StepType.None; Timeout = 0; ex = null; target = null; bool passed = true; string logMessage = ""; string tmpCommandName = "GetEventSearchResults"; int tmpCommandNumber = GetEventSearchResults; //Get step list for command XmlNodeList m_testList = TestCommon.GetStepsForCommand(ServiceName + "." + tmpCommandName); if (m_testList.Count != 0) { //Get current step XmlNode test = m_testList[CommandCount[tmpCommandNumber]]; #region Analyze request //SearchToken CommonCompare.StringCompare("RequestParameters/SearchToken", "SearchToken", SearchToken, ref logMessage, ref passed, test); //MinResults if (CommonCompare.Exist2("RequestParameters/MinResults", "MinResults", MinResultsSpecified, ref logMessage, ref passed, test)) { CommonCompare.IntCompare("RequestParameters/MinResults", "MinResults", MinResults, ref logMessage, ref passed, test); } //MaxResults if (CommonCompare.Exist2("RequestParameters/MaxResults", "MaxResults", MaxResultsSpecified, ref logMessage, ref passed, test)) { CommonCompare.IntCompare("RequestParameters/MaxResults", "MaxResults", MaxResults, ref logMessage, ref passed, test); } //WaitTime CommonCompare.StringCompare("RequestParameters/WaitTime", "WaitTime", WaitTime, ref logMessage, ref passed, test); #endregion //Analyze request //Generate response object targetObj; res = TestCommon.GenerateResponseStepTypeNotVoid(test, out targetObj, out ex, out Timeout, typeof(FindEventResultList)); target = (FindEventResultList)targetObj; //Log message TestCommon.writeToLog(test, logMessage, passed); Increment(m_testList.Count, tmpCommandNumber); } else { throw new SoapException("NO " + ServiceName + "." + tmpCommandName + " COMMAND IN SCRIPT", SoapException.ServerFaultCode); } return(res); }
public override FindEventResultList GetEventSearchResults(string SearchToken, int MinResults, bool MinResultsSpecified, int MaxResults, bool MaxResultsSpecified, string WaitTime) { EventsSearchSession session = SearchSessionManager.Instance.GetSession(SearchToken) as EventsSearchSession; if (session != null) { List <FindEventResult> data = (List <FindEventResult>)session.Data; FindEventResultList list = new FindEventResultList(); Random rnd = new Random(); int cnt = Math.Min(rnd.Next(1, 4), data.Count); rnd = new Random(); int sleep = rnd.Next(1, 3); System.Threading.Thread.Sleep(400 * sleep + 450); list.Result = new FindEventResult[cnt]; for (int i = 0; i < cnt; i++) { list.Result[i] = data[0]; data.RemoveAt(0); } session.ResultsSent = session.ResultsSent + cnt; list.SearchState = data.Count > 0 ? SearchState.Searching : SearchState.Completed; if (data.Count == 0) { SearchSessionManager.Instance.Sessions.Remove(session); } return(list); } else { CommonUtils.ReturnFault(new string[] { "Sender", "InvalidArgVal", "InvalidToken" }); return(null); } }
protected List <FindEventResult> GetAllEventsSearchResults(string searchToken, int?minResults, int?maxResults, string waitTime, Dictionary <FindEventResult, XmlElement> rawResults, out SearchState state) { List <FindEventResult> eventsList = new List <FindEventResult>(); FindEventResultList response = null; GetEventSearchResults request = new GetEventSearchResults(); request.SearchToken = searchToken; request.WaitTime = waitTime; request.MaxResultsSpecified = maxResults.HasValue; request.MaxResults = maxResults.GetValueOrDefault(); request.MinResultsSpecified = minResults.HasValue; request.MinResults = minResults.GetValueOrDefault(); string dump = string.Empty; Action <string> logAction = new Action <string>(str => { dump = str; }); _trafficListener.ResponseReceived += logAction; DateTime started = DateTime.Now; DateTime dueTo = started.AddSeconds(_searchTimeout); bool completed = true; DateTime lastResponse = DateTime.Now; LogTestEvent(string.Format("All results should be received by {0}{1}", dueTo.StdTimeToString(), Environment.NewLine)); do { RunStep(() => { response = Client.GetEventSearchResults(request).ResultList; }, "Get Events Search results"); lastResponse = DateTime.Now; var events = response.Result ?? new FindEventResult[0]; // no request delay here! var onvifEvents = events.Where(OnvifMessage.IsOnvifMessage); if (events.Count() != onvifEvents.Count()) { LogStepEvent("WARNING: there is a message from non-ONVIF namespace"); } //if (null != rawResults) { var rdr = new System.IO.StringReader(dump); string nextLine; do { nextLine = rdr.ReadLine(); } while (!string.IsNullOrEmpty(nextLine)); string rawSoapPacket = rdr.ReadToEnd(); rawSoapPacket = rawSoapPacket.Replace("\r\n", ""); var doc = new XmlDocument(); doc.LoadXml(rawSoapPacket); var messagePath = "/s:Envelope/s:Body/search:GetEventSearchResultsResponse/search:ResultList/onvif:Result/onvif:Event"; var manager = new XmlNamespaceManager(doc.NameTable); manager.AddNamespace("s", "http://www.w3.org/2003/05/soap-envelope"); manager.AddNamespace("search", "http://www.onvif.org/ver10/search/wsdl"); manager.AddNamespace("onvif", "http://www.onvif.org/ver10/schema"); manager.AddNamespace("b2", "http://docs.oasis-open.org/wsn/b-2"); XmlNodeList responseNodeList = doc.SelectNodes(messagePath, manager); for (int i = 0; i < events.Count(); i++) { var e = events[i]; if (OnvifMessage.IsOnvifMessage(e)) { eventsList.Add(e); if (null != rawResults) { rawResults.Add(e, responseNodeList[i] as XmlElement); } } } } if (lastResponse > dueTo) { completed = false; break; } } while (response.SearchState != SearchState.Completed); state = response.SearchState; _trafficListener.ResponseReceived -= logAction; Assert(completed, string.Format("Completed state has not been achieved (last response received at {0}, State: {1})", lastResponse.StdTimeToString(), response.SearchState), "Check that search has been completed in due time"); return(eventsList); }
protected List <FindEventResult> GetAllEventsSearchResults( string searchToken, int?minResults, int?maxResults, string waitTime, Dictionary <FindEventResult, XmlDocument> rawResults, out SearchState state) { List <FindEventResult> eventsList = new List <FindEventResult>(); FindEventResultList response = null; GetEventSearchResults request = new GetEventSearchResults(); request.SearchToken = searchToken; request.WaitTime = waitTime; request.MaxResultsSpecified = maxResults.HasValue; request.MaxResults = maxResults.GetValueOrDefault(); request.MinResultsSpecified = minResults.HasValue; request.MinResults = minResults.GetValueOrDefault(); string dump = string.Empty; Action <string> logAction = new Action <string>(str => { dump = str; }); _trafficListener.ResponseReceived += logAction; DateTime started = DateTime.Now; DateTime dueTo = started.AddSeconds(_searchTimeout); bool completed = true; DateTime lastResponse = DateTime.Now; LogTestEvent(string.Format("All results should be received by {0}{1}", dueTo.StdTimeToString(), Environment.NewLine)); do { RunStep(() => { response = Client.GetEventSearchResults(request).ResultList; }, "Get Events Search results"); lastResponse = DateTime.Now; // no request delay here! if (response.Result != null) { eventsList.AddRange(response.Result); if (rawResults != null) { System.IO.StringReader rdr = new System.IO.StringReader(dump); string nextLine; do { nextLine = rdr.ReadLine(); } while (!string.IsNullOrEmpty(nextLine)); string rawSoapPacket = rdr.ReadToEnd(); rawSoapPacket = rawSoapPacket.Replace("\r\n", ""); XmlDocument doc = new XmlDocument(); doc.LoadXml(rawSoapPacket); foreach (FindEventResult result in response.Result) { rawResults.Add(result, doc); } } } if (lastResponse > dueTo) { completed = false; break; } } while (response.SearchState != SearchState.Completed); state = response.SearchState; _trafficListener.ResponseReceived -= logAction; Assert(completed, string.Format("Completed state has not been achieved (last response received at {0}, State: {1})", lastResponse.StdTimeToString(), response.SearchState), "Check that search has been completed in due time"); return(eventsList); }