示例#1
0
 public void GetEventsSearchResultInvalidTokenTest()
 {
     RunTest(
         () =>
     {
         GetEventSearchResults request = new GetEventSearchResults();
         request.SearchToken           = Guid.NewGuid().ToString().Substring(0, 8);
         request.WaitTime = "PT5S";
         RunStep(
             () =>
         {
             Client.GetEventSearchResults(request);
         }, "Get events search results with invalid token",
             Definitions.Onvif.OnvifFaults.InvalidToken, true, false);
     });
 }
示例#2
0
        protected FindEventResultList GetEventSearchResults(string searchToken, int?minResults, int?maxResults, string waitTime, string stepName)
        {
            GetEventSearchResultsResponse 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();

            RunStep(
                () =>
            {
                response = Client.GetEventSearchResults(request);
            }, stepName);

            return(response.ResultList);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }