示例#1
0
        internal WitDiffResult GetDiffResult()
        {
            ServerDiffEngine diff            = new ServerDiffEngine(Guid.Empty, false, true, SessionTypeEnum.WorkItemTracking);
            WITDiffComparer  witDiffComparer = new WITDiffComparer(diff, true);

            diff.RegisterDiffComparer(witDiffComparer);

            // Add additional fields for which different values should not cause a failure because
            // the tests are configured such that these will be different
            HashSet <string> fieldsToIgnore = new HashSet <string>();

            fieldsToIgnore.Add("System.AreaPath");
            fieldsToIgnore.Add("System.IterationPath");

            bool          allContentsMatch = witDiffComparer.VerifyContentsMatch(null, null, fieldsToIgnore, fieldsToIgnore);
            WitDiffResult result           = witDiffComparer.DiffResult;

            Trace.TraceInformation("==============  Result ===================");
            Trace.TraceInformation("Work Item count: {0}", result.WorkItemCount);
            Trace.TraceInformation("#Attachments mismatch: {0}", result.AttachmentMismatchCount);
            Trace.TraceInformation("#Links mismatch: {0}", result.LinkMismatchCount);
            Trace.TraceInformation("#Content mismatch: {0}", result.ContentMismatchCount);
            Trace.TraceInformation("#Missing WorkItems: {0}", result.MissingWorkItemCount);
            Trace.TraceInformation("All contents match: {0}", allContentsMatch);

            return(result);
        }
 protected override void DoJob()
 {
     try
     {
         List <Guid> activeWitSessions = ServerDiffEngine.FindAllActiveSessionsOfType(SessionTypeEnum.WorkItemTracking);
         foreach (Guid activeWitSessionId in activeWitSessions)
         {
             ServerDiffEngine diffEngine =
                 new ServerDiffEngine(activeWitSessionId, m_noContentComparison, m_verbose, SessionTypeEnum.WorkItemTracking, true, true);
             try
             {
                 WITDiffComparer witDiffComparer = new WITDiffComparer(diffEngine);
                 diffEngine.RegisterDiffComparer(witDiffComparer);
                 if (diffEngine.VerifyContentsMatch(null, null))
                 {
                     diffEngine.LogResult(ServerDiffResources.AllContentsMatch);
                 }
                 else
                 {
                     diffEngine.LogResult(ServerDiffResources.ContentsDoNotMatch);
                 }
             }
             catch (Exception e)
             {
                 diffEngine.LogError(String.Format(CultureInfo.InvariantCulture, ServerDiffResources.ExceptionRunningServerDiff,
                                                   m_verbose ? e.ToString() : e.Message));
             }
         }
     }
     catch (MigrationSessionNotFoundException sessionNotFoundException)
     {
         TraceManager.TraceInformation(sessionNotFoundException.Message);
     }
 }
示例#3
0
        internal override WitDiffResult VerifySyncResult()
        {
            ServerDiffEngine diff            = new ServerDiffEngine(Guid.Empty, false, true, SessionTypeEnum.WorkItemTracking);
            WITDiffComparer  witDiffComparer = new WITDiffComparer(diff);

            diff.RegisterDiffComparer(witDiffComparer);

            // Add additional fields for which different values should not cause a failure because
            // the tests are configured such that these will be different
            HashSet <string> fieldsToIgnore = new HashSet <string>();

            fieldsToIgnore.Add("System.AreaPath");
            fieldsToIgnore.Add("System.IterationPath");

            bool allContentsMatch = witDiffComparer.VerifyContentsMatch(null, null, fieldsToIgnore, fieldsToIgnore);

            Assert.IsTrue(allContentsMatch);
            return(witDiffComparer.DiffResult);
        }
示例#4
0
        /// <summary>
        /// The entry point for the executable.
        /// Takes the path to a migration configuration file in from the command line and compares
        /// the history of the first VC session in that file.  Logs the differences to the standard out.
        /// </summary>
        /// <param name="args">Command line parameters</param>
        static void Main(string[] args)
        {
            bool noContentComparison = false;
            bool verbose             = false;

            if (args.Length == 0)
            {
                LogError(ServerDiffConsoleResources.ServerDiffUsage);
                Environment.Exit(1);
            }

            if (string.Equals(args[0], "vc", StringComparison.InvariantCultureIgnoreCase))
            {
                string leftVersion  = null;
                string rightVersion = null;
                Guid   sessionGuid  = Guid.Empty;

                for (int i = 1; i < args.Length; i++)
                {
                    string arg = RemoveQuotes(args[i]);
                    if ((arg.StartsWith("/s", StringComparison.InvariantCultureIgnoreCase) ||
                         (arg.StartsWith("/session", StringComparison.InvariantCultureIgnoreCase))))
                    {
                        try
                        {
                            sessionGuid = new Guid(arg.Substring(arg.IndexOf(':') + 1));
                        }
                        catch
                        {
                            LogError(String.Format(CultureInfo.InvariantCulture, ServerDiffConsoleResources.SessionArgIsNotGuid, args[0]));
                            Environment.Exit(1);
                        }
                    }
                    else if ((arg.StartsWith("/l:", StringComparison.InvariantCultureIgnoreCase) ||
                              (arg.StartsWith("/leftVersion:", StringComparison.InvariantCultureIgnoreCase))))
                    {
                        leftVersion = arg.Substring(arg.IndexOf(':') + 1);
                    }
                    else if ((arg.StartsWith("/r:", StringComparison.InvariantCultureIgnoreCase) ||
                              (arg.StartsWith("/rightVersion:", StringComparison.InvariantCultureIgnoreCase))))
                    {
                        rightVersion = arg.Substring(arg.IndexOf(':') + 1);
                    }
                    else if ((arg.Equals("/n", StringComparison.InvariantCultureIgnoreCase) ||
                              (arg.Equals("/noContentComparison ", StringComparison.InvariantCultureIgnoreCase))))
                    {
                        noContentComparison = true;
                    }
                    else if ((arg.Equals("/v", StringComparison.InvariantCultureIgnoreCase) ||
                              (arg.Equals("/verbose", StringComparison.InvariantCultureIgnoreCase))))
                    {
                        verbose = true;
                    }
                    else
                    {
                        LogError(ServerDiffConsoleResources.ServerDiffUsage);
                        Environment.Exit(1);
                    }
                }

                try
                {
                    ServerDiffEngine diffEngine     = new ServerDiffEngine(sessionGuid, noContentComparison, verbose, SessionTypeEnum.VersionControl);
                    VCDiffComparer   vcDiffComparer = new VCDiffComparer(diffEngine);
                    diffEngine.RegisterDiffComparer(vcDiffComparer);
                    if (diffEngine.VerifyContentsMatch(leftVersion, rightVersion))
                    {
                        diffEngine.LogResult(ServerDiffResources.AllContentsMatch);
                    }
                    else
                    {
                        diffEngine.LogResult(ServerDiffResources.ContentsDoNotMatch);
                    }
                }
                catch (Exception e)
                {
                    LogError(String.Format(CultureInfo.InvariantCulture, ServerDiffResources.ExceptionRunningServerDiff,
                                           verbose ? e.ToString() : e.Message));
                }
            }
            else if (string.Equals(args[0], "wit", StringComparison.InvariantCultureIgnoreCase))
            {
                string           forceSyncFile           = null;
                string           leftQueryCondition      = null;
                string           rightQueryCondition     = null;
                HashSet <string> leftFieldNamesToIgnore  = new HashSet <string>();
                HashSet <string> rightFieldNamesToIgnore = new HashSet <string>();
                Guid             sessionGuid             = Guid.Empty;

                for (int i = 1; i < args.Length; i++)
                {
                    string arg = RemoveQuotes(args[i]);
                    if ((arg.StartsWith("/s", StringComparison.InvariantCultureIgnoreCase) ||
                         (arg.StartsWith("/session", StringComparison.InvariantCultureIgnoreCase))))
                    {
                        try
                        {
                            sessionGuid = new Guid(arg.Substring(arg.IndexOf(':') + 1));
                        }
                        catch
                        {
                            LogError(String.Format(CultureInfo.InvariantCulture, ServerDiffConsoleResources.SessionArgIsNotGuid, args[0]));
                            Environment.Exit(1);
                        }
                    }
                    else if ((arg.StartsWith("/f:", StringComparison.InvariantCultureIgnoreCase) ||
                              (arg.StartsWith("/ForceSyncFile:", StringComparison.InvariantCultureIgnoreCase))))
                    {
                        forceSyncFile = arg.Substring(arg.IndexOf(':') + 1);
                        if (!forceSyncFile.EndsWith(".csv", StringComparison.OrdinalIgnoreCase))
                        {
                            LogError(ServerDiffConsoleResources.ForceSyncFileRequiresCsvExtension);
                            Environment.Exit(1);
                        }
                    }
                    else if ((arg.StartsWith("/l:", StringComparison.InvariantCultureIgnoreCase) ||
                              (arg.StartsWith("/leftQueryCondition:", StringComparison.InvariantCultureIgnoreCase))))
                    {
                        leftQueryCondition = arg.Substring(arg.IndexOf(':') + 1);
                    }
                    else if ((arg.StartsWith("/r:", StringComparison.InvariantCultureIgnoreCase) ||
                              (arg.StartsWith("/rightQueryCondition:", StringComparison.InvariantCultureIgnoreCase))))
                    {
                        rightQueryCondition = arg.Substring(arg.IndexOf(':') + 1);
                    }

                    else if ((arg.StartsWith("/il:", StringComparison.InvariantCultureIgnoreCase) ||
                              (arg.StartsWith("/IgnoreLeftFields:", StringComparison.InvariantCultureIgnoreCase))))
                    {
                        string [] leftFieldNames = arg.Substring(arg.IndexOf(':') + 1).Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                        foreach (string fieldName in leftFieldNames)
                        {
                            leftFieldNamesToIgnore.Add(fieldName.Trim());
                        }
                    }
                    else if ((arg.StartsWith("/ir:", StringComparison.InvariantCultureIgnoreCase) ||
                              (arg.StartsWith("/IgnoreRightFields:", StringComparison.InvariantCultureIgnoreCase))))
                    {
                        string[] rightFieldNames = arg.Substring(arg.IndexOf(':') + 1).Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                        foreach (string fieldName in rightFieldNames)
                        {
                            rightFieldNamesToIgnore.Add(fieldName.Trim());
                        }
                    }
                    else if ((arg.Equals("/n", StringComparison.InvariantCultureIgnoreCase) ||
                              (arg.Equals("/noContentComparison ", StringComparison.InvariantCultureIgnoreCase))))
                    {
                        noContentComparison = true;
                    }
                    else if ((arg.Equals("/v", StringComparison.InvariantCultureIgnoreCase) ||
                              (arg.Equals("/verbose", StringComparison.InvariantCultureIgnoreCase))))
                    {
                        verbose = true;
                    }
                    else
                    {
                        LogError(ServerDiffConsoleResources.ServerDiffUsage);
                        Environment.Exit(1);
                    }
                }

                try
                {
                    ServerDiffEngine diffEngine =
                        new ServerDiffEngine(sessionGuid, noContentComparison, verbose, SessionTypeEnum.WorkItemTracking);
                    WITDiffComparer witDiffComparer = new WITDiffComparer(diffEngine);
                    witDiffComparer.ForceSyncFile           = forceSyncFile;
                    witDiffComparer.LeftFieldNamesToIgnore  = leftFieldNamesToIgnore;
                    witDiffComparer.RightFieldNamesToIgnore = rightFieldNamesToIgnore;
                    diffEngine.RegisterDiffComparer(witDiffComparer);
                    if (diffEngine.VerifyContentsMatch(leftQueryCondition, rightQueryCondition))
                    {
                        diffEngine.LogResult(ServerDiffResources.AllContentsMatch);
                    }
                    else
                    {
                        diffEngine.LogResult(ServerDiffResources.ContentsDoNotMatch);
                    }
                }
                catch (Exception e)
                {
                    LogError(String.Format(CultureInfo.InvariantCulture, ServerDiffResources.ExceptionRunningServerDiff,
                                           verbose ? e.ToString() : e.Message));
                }
            }
            else
            {
                LogError(ServerDiffConsoleResources.ServerDiffUsage);
                Environment.Exit(1);
            }
        }
示例#5
0
        /// <summary>
        /// The entry point for the executable.
        /// Takes the path to a migration configuration file in from the command line and compares
        /// the history of the first VC session in that file.  Logs the differences to the standard out.
        /// </summary>
        /// <param name="args">Command line parameters</param>
        static void Main(string[] args)
        {
            bool noContentComparison = false;
            bool verbose             = false;

            if (args.Length == 0)
            {
                LogError(ServerDiffConsoleResources.ServerDiffUsage);
                Environment.Exit(1);
            }

            if (string.Equals(args[0], "vc", StringComparison.InvariantCultureIgnoreCase))
            {
                string leftVersion  = null;
                string rightVersion = null;
                Guid   sessionGuid  = Guid.Empty;

                for (int i = 1; i < args.Length; i++)
                {
                    string arg = RemoveQuotes(args[i]);
                    if ((arg.StartsWith("/s", StringComparison.InvariantCultureIgnoreCase) ||
                         (arg.StartsWith("/session", StringComparison.InvariantCultureIgnoreCase))))
                    {
                        try
                        {
                            sessionGuid = new Guid(arg.Substring(arg.IndexOf(':') + 1));
                        }
                        catch
                        {
                            LogError(String.Format(CultureInfo.InvariantCulture, ServerDiffConsoleResources.SessionArgIsNotGuid, args[0]));
                            Environment.Exit(1);
                        }
                    }
                    else if ((arg.StartsWith("/l:", StringComparison.InvariantCultureIgnoreCase) ||
                              (arg.StartsWith("/leftVersion:", StringComparison.InvariantCultureIgnoreCase))))
                    {
                        leftVersion = arg.Substring(arg.IndexOf(':') + 1);
                    }
                    else if ((arg.StartsWith("/r:", StringComparison.InvariantCultureIgnoreCase) ||
                              (arg.StartsWith("/rightVersion:", StringComparison.InvariantCultureIgnoreCase))))
                    {
                        rightVersion = arg.Substring(arg.IndexOf(':') + 1);
                    }
                    else if ((arg.Equals("/n", StringComparison.InvariantCultureIgnoreCase) ||
                              (arg.Equals("/noContentComparison ", StringComparison.InvariantCultureIgnoreCase))))
                    {
                        noContentComparison = true;
                    }
                    else if ((arg.Equals("/v", StringComparison.InvariantCultureIgnoreCase) ||
                              (arg.Equals("/verbose", StringComparison.InvariantCultureIgnoreCase))))
                    {
                        verbose = true;
                    }
                    else
                    {
                        LogError(ServerDiffConsoleResources.ServerDiffUsage);
                        Environment.Exit(1);
                    }
                }

                try
                {
                    ServerDiffEngine diffEngine     = new ServerDiffEngine(sessionGuid, noContentComparison, verbose, SessionTypeEnum.VersionControl);
                    VCDiffComparer   vcDiffComparer = new VCDiffComparer(diffEngine);
                    diffEngine.RegisterDiffComparer(vcDiffComparer);
                    if (diffEngine.VerifyContentsMatch(leftVersion, rightVersion))
                    {
                        diffEngine.LogResult(ServerDiffResources.AllContentsMatch);
                    }
                    else
                    {
                        diffEngine.LogResult(ServerDiffResources.ContentsDoNotMatch);
                    }
                }
                catch (Exception e)
                {
                    LogError(String.Format(CultureInfo.InvariantCulture, ServerDiffResources.ExceptionRunningServerDiff,
                                           verbose ? e.ToString() : e.Message));
                }
            }
            else if (string.Equals(args[0], "wit", StringComparison.InvariantCultureIgnoreCase))
            {
                string leftQueryCondition  = null;
                string rightQueryCondition = null;
                Guid   sessionGuid         = Guid.Empty;

                for (int i = 1; i < args.Length; i++)
                {
                    string arg = RemoveQuotes(args[i]);
                    if ((arg.StartsWith("/s", StringComparison.InvariantCultureIgnoreCase) ||
                         (arg.StartsWith("/session", StringComparison.InvariantCultureIgnoreCase))))
                    {
                        try
                        {
                            sessionGuid = new Guid(arg.Substring(arg.IndexOf(':') + 1));
                        }
                        catch
                        {
                            LogError(String.Format(CultureInfo.InvariantCulture, ServerDiffConsoleResources.SessionArgIsNotGuid, args[0]));
                            Environment.Exit(1);
                        }
                    }
                    else if ((arg.StartsWith("/l:", StringComparison.InvariantCultureIgnoreCase) ||
                              (arg.StartsWith("/leftQueryCondition:", StringComparison.InvariantCultureIgnoreCase))))
                    {
                        leftQueryCondition = arg.Substring(arg.IndexOf(':') + 1);
                    }
                    else if ((arg.StartsWith("/r:", StringComparison.InvariantCultureIgnoreCase) ||
                              (arg.StartsWith("/rightQueryCondition:", StringComparison.InvariantCultureIgnoreCase))))
                    {
                        rightQueryCondition = arg.Substring(arg.IndexOf(':') + 1);
                    }
                    else if ((arg.Equals("/n", StringComparison.InvariantCultureIgnoreCase) ||
                              (arg.Equals("/noContentComparison ", StringComparison.InvariantCultureIgnoreCase))))
                    {
                        noContentComparison = true;
                    }
                    else if ((arg.Equals("/v", StringComparison.InvariantCultureIgnoreCase) ||
                              (arg.Equals("/verbose", StringComparison.InvariantCultureIgnoreCase))))
                    {
                        verbose = true;
                    }
                    else
                    {
                        LogError(ServerDiffConsoleResources.ServerDiffUsage);
                        Environment.Exit(1);
                    }
                }

                try
                {
                    ServerDiffEngine diffEngine =
                        new ServerDiffEngine(sessionGuid, noContentComparison, verbose, SessionTypeEnum.WorkItemTracking);
                    WITDiffComparer witDiffComparer = new WITDiffComparer(diffEngine);
                    diffEngine.RegisterDiffComparer(witDiffComparer);
                    if (diffEngine.VerifyContentsMatch(leftQueryCondition, rightQueryCondition))
                    {
                        diffEngine.LogResult(ServerDiffResources.AllContentsMatch);
                    }
                    else
                    {
                        diffEngine.LogResult(ServerDiffResources.ContentsDoNotMatch);
                    }
                }
                catch (Exception e)
                {
                    LogError(String.Format(CultureInfo.InvariantCulture, ServerDiffResources.ExceptionRunningServerDiff,
                                           verbose ? e.ToString() : e.Message));
                }
            }
            else
            {
                LogError(ServerDiffConsoleResources.ServerDiffUsage);
                Environment.Exit(1);
            }
        }