示例#1
0
        public void Success_AlreadyOnIt()
        {
            // Setup
            var lDProjectFolderPath = LanguageDepotMock.ProjectFolderPath;

            MercurialTestHelper.InitializeHgRepo(lDProjectFolderPath);
            MercurialTestHelper.HgCreateBranch(lDProjectFolderPath, LcmCache.ModelVersion);
            MercurialTestHelper.CreateFlexRepo(lDProjectFolderPath);

            // Execute
            _EnsureCloneAction.Run(_lfProject);

            // Verify
            Assert.That(_env.Logger.GetErrors(), Is.Empty);
            Assert.That(_lfProject.State.SRState, Is.EqualTo(ProcessingState.SendReceiveStates.CLONED));
            Assert.That(ModelVersion, Is.EqualTo(LcmCache.ModelVersion));
            Assert.That(Directory.Exists(_lfProject.ProjectDir), Is.True);
        }
示例#2
0
        public void Error_NoCommitsInRepository()
        {
            // Setup
            // Create a hg repo that doesn't contain a branch for the current model version
            var lDProjectFolderPath = LanguageDepotMock.ProjectFolderPath;

            MercurialTestHelper.InitializeHgRepo(lDProjectFolderPath);
            MercurialTestHelper.HgCreateBranch(lDProjectFolderPath, LcmCache.ModelVersion);

            // Execute
            _EnsureCloneAction.Run(_lfProject);

            // Verify
            Assert.That(_env.Logger.GetErrors(), Does.Contain("new repository with no commits"));
            Assert.That(_lfProject.State.SRState, Is.EqualTo(ProcessingState.SendReceiveStates.ERROR));
            Assert.That(ModelVersion, Is.EqualTo(0));
            Assert.That(Directory.Exists(_lfProject.ProjectDir), Is.False);
        }
        public void Error_NoCommitsInRepository()
        {
            // Setup
            // Create a empty hg repo
            var lDProjectFolderPath = LanguageDepotMock.ProjectFolderPath;

            MercurialTestHelper.InitializeHgRepo(lDProjectFolderPath);
            MercurialTestHelper.HgCreateBranch(lDProjectFolderPath, LcmCache.ModelVersion);
            MercurialTestHelper.CloneRepo(lDProjectFolderPath, _lfProject.ProjectDir);
            LanguageDepotMock.Server.Start();

            // Execute
            _synchronizeAction.Run(_lfProject);

            // Verify
            Assert.That(_env.Logger.GetErrors(),
                        Does.Contain("Cannot do first commit."));
            Assert.That(_lfProject.State.SRState, Is.EqualTo(ProcessingState.SendReceiveStates.HOLD));
        }
示例#4
0
        public void Error_NoBranch_OlderSupportedBranch()
        {
            // Setup
            // Create a hg repo that doesn't contain a branch for the current model version
            var lDProjectFolderPath = LanguageDepotMock.ProjectFolderPath;

            MercurialTestHelper.InitializeHgRepo(lDProjectFolderPath);
            MercurialTestHelper.HgCreateBranch(lDProjectFolderPath, 7000065);             // simulate a too old version
            MercurialTestHelper.CreateFlexRepo(lDProjectFolderPath);
            MagicStrings.SetMinimalModelVersion(7000065);

            // Execute
            _EnsureCloneAction.Run(_lfProject);

            // Verify
            Assert.That(_lfProject.State.SRState, Is.EqualTo(ProcessingState.SendReceiveStates.CLONING));
            Assert.That(ModelVersion, Is.EqualTo(7000065));
            Assert.That(Directory.Exists(_lfProject.ProjectDir), Is.True);
        }
        public void Success_NoNewChangesFromOthersAndUs()
        {
            // Setup
            TestEnvironment.CopyFwProjectTo(TestLangProj, _lDSettings.WebWorkDirectory);
            TestEnvironment.CopyFwProjectTo(TestLangProj, _env.Settings.WebWorkDirectory);
            LanguageDepotMock.Server.Start();
            var ldDirectory = Path.Combine(_lDSettings.WebWorkDirectory, TestLangProj);
            var oldHashOfLd = MercurialTestHelper.GetRevisionOfTip(ldDirectory);

            // Execute
            _synchronizeAction.Run(_lfProject);

            // Verify
            Assert.That(MercurialTestHelper.GetRevisionOfTip(ldDirectory), Is.EqualTo(oldHashOfLd));
            Assert.That(MercurialTestHelper.GetRevisionOfWorkingSet(_lfProject.ProjectDir),
                        Is.EqualTo(oldHashOfLd));
            Assert.That(_env.Logger.GetErrors(), Is.Null.Or.Empty);
            Assert.That(_env.Logger.GetMessages(), Does.Contain("No changes from others"));
            Assert.That(_lfProject.State.SRState, Is.EqualTo(ProcessingState.SendReceiveStates.SYNCING));
        }
示例#6
0
        public void Error_CloneHasHigherModelVersion()
        {
            // Setup
            var lDProjectFolderPath = LanguageDepotMock.ProjectFolderPath;

            MercurialTestHelper.InitializeHgRepo(lDProjectFolderPath);
            MercurialTestHelper.HgCreateBranch(lDProjectFolderPath, LcmCache.ModelVersion);
            MercurialTestHelper.CreateFlexRepo(lDProjectFolderPath);
            MercurialTestHelper.HgCreateBranch(lDProjectFolderPath, 7600000);
            MercurialTestHelper.HgCommit(lDProjectFolderPath, "on branch");

            // Execute
            _EnsureCloneAction.Run(_lfProject);

            // Verify
            Assert.That(_env.Logger.GetErrors(), Does.Contain("clone has higher model"));
            Assert.That(_lfProject.State.SRState, Is.EqualTo(ProcessingState.SendReceiveStates.ERROR));
            Assert.That(ModelVersion, Is.EqualTo(0));
            Assert.That(Directory.Exists(_lfProject.ProjectDir), Is.False);
        }
示例#7
0
        public void Error_NotAFlexProject()
        {
            // Setup
            // Create a non-FLEx hg repo (in this case an empty repo)
            var lDProjectFolderPath = LanguageDepotMock.ProjectFolderPath;

            MercurialTestHelper.InitializeHgRepo(lDProjectFolderPath);
            File.WriteAllText(Path.Combine(lDProjectFolderPath, "some.file"),
                              "just a test file");
            MercurialTestHelper.HgCommit(lDProjectFolderPath, "Initial commit");

            // Execute
            _EnsureCloneAction.Run(_lfProject);

            // Verify
            Assert.That(_env.Logger.GetErrors(), Does.Contain("clone is not a FLEx project"));
            Assert.That(_lfProject.State.SRState, Is.EqualTo(ProcessingState.SendReceiveStates.ERROR));
            Assert.That(ModelVersion, Is.EqualTo(0));
            Assert.That(Directory.Exists(_lfProject.ProjectDir), Is.False);
        }
        public void Success_ChangesFromOthersNoChangesFromUs()
        {
            // Setup
            var ldDirectory = CopyModifiedProjectAsTestLangProj(_lDSettings.WebWorkDirectory);

            TestEnvironment.CopyFwProjectTo(TestLangProj, _env.Settings.WebWorkDirectory);
            LanguageDepotMock.Server.Start();
            var oldHashOfLd = MercurialTestHelper.GetRevisionOfTip(ldDirectory);

            // Execute
            _synchronizeAction.Run(_lfProject);

            // Verify
            Assert.That(MercurialTestHelper.GetRevisionOfWorkingSet(_lfProject.ProjectDir),
                        Is.EqualTo(MercurialTestHelper.GetRevisionOfTip(ldDirectory)),
                        "Our repo doesn't have the changes from LanguageDepot");
            Assert.That(MercurialTestHelper.GetRevisionOfTip(ldDirectory), Is.EqualTo(oldHashOfLd));
            Assert.That(_env.Logger.GetErrors(), Is.Null.Or.Empty);
            Assert.That(_env.Logger.GetMessages(), Does.Contain("Received changes from others"));
            Assert.That(_lfProject.State.SRState, Is.EqualTo(ProcessingState.SendReceiveStates.SYNCING));
        }
        public void Success_NewBranchFormat_LfMerge68()
        {
            // Setup
            var ldDirectory = CopyModifiedProjectAsTestLangProj(_lDSettings.WebWorkDirectory);

            TestEnvironment.CopyFwProjectTo(TestLangProj, _env.Settings.WebWorkDirectory);
            TestEnvironment.WriteTextFile(Path.Combine(_env.Settings.WebWorkDirectory, TestLangProj, "FLExProject.ModelVersion"), "{\"modelversion\": 7000068}");
            LanguageDepotMock.Server.Start();
            var oldHashOfLd = MercurialTestHelper.GetRevisionOfTip(ldDirectory);

            // Execute
            _synchronizeAction.Run(_lfProject);

            // Verify
            Assert.That(MercurialTestHelper.GetRevisionOfWorkingSet(_lfProject.ProjectDir),
                        Is.EqualTo(MercurialTestHelper.GetRevisionOfTip(ldDirectory)),
                        "Our repo doesn't have the changes from LanguageDepot");
            Assert.That(MercurialTestHelper.GetRevisionOfTip(ldDirectory), Is.EqualTo(oldHashOfLd));
            Assert.That(_env.Logger.GetErrors(), Is.Null.Or.Empty);
            Assert.That(_env.Logger.GetMessages(), Does.Contain("Received changes from others"));
        }
        public void Error_NewerBranch()
        {
            // Setup
            var lDProjectFolderPath = LanguageDepotMock.ProjectFolderPath;

            MercurialTestHelper.InitializeHgRepo(lDProjectFolderPath);
            MercurialTestHelper.HgCreateBranch(lDProjectFolderPath, LcmCache.ModelVersion);
            MercurialTestHelper.CreateFlexRepo(lDProjectFolderPath);
            MercurialTestHelper.CloneRepo(lDProjectFolderPath, _lfProject.ProjectDir);
            // Simulate a user with a newer FLEx version doing a S/R
            MercurialTestHelper.HgCreateBranch(lDProjectFolderPath, 7600000);
            MercurialTestHelper.HgCommit(lDProjectFolderPath, "Commit with newer FLEx version");
            LanguageDepotMock.Server.Start();

            // Execute
            _synchronizeAction.Run(_lfProject);

            // Verify
            Assert.That(_env.Logger.GetMessages(), Does.Contain("Allow data migration for project"));
            Assert.That(_lfProject.State.SRState, Is.EqualTo(ProcessingState.SendReceiveStates.SYNCING));
        }
示例#11
0
        public void Success_ChangesFromUsNoChangesFromOthers()
        {
            // Setup
            CopyModifiedProjectAsTestLangProj(_env.Settings.WebWorkDirectory);
            TestEnvironment.CopyFwProjectTo(TestLangProj, _lDSettings.WebWorkDirectory);
            LanguageDepotMock.Server.Start();
            var oldHashOfUs = MercurialTestHelper.GetRevisionOfWorkingSet(_lfProject.ProjectDir);

            // Execute
            _synchronizeAction.Run(_lfProject);

            // Verify
            Assert.That(MercurialTestHelper.GetRevisionOfWorkingSet(_lfProject.ProjectDir),
                        Is.EqualTo(oldHashOfUs));
            Assert.That(MercurialTestHelper.GetRevisionOfTip(
                            Path.Combine(_lDSettings.WebWorkDirectory, TestLangProj)),
                        Is.EqualTo(oldHashOfUs), "LanguageDepot doesn't have our changes");
            Assert.That(_env.Logger.GetErrors(), Is.Null.Or.Empty);
            Assert.That(_env.Logger.GetMessages(), Is.StringContaining("No changes from others"));
            Assert.That(_lfProject.State.SRState, Is.EqualTo(ProcessingState.SendReceiveStates.SYNCING));
        }
        public void Error_DifferentBranch()
        {
            // Setup
            // Create a hg repo that doesn't contain a branch for the current model version
            const int modelVersion = 7000067;

            MagicStrings.SetMinimalModelVersion(modelVersion);
            var lDProjectFolderPath = LanguageDepotMock.ProjectFolderPath;

            MercurialTestHelper.InitializeHgRepo(lDProjectFolderPath);
            MercurialTestHelper.HgCreateBranch(lDProjectFolderPath, modelVersion);
            MercurialTestHelper.CreateFlexRepo(lDProjectFolderPath, modelVersion);
            MercurialTestHelper.CloneRepo(lDProjectFolderPath, _lfProject.ProjectDir);
            LanguageDepotMock.Server.Start();

            // Execute
            _synchronizeAction.Run(_lfProject);

            // Verify
            Assert.That(_lfProject.State.SRState, Is.EqualTo(ProcessingState.SendReceiveStates.SYNCING));
            Assert.That(ModelVersion, Is.EqualTo(modelVersion));
        }
示例#13
0
        public void Error_NoBranch_UnsupportedBranch()
        {
            // Setup
            // Create a hg repo that doesn't contain a branch for the current model version
            var lDProjectFolderPath = LanguageDepotMock.ProjectFolderPath;

            MercurialTestHelper.InitializeHgRepo(lDProjectFolderPath);
            MercurialTestHelper.HgCreateBranch(lDProjectFolderPath, 7000060);             // simulate a too old version
            MercurialTestHelper.CreateFlexRepo(lDProjectFolderPath);
            MagicStrings.SetMinimalModelVersion(7000068);

            // Execute
            _EnsureCloneAction.Run(_lfProject);

            // Verify
            Assert.That(_env.Logger.GetErrors(), Does.Contain("no such branch"));
            Assert.That(_env.Logger.GetErrors(), Does.Contain(
                            "clone model version '7000060' less than minimal supported model version '7000068'."));
            Assert.That(_lfProject.State.SRState, Is.EqualTo(ProcessingState.SendReceiveStates.ERROR));
            Assert.That(ModelVersion, Is.EqualTo(0));
            Assert.That(Directory.Exists(_lfProject.ProjectDir), Is.False);
        }
        public void Error_InvalidUtf8InXml()
        {
            // Setup
            TestEnvironment.CopyFwProjectTo(TestLangProj, _lDSettings.WebWorkDirectory);
            TestEnvironment.CopyFwProjectTo(TestLangProj, _env.Settings.WebWorkDirectory);
            LanguageDepotMock.Server.Start();
            var ldDirectory = Path.Combine(_lDSettings.WebWorkDirectory, TestLangProj);
            var oldHashOfLd = MercurialTestHelper.GetRevisionOfTip(ldDirectory);
            var fwdataPath  = Path.Combine(_env.Settings.WebWorkDirectory, TestLangProj, TestLangProj + ".fwdata");

            TestEnvironment.OverwriteBytesInFile(fwdataPath, new byte[] { 0xc0, 0xc1 }, 25);            // 0xC0 and 0xC1 are always invalid byte values in UTF-8

            // Execute
            _synchronizeAction.Run(_lfProject);

            // Verify
            string errors = _env.Logger.GetErrors();

            Assert.That(errors, Does.Contain("System.Xml.XmlException"));
            // Stack trace should also have been logged
            Assert.That(errors, Does.Contain("\n  at Chorus.sync.Synchronizer.SyncNow (Chorus.sync.SyncOptions options)"));
            Assert.That(_lfProject.State.SRState, Is.EqualTo(ProcessingState.SendReceiveStates.SYNCING));
        }
        public void Error_WrongXmlEncoding()
        {
            // Setup
            TestEnvironment.CopyFwProjectTo(TestLangProj, _lDSettings.WebWorkDirectory);
            TestEnvironment.CopyFwProjectTo(TestLangProj, _env.Settings.WebWorkDirectory);
            LanguageDepotMock.Server.Start();
            var ldDirectory = Path.Combine(_lDSettings.WebWorkDirectory, TestLangProj);
            var oldHashOfLd = MercurialTestHelper.GetRevisionOfTip(ldDirectory);
            var fwdataPath  = Path.Combine(_env.Settings.WebWorkDirectory, TestLangProj, TestLangProj + ".fwdata");

            TestEnvironment.ChangeFileEncoding(fwdataPath, System.Text.Encoding.UTF8, System.Text.Encoding.UTF32);
            // Note that the XML file will still claim the encoding is UTF-8!

            // Execute
            _synchronizeAction.Run(_lfProject);

            // Verify
            string errors = _env.Logger.GetErrors();

            Assert.That(errors, Does.Contain("System.Xml.XmlException: '.', hexadecimal value 0x00, is an invalid character."));
            // Stack trace should also have been logged
            Assert.That(errors, Does.Contain("\n  at Chorus.sync.Synchronizer.SyncNow (Chorus.sync.SyncOptions options)"));
            Assert.That(_lfProject.State.SRState, Is.EqualTo(ProcessingState.SendReceiveStates.SYNCING));
        }