コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
ファイル: SearchTest.cs プロジェクト: kudrinyaroslav/ON-0110
        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
ファイル: SearchTest.cs プロジェクト: kudrinyaroslav/ON-0110
        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);
        }