コード例 #1
0
        public void Should_create_artifact_dependency(
            IBuildConfigXmlClient buildConfigXmlClient,
            string dependencyBuildConfigId,
            bool cleanDestination,
            string revisionName,
            string revisionValue,
            string pathRules)
        {
            var buildConfigXml = new BuildConfigXmlGenerator(buildConfigXmlClient, buildNonStubVersion: true).Create();

            var dependencyToCreate = new CreateArtifactDependency(Arg.Any <string>(), dependencyBuildConfigId);

            dependencyToCreate.CleanDestinationDirectory = cleanDestination;
            dependencyToCreate.RevisionName  = revisionName;
            dependencyToCreate.RevisionValue = revisionValue;
            dependencyToCreate.PathRules     = pathRules;

            buildConfigXml.CreateArtifactDependency(dependencyToCreate);

            var dependencyElement = (XmlElement)buildConfigXml.Xml.SelectSingleNode("/build-type/settings/artifact-dependencies/dependency[@sourceBuildTypeId='" + dependencyBuildConfigId + "']");

            Assert.Equal(dependencyBuildConfigId, dependencyElement?.Attributes["sourceBuildTypeId"].Value);
            Assert.Equal(cleanDestination.ToString().ToLower(), dependencyElement?.Attributes["cleanDestination"].Value);

            var revisionRuleElement = dependencyElement?.SelectSingleNode("revisionRule");

            Assert.Equal(revisionName, revisionRuleElement?.Attributes?["name"].Value);
            Assert.Equal(revisionValue, revisionRuleElement?.Attributes?["revision"].Value);

            var artifactElement = dependencyElement?.SelectSingleNode("artifact");

            Assert.Equal(pathRules, artifactElement?.Attributes?["sourcePath"].Value);
        }
コード例 #2
0
        public BuildConfigXmlGenerator(IBuildConfigXmlClient buildConfigXmlClient = null, bool buildNonStubVersion = false)
        {
            _buildConfigXmlClient = buildConfigXmlClient;

            if (buildNonStubVersion)
            {
                BuildConfigXml = new BuildConfigXml(_buildConfigXmlClient, Guid.NewGuid().ToString(), Guid.NewGuid().ToString());
            }
            else
            {
                BuildConfigXml = Substitute.For <BuildConfigXml>(_buildConfigXmlClient, Guid.NewGuid().ToString(), Guid.NewGuid().ToString());
            }

            Xml.AppendChild(Xml.CreateXmlDeclaration("1.0", "UTF-8", null));

            BuildTypeElement = (XmlElement)Xml.AppendChild(Xml.CreateElement("build-type"));
            BuildTypeElement.SetAttribute("uuid", Guid.NewGuid().ToString());

            NameElement = (XmlElement)BuildTypeElement.AppendChild(Xml.CreateElement("name"));

            SettingsElement = (XmlElement)BuildTypeElement.AppendChild(Xml.CreateElement("settings"));
            SettingsElement.SetAttribute("ref", "CPlusPlusTemplate_v1");

            ParametersElement = (XmlElement)SettingsElement.AppendChild(Xml.CreateElement("parameters"));
        }
コード例 #3
0
        public void Should_add_parameter_value_when_does_not_exists(IBuildConfigXmlClient buildConfigXmlClient, string paramName, string paramVal)
        {
            var buildConfigXml = new BuildConfigXmlGenerator(buildConfigXmlClient, buildNonStubVersion: true).Create();

            buildConfigXml.SetParameterValue(paramName, paramVal);

            Assert.Equal(paramVal, buildConfigXml.Xml.SelectSingleNode("/build-type/settings/parameters/param[@name='" + paramName + "']").Attributes["value"].Value);
        }
コード例 #4
0
        public BuildConfigXml(IBuildConfigXmlClient buildConfigXmlClient, string projectId, string buildConfigId)
        {
            _buildConfigXmlClient = buildConfigXmlClient;

            Xml = new XmlDocument();

            BuildConfigId = buildConfigId;
            ProjectId     = projectId;
        }
コード例 #5
0
        public ChainWithRootClonedScenario(IFixture fixture, ITeamCityClient client, IBuildConfigXmlClient buildConfigXmlClient)
        {
            ComponentA = new SingleBuildScenario(fixture, client, buildConfigXmlClient, 311, "ComponentA_Trunk", "ComponentA", new List <ScenarioDependency>());

            ComponentB = new SingleBuildScenario(fixture, client, buildConfigXmlClient, 310, "ComponentB_Trunk", "ComponentB", new List <ScenarioDependency> {
                ComponentA.AsArtifactSameChainDependency()
            });

            ComponentC = new SingleBuildScenario(fixture, client, buildConfigXmlClient, 309, "ComponentC_Trunk", "ComponentC", new List <ScenarioDependency>());

            AppA = new SingleBuildScenario(fixture, client, buildConfigXmlClient, 313, "AppA_Trunk", "AppA", new List <ScenarioDependency> {
                ComponentA.AsArtifactSameChainDependency()
            });

            AppB = new SingleBuildScenario(fixture, client, buildConfigXmlClient, 312, "AppB_Trunk", "AppB", new List <ScenarioDependency> {
                ComponentB.AsArtifactSameChainDependency(),
                ComponentC.AsArtifactSameChainDependency()
            });

            InstallerA = new SingleBuildScenario(fixture, client, buildConfigXmlClient, 315, "InstallerA_Trunk", "InstallerA", new List <ScenarioDependency> {
                AppA.AsArtifactSameChainDependency()
            });

            InstallerB = new SingleBuildScenario(fixture, client, buildConfigXmlClient, 314, "InstallerB_Trunk", "InstallerB", new List <ScenarioDependency> {
                AppB.AsArtifactSameChainDependency()
            });

            Suite = new SingleBuildScenario(fixture, client, buildConfigXmlClient, 316, "Suite_Trunk", "Suite", new List <ScenarioDependency> {
                InstallerA.AsArtifactSameChainDependency(),
                InstallerB.AsArtifactSameChainDependency(),
            });

            SuiteCloned = new SingleBuildScenario(fixture, client, buildConfigXmlClient, 400, "Suite_TrunkCloned", "SuiteCloned", new List <ScenarioDependency>
            {
                InstallerA.AsArtifactFixedBuildDependency(),
                InstallerB.AsArtifactFixedBuildDependency(),
            },
                                                  new Properties()
            {
                Property = new PropertyList()
                {
                    new Property(ParameterName.BuildConfigChainId, fixture.Create <string>()),
                    new Property(ParameterName.CloneNameSuffix, "Clone")
                }
            }
                                                  );

            client.Builds
            .ByBuildLocator(locator => locator.WithSnapshotDependencyFrom(AppA.Build.Id))
            .Returns(Task.FromResult(new List <BuildSummary>()
            {
                (BuildSummary)AppA.Build, (BuildSummary)InstallerA.Build, (BuildSummary)Suite.Build
            }));
        }
コード例 #6
0
        public void Should_copy_xml_config(IBuildConfigXmlClient buildConfigXmlClient, string newBuildTypeId, string newConfigurationName)
        {
            var original = new BuildConfigXmlGenerator(buildConfigXmlClient, buildNonStubVersion: true).Create();

            var clone        = original.CopyBuildConfiguration(newBuildTypeId, newConfigurationName);
            var originalUuid = original.Xml.SelectSingleNode("/build-type").Attributes["uuid"].Value;
            var cloneUuid    = clone.Xml.SelectSingleNode("/build-type").Attributes["uuid"].Value;

            Assert.NotEqual(originalUuid, cloneUuid);
            Assert.Equal(newBuildTypeId, clone.BuildConfigId);
            Assert.Equal(original.ProjectId, clone.ProjectId);
            Assert.Equal(newConfigurationName, clone.Xml.SelectSingleNode("/build-type/name").InnerText);
        }
コード例 #7
0
        public void Should_freeze_parameters(
            IBuildConfigXmlClient buildConfigXmlClient,
            List <Property> sourceParameters)
        {
            var buildConfigXml = new BuildConfigXmlGenerator(buildConfigXmlClient, buildNonStubVersion: true)
                                 .WithParameter(sourceParameters[0].Name, Arg.Any <string>())
                                 .Create();

            buildConfigXml.FreezeParameters(sourceParameters);

            var paramElement = (XmlElement)buildConfigXml.Xml.SelectSingleNode("/build-type/settings/parameters/param[@name='" + sourceParameters[0].Name + "']");

            Assert.Equal(sourceParameters[0].Value, paramElement.Attributes["value"].Value);
        }
コード例 #8
0
        public void Should_delete_snapshot_dependency(
            IBuildConfigXmlClient buildConfigXmlClient,
            string buildConfigId,
            string dependencyBuildConfigId)
        {
            var buildConfigXml = new BuildConfigXmlGenerator(buildConfigXmlClient, buildNonStubVersion: true)
                                 .WithSnapshotDependency(new CreateSnapshotDependency(Arg.Any <string>(), dependencyBuildConfigId))
                                 .Create();

            buildConfigXml.DeleteSnapshotDependency(dependencyBuildConfigId);

            var dependOnElement = (XmlElement)buildConfigXml.Xml.SelectSingleNode("/build-type/settings/dependencies/depend-on[@sourceBuildTypeId='" + dependencyBuildConfigId + "']");

            Assert.Null(dependOnElement);
        }
コード例 #9
0
        public void Should_delete_all_snapshot_dependencies(
            IBuildConfigXmlClient buildConfigXmlClient,
            string buildConfigId,
            string dependencyBuildConfigId)
        {
            var buildConfigXml = new BuildConfigXmlGenerator(buildConfigXmlClient, buildNonStubVersion: true)
                                 .WithSnapshotDependency(new CreateSnapshotDependency(Arg.Any <string>(), Arg.Any <string>()))
                                 .WithSnapshotDependency(new CreateSnapshotDependency(Arg.Any <string>(), Arg.Any <string>()))
                                 .Create();

            var dependenciesElement = (XmlElement)buildConfigXml.Xml.SelectSingleNode("/build-type/settings/dependencies");

            buildConfigXml.DeleteAllSnapshotDependencies();

            Assert.True(dependenciesElement.ChildNodes.Count == 0);
        }
コード例 #10
0
        public void Should_clone_root_build_config(
            int sourceBuildId,
            string newNameSuffix,
            ITeamCityClient client,
            IBuildConfigXmlClient buildConfigXmlClient,
            IFixture fixture,
            IVcsRootHelper vcsRootHelper)
        {
            var scenario = new SingleBuildScenario(fixture, client, buildConfigXmlClient, sourceBuildId);

            var sut = new CloneRootBuildConfigUseCase(client, buildConfigXmlClient, vcsRootHelper);

            sut.Execute(sourceBuildId, newNameSuffix, false).Wait();

            scenario.BuildConfigXml.Received(1)
            .CopyBuildConfiguration(Arg.Any <string>(), Arg.Any <string>());
        }
コード例 #11
0
        public void Should_freeze_all_artifact_dependencies(
            IBuildConfigXmlClient buildConfigXmlClient,
            string dependencyBuildConfigId,
            CreateArtifactDependency artifactDependency,
            Build asOfBuild)
        {
            artifactDependency.DependencyBuildConfigId    = dependencyBuildConfigId;
            asOfBuild.ArtifactDependencies[0].BuildTypeId = dependencyBuildConfigId;

            var buildConfigXml = new BuildConfigXmlGenerator(buildConfigXmlClient, buildNonStubVersion: true)
                                 .WithArtifactDependency(artifactDependency)
                                 .Create();

            buildConfigXml.FreezeAllArtifactDependencies(asOfBuild);

            var dependencyElement   = (XmlElement)buildConfigXml.Xml.SelectSingleNode("/build-type/settings/artifact-dependencies/dependency[@sourceBuildTypeId='" + dependencyBuildConfigId + "']");
            var revisionRuleElement = (XmlElement)dependencyElement?.SelectSingleNode("revisionRule");

            Assert.Equal("buildNumber", revisionRuleElement?.Attributes["name"].Value);
            Assert.Equal(asOfBuild.ArtifactDependencies[0].Number, revisionRuleElement?.Attributes["revision"].Value);
        }
コード例 #12
0
        public void Should_update_artifact_dependency(
            IBuildConfigXmlClient buildConfigXmlClient,
            string dependencyBuildConfigId,
            CreateArtifactDependency before,
            string newSourceBuildConfigId,
            string newRevisionName,
            string newRevisionValue)
        {
            before.DependencyBuildConfigId = dependencyBuildConfigId;

            var buildConfigXml = new BuildConfigXmlGenerator(buildConfigXmlClient, buildNonStubVersion: true)
                                 .WithArtifactDependency(before)
                                 .Create();

            buildConfigXml.UpdateArtifactDependency(dependencyBuildConfigId, newSourceBuildConfigId, newRevisionName, newRevisionValue);

            var dependencyElement   = (XmlElement)buildConfigXml.Xml.SelectSingleNode("/build-type/settings/artifact-dependencies/dependency[@sourceBuildTypeId='" + newSourceBuildConfigId + "']");
            var revisionRuleElement = (XmlElement)dependencyElement?.SelectSingleNode("revisionRule");

            Assert.Equal(newRevisionName, revisionRuleElement?.Attributes["name"].Value);
            Assert.Equal(newRevisionValue, revisionRuleElement?.Attributes["revision"].Value);
        }
コード例 #13
0
        public void Should_create_snapshot_dependency(IBuildConfigXmlClient buildConfigXmlClient, string dependencyBuildConfigId, bool takeStartedBuildWithSameRevisions, bool takeSuccessFulBuildsOnly)
        {
            var buildConfigXml = new BuildConfigXmlGenerator(buildConfigXmlClient, buildNonStubVersion: true).Create();

            var dependencyToCreate = new CreateSnapshotDependency(Arg.Any <string>(), dependencyBuildConfigId);

            dependencyToCreate.TakeStartedBuildWithSameRevisions = takeStartedBuildWithSameRevisions;
            dependencyToCreate.TakeSuccessFulBuildsOnly          = takeSuccessFulBuildsOnly;

            buildConfigXml.CreateSnapshotDependency(dependencyToCreate);

            var dependOnElement = (XmlElement)buildConfigXml.Xml.SelectSingleNode("/build-type/settings/dependencies/depend-on[@sourceBuildTypeId='" + dependencyBuildConfigId + "']");

            Assert.Equal(dependencyBuildConfigId, dependOnElement.Attributes["sourceBuildTypeId"].Value);

            var option1 = dependOnElement.SelectSingleNode("options/option[@name='take-started-build-with-same-revisions']").Attributes["value"].Value;

            Assert.Equal(takeStartedBuildWithSameRevisions.ToString().ToLower(), option1);

            var option2 = dependOnElement.SelectSingleNode("options/option[@name='take-successful-builds-only']").Attributes["value"].Value;

            Assert.Equal(takeSuccessFulBuildsOnly.ToString().ToLower(), option2);
        }
コード例 #14
0
        public void Should_clone_child_build_config(
            ITeamCityClient client,
            IVcsRootHelper vcsRootHelper,
            IBuildConfigXmlClient buildConfigXmlClient,
            IFixture fixture)
        {
            var scenario = new ChainWithRootClonedScenario(fixture, client, buildConfigXmlClient);
            var sut      = new CloneChildBuildConfigUseCase(client, vcsRootHelper, buildConfigXmlClient);

            sut.Execute(scenario.ComponentA.BuildConfig.Id, scenario.SuiteCloned.BuildConfig.Id, simulate: false).Wait();

            scenario.AppA.BuildConfigXml.Received(1).CopyBuildConfiguration(Arg.Any <string>(), Arg.Any <string>());
            scenario.InstallerA.BuildConfigXml.Received(1).CopyBuildConfiguration(Arg.Any <string>(), Arg.Any <string>());
            scenario.SuiteCloned.BuildConfigXml.DidNotReceive().CopyBuildConfiguration(Arg.Any <string>(), Arg.Any <string>());
            scenario.Suite.BuildConfigXml.DidNotReceive().CopyBuildConfiguration(Arg.Any <string>(), Arg.Any <string>());
            scenario.InstallerB.BuildConfigXml.Received(1).CopyBuildConfiguration(Arg.Any <string>(), Arg.Any <string>());
            scenario.AppB.BuildConfigXml.Received(1).CopyBuildConfiguration(Arg.Any <string>(), Arg.Any <string>());
            scenario.ComponentA.BuildConfigXml.Received(1).CopyBuildConfiguration(Arg.Any <string>(), Arg.Any <string>());
            scenario.ComponentB.BuildConfigXml.Received(1).CopyBuildConfiguration(Arg.Any <string>(), Arg.Any <string>());
            scenario.ComponentC.BuildConfigXml.DidNotReceive().CopyBuildConfiguration(Arg.Any <string>(), Arg.Any <string>());

            //todo: received call(s) to update artifact dependency
            //todo: received call(s) to create snapshot dependency
        }
コード例 #15
0
        public void Should_update_template_and_git_repo_to_current_state(
            IBuildConfigXmlClient buildConfigXmlClient,
            IBuildConfigClient buildConfigClient,
            IFixture fixture,
            string buildConfigId,
            string currentRepoPath)
        {
            var oldVersion = new BuildConfigXmlGenerator(buildConfigXmlClient, buildNonStubVersion: true)
                             .WithId(buildConfigId)
                             .WithTemplateId("CPlusPlusTemplate_v1")
                             .Create();

            var currentVersion = fixture.Build <BuildConfig>()
                                 .WithId(buildConfigId)
                                 .WithParameters(new Properties {
                Property = new PropertyList()
                {
                    new Property(ParameterName.GitRepoPath, currentRepoPath),
                }
            })
                                 .WithTemplates(new Templates {
                BuildType = new List <Template>()
                {
                    new Template()
                    {
                        Id = "BaseTemplateV5GitLab"
                    }
                }
            })
                                 .Create();

            oldVersion.SwitchTemplateAndRepoToCurrentState(currentVersion);

            Assert.Equal("BaseTemplateV5GitLab", oldVersion.Xml.SelectSingleNode("/build-type/settings").Attributes["ref"].Value);
            Assert.Equal(currentRepoPath, oldVersion.Xml.SelectSingleNode("/build-type/settings/parameters/param[@name='" + ParameterName.GitRepoPath + "']").Attributes["value"].Value);
        }
コード例 #16
0
 public DeepCloneBuildConfigUseCase(ITeamCityClient client, IVcsRootHelper vcsRootHelper, IBuildConfigXmlClient buildConfigXmlClient)
 {
     _client               = client;
     _vcsRootHelper        = vcsRootHelper;
     _buildConfigXmlClient = buildConfigXmlClient;
 }
コード例 #17
0
        public SingleBuildScenario(
            IFixture fixture,
            ITeamCityClient client,
            IBuildConfigXmlClient buildConfigXmlClient,
            long buildId,
            string buildConfigId   = null,
            string buildConfigName = null,
            List <ScenarioDependency> dependencies = null,
            Properties buildParameters             = null)
        {
            var projectId = fixture.Create <string>();

            buildConfigId = buildConfigId ?? fixture.Create <string>();

            BuildConfig = fixture.Build <BuildConfig>()
                          .WithId(buildConfigId)
                          .WithProjectId(projectId)
                          .WithName(buildConfigName ?? fixture.Create <string>())
                          .WithParameters(buildParameters ?? fixture.Create <Properties>())
                          .WithDependencies(dependencies?.Select(d => d.AsDependencyDefinition()).ToArray() ??
                                            fixture.CreateMany <DependencyDefinition>().ToArray())
                          .Create();

            BuildConfigXml = new BuildConfigXmlGenerator(buildConfigXmlClient)
                             .WithProjectId(projectId)
                             .WithId(buildConfigId)
                             .WithName(buildConfigName ?? fixture.Create <string>())
                             .WithParameters(buildParameters ?? fixture.Create <Properties>())
                             .WithDependencies(dependencies?.Select(d => d.AsDependencyDefinition()).ToArray() ??
                                               fixture.CreateMany <DependencyDefinition>().ToArray())
                             .Create();

            Build = fixture.Build <Build>()
                    .WithId(buildId)
                    .WithDependencies(dependencies?.Select(d => d.AsDependency()).ToArray() ??
                                      fixture.CreateMany <Dependency>().ToArray())
                    .WithBuildConfigSummary(BuildConfig)
                    .Create();

            Project = fixture.Build <Project>()
                      .WithId(Build.BuildConfig.ProjectId)
                      .WithBuildConfigSummary(BuildConfig)
                      .Create();

            client.Builds
            .ById(buildId)
            .Returns(Task.FromResult(Build));

            client.Builds
            .ByNumber(Build.Number, BuildConfig.Id)
            .Returns(Task.FromResult(Build));

            client.Projects
            .GetById(Project.Id)
            .Returns(Task.FromResult(Project));

            client.BuildConfigs
            .GetByConfigurationId(BuildConfig.Id)
            .Returns(Task.FromResult(BuildConfig));

            buildConfigXmlClient
            .Read(BuildConfigXml.ProjectId, BuildConfigXml.BuildConfigId)
            .Returns(BuildConfigXml);

            buildConfigXmlClient
            .ReadAsOf(BuildConfigXml.ProjectId, BuildConfigXml.BuildConfigId, Arg.Any <DateTime>())
            .Returns(BuildConfigXml);

            var clonedBuildConfig = BuildConfig.CloneViaJson();

            clonedBuildConfig.Id   = BuildConfig.Id + "_Clone";
            clonedBuildConfig.Name = buildConfigName + Consts.SuffixSeparator + "Clone";

            client.BuildConfigs.GenerateUniqueBuildConfigId(projectId, clonedBuildConfig.Name)
            .Returns(Task.FromResult(clonedBuildConfig.Id));
        }