protected void CompareLists(IEnumerable <FindPTZPositionResult> list1,
                                    IEnumerable <FindPTZPositionResult> list2,
                                    string descr1, string descr2)
        {
            bool          ok   = true;
            StringBuilder dump = new StringBuilder();

            Dictionary <FindPTZPositionResult, FindPTZPositionResult> intersection = new Dictionary <FindPTZPositionResult, FindPTZPositionResult>();

            Func <FindPTZPositionResult, string> getDescription =
                new Func <FindPTZPositionResult, string>(
                    (info) =>
            {
                return(string.Format("Result with Time={0}, RecordingToken='{1}', TrackToken='{2}'", info.Time, info.RecordingToken, info.TrackToken));
            });


            // check results in list1, find results that are not in list2,
            // find results that are in both lists (intersection)

            foreach (FindPTZPositionResult result1 in list1)
            {
                string descr = getDescription(result1);

                FindPTZPositionResult result2 = list2.FirstOrDefault(R => AreTheSame(result1, R));

                if (result2 == null)
                {
                    ok = false;
                    dump.AppendFormat("{0} not found in {1}{2}",
                                      descr, descr2, Environment.NewLine);
                }
                else
                {
                    intersection.Add(result1, result2);
                }
            }

            // check results in list2, find results that are not in list1

            foreach (FindPTZPositionResult result2 in list2)
            {
                string descr = getDescription(result2);

                FindPTZPositionResult result1 = list1.FirstOrDefault(R => AreTheSame(result2, R));

                if (result1 == null)
                {
                    ok = false;
                    dump.AppendFormat("{0} not found in {1}{2}",
                                      descr, descr1, Environment.NewLine);
                }
            }

            // compare results in intersection is impossible now.
            // It seems that there are no field which could be compared.
            // Time, RecordingToken, TrackToken, Position are keys...

            Assert(ok, dump.ToStringTrimNewLine(), "Check that PTZ positions lists are the same");
        }
示例#2
0
        void GeneratePtzPositions()
        {
            _ptzPositions = new List <FindPTZPositionResult>();

            {
                FindPTZPositionResult result = new FindPTZPositionResult();
                result.RecordingToken     = Recordings[0].RecordingToken;
                result.TrackToken         = Recordings[0].Track[0].TrackToken;
                result.Time               = Recordings[0].EarliestRecording.AddMinutes(10);
                result.Position           = new PTZVector();
                result.Position.PanTilt   = new Vector2D();
                result.Position.PanTilt.x = 0;
                result.Position.PanTilt.y = 1;
                _ptzPositions.Add(result);
            }

            {
                FindPTZPositionResult result = new FindPTZPositionResult();
                result.RecordingToken     = Recordings[0].RecordingToken;
                result.TrackToken         = Recordings[0].Track[0].TrackToken;
                result.Time               = Recordings[0].EarliestRecording.AddMinutes(12);
                result.Position           = new PTZVector();
                result.Position.PanTilt   = new Vector2D();
                result.Position.PanTilt.x = 0.5F;
                result.Position.PanTilt.y = 0.5F;
                _ptzPositions.Add(result);
            }
        }
        bool AreTheSame(FindPTZPositionResult result1, FindPTZPositionResult result2)
        {
            bool equal = result1.Time == result2.Time &&
                         result1.RecordingToken == result2.RecordingToken &&
                         result1.TrackToken == result2.TrackToken;

            if (equal)
            {
                // ToDo : How to compare PTZ positions ?
                // (is it possible that they will be returned for different space ? )

                bool positionsEqual = true;

                if (result1.Position != null && result2.Position != null)
                {
                    Vector2D panTilt1 = result1.Position.PanTilt;
                    Vector2D panTilt2 = result2.Position.PanTilt;
                    if (panTilt1 != null && panTilt2 != null)
                    {
                        positionsEqual = panTilt1.space == panTilt2.space &&
                                         panTilt1.x == panTilt2.x &&
                                         panTilt1.y == panTilt2.y;
                    }
                    else
                    {
                        if (panTilt1 != null || panTilt2 != null)
                        {
                            positionsEqual = false;
                        }
                    }

                    if (positionsEqual)
                    {
                        Vector1D zoom1 = result1.Position.Zoom;
                        Vector1D zoom2 = result2.Position.Zoom;
                        if (zoom1 != null && zoom2 != null)
                        {
                            positionsEqual = zoom1.space == zoom2.space &&
                                             zoom1.x == zoom2.x;
                        }
                        else
                        {
                            if (zoom1 != null || zoom2 != null)
                            {
                                positionsEqual = false;
                            }
                        }
                    }
                }
                else
                {
                    if (result1.Position != null || result2.Position != null)
                    {
                        positionsEqual = false;
                    }
                    // else both null - OK
                }

                equal = positionsEqual;
            }

            return(equal);
        }
示例#4
0
        public void PTZSearchForCertainPositionTest()
        {
            string      searchToken   = string.Empty;
            SearchState state         = SearchState.Completed;
            int         testKeepAlive = _searchKeepAlive;

            RunTest(
                () =>
            {
                string keepAlive = string.Format("PT{0}S", testKeepAlive);

                RecordingInformation recording = FindRecordingForTest();

                SearchRange range = DefineSearchRange(recording);

                System.DateTime start = range.Start;
                System.DateTime end   = range.End;

                PTZPositionFilter filter   = new PTZPositionFilter();
                filter.MinPosition         = new PTZVector();
                filter.MinPosition.PanTilt = new Vector2D()
                {
                    x = -1, y = -1
                };
                filter.MaxPosition         = new PTZVector();
                filter.MaxPosition.PanTilt = new Vector2D()
                {
                    x = 1, y = 1
                };

                SearchScope scope        = new SearchScope();
                scope.IncludedRecordings = new string[] { recording.RecordingToken };

                List <FindPTZPositionResult> results = new List <FindPTZPositionResult>();

                state       = SearchState.Completed;
                searchToken = FindPTZPosition(end, start, scope, filter, null, keepAlive);

                results = GetAllPtzSearchResults(searchToken, filter, 1, null, "PT5S", out state);

                Assert(results != null && results.Count > 0, "No PTZ positions found",
                       "Check that PTZ positions list is not empty");

                /// check that results belong to specified recording?
                ValidatePTZPositionResults(results, recording, start, end);

                FindPTZPositionResult result = results.FirstOrDefault(R => R.Position != null);

                Assert(result != null, "No search results with PTZ position returned", "Select PTZ position for test");

                filter.MinPosition = result.Position;
                filter.MaxPosition = result.Position;
                filter.EnterOrExit = false;

                state       = SearchState.Completed;
                searchToken = FindPTZPosition(end, start, scope, filter, null, keepAlive, "Find specified PTZ position");

                results = GetAllPtzSearchResults(searchToken, filter, 1, null, "PT5S", out state);

                Assert(results != null && results.Count > 0, "No PTZ positions found",
                       "Check that PTZ positions list is not empty");

                /// check that results belong to specified recording?
                ValidatePTZPositionResults(results, recording, start, end);

                bool ok          = true;
                StringBuilder sb = new StringBuilder();
                foreach (FindPTZPositionResult r in results)
                {
                    // compare positions - ?
                    if (r.Position == null)
                    {
                        ok = false;
                        sb.AppendLine(
                            string.Format("Result for {0} contains no PTZ position",
                                          r.Time.StdDateTimeToString()));
                    }
                    else
                    {
                        if (r.Position.PanTilt == null)
                        {
                            ok = false;
                            sb.AppendLine(
                                string.Format("Result for {0} contains no PanTilt in PTZ position",
                                              r.Time.StdDateTimeToString()));
                        }
                        else
                        {
                            ok = (r.Position.PanTilt.x == result.Position.PanTilt.x &&
                                  r.Position.PanTilt.y == result.Position.PanTilt.y &&
                                  r.Position.PanTilt.space == result.Position.PanTilt.space);
                            if (!ok)
                            {
                                sb.AppendLine(
                                    string.Format("Position in result for {0} is not as expected: PanTilt.x={1}, PanTilt.y={2}, PanTilt.space='{3}'",
                                                  r.Time.StdDateTimeToString(), r.Position.PanTilt.x, r.Position.PanTilt.y, r.Position.PanTilt.space));
                            }
                        }
                    }
                }

                Assert(ok, sb.ToStringTrimNewLine(), "Check PTZ Positions returned");
            },
                () =>
            {
                if (state != SearchState.Completed)
                {
                    ReleaseSearch(searchToken, testKeepAlive * 1000);
                }
            });
        }