Search in sources :

Example 16 with SvnMaterial

use of com.thoughtworks.go.config.materials.svn.SvnMaterial in project gocd by gocd.

the class MaterialRepositoryIntegrationTest method findModificationsSince_shouldHandleConcurrentModificationToCache.

@Test
public void findModificationsSince_shouldHandleConcurrentModificationToCache() throws InterruptedException {
    final SvnMaterial svn = MaterialsMother.svnMaterial();
    final MaterialRevision first = saveOneScmModification(svn, "user1", "file1");
    final MaterialRevision second = saveOneScmModification(svn, "user2", "file2");
    final MaterialRevision third = saveOneScmModification(svn, "user2", "file3");
    repo = new MaterialRepository(sessionFactory, goCache = new GoCache(goCache) {

        @Override
        public Object get(String key) {
            Object value = super.get(key);
            // sleep so we can have multiple threads enter the critical section
            TestUtils.sleepQuietly(200);
            return value;
        }
    }, 200, transactionSynchronizationManager, materialConfigConverter, materialExpansionService, databaseStrategy);
    Thread thread1 = new Thread(new Runnable() {

        public void run() {
            repo.findModificationsSince(svn, first);
        }
    });
    thread1.start();
    TestUtils.sleepQuietly(50);
    Thread thread2 = new Thread(new Runnable() {

        public void run() {
            repo.findModificationsSince(svn, second);
        }
    });
    thread2.start();
    thread1.join();
    thread2.join();
    assertThat(repo.cachedModifications(repo.findMaterialInstance(svn)).size(), is(3));
}
Also used : SvnMaterial(com.thoughtworks.go.config.materials.svn.SvnMaterial) GoCache(com.thoughtworks.go.server.cache.GoCache) CaseInsensitiveString(com.thoughtworks.go.config.CaseInsensitiveString) Test(org.junit.Test)

Example 17 with SvnMaterial

use of com.thoughtworks.go.config.materials.svn.SvnMaterial in project gocd by gocd.

the class MaterialRevisionTest method shouldNotConsiderChangedFlagAsPartOfEqualityAndHashCodeCheck.

@Test
public void shouldNotConsiderChangedFlagAsPartOfEqualityAndHashCodeCheck() {
    Modification modification = oneModifiedFile("revision1");
    SvnMaterial material = MaterialsMother.svnMaterial();
    MaterialRevision notChanged = new MaterialRevision(material, false, modification);
    MaterialRevision changed = new MaterialRevision(material, true, modification);
    changed.markAsChanged();
    assertThat(changed, is(notChanged));
    assertThat(changed.hashCode(), is(notChanged.hashCode()));
}
Also used : SvnMaterial(com.thoughtworks.go.config.materials.svn.SvnMaterial) DependencyMaterialRevision(com.thoughtworks.go.domain.materials.dependency.DependencyMaterialRevision) Test(org.junit.Test)

Example 18 with SvnMaterial

use of com.thoughtworks.go.config.materials.svn.SvnMaterial in project gocd by gocd.

the class AutoBuildIntegrationTest method shouldCreateBuildCauseOnMaterialConfigChange.

@Test
public void shouldCreateBuildCauseOnMaterialConfigChange() throws Exception {
    //down_pipe <- svn
    //         ^   /
    //         | /          => down_pipe <- up_pipe <- svn
    //      up_pipe
    //
    SvnMaterial svn = scheduleUtil.wf(new SvnMaterial("svn", "username", "password", false), "folder1");
    String[] svn_revs = { "s1" };
    scheduleUtil.checkinInOrder(svn, svn_revs);
    ScheduleTestUtil.AddedPipeline up_pipe = scheduleUtil.saveConfigWith("up_pipe", scheduleUtil.m(svn));
    ScheduleTestUtil.AddedPipeline down_pipe = scheduleUtil.saveConfigWith("down_pipe", scheduleUtil.m(svn), scheduleUtil.m(up_pipe));
    String up_pipe_1 = scheduleUtil.runAndPass(up_pipe, "s1");
    pipelineTimeline.update();
    String down_pipe_1 = scheduleUtil.runAndPass(down_pipe, "s1", up_pipe_1);
    pipelineTimeline.update();
    down_pipe.config.removeMaterialConfig(svn.config());
    CruiseConfig currentConfig = goConfigService.getCurrentConfig();
    currentConfig.pipelineConfigByName(new CaseInsensitiveString("down_pipe")).removeMaterialConfig(svn.config());
    configHelper.writeConfigFile(currentConfig);
    goConfigDao.load();
    MaterialRevisions given = scheduleUtil.mrs(scheduleUtil.mr(up_pipe, true, up_pipe_1));
    MaterialRevisions expected = scheduleUtil.mrs(scheduleUtil.mr(up_pipe, true, up_pipe_1));
    AutoBuild autoBuildType = new AutoBuild(goConfigService, pipelineService, "down_pipe", systemEnvironment, materialChecker, serverHealthService);
    assertThat(autoBuildType.onModifications(given, true, null).getMaterialRevisions(), is(expected));
}
Also used : MaterialRevisions(com.thoughtworks.go.domain.MaterialRevisions) SvnMaterial(com.thoughtworks.go.config.materials.svn.SvnMaterial) CaseInsensitiveString(com.thoughtworks.go.config.CaseInsensitiveString) CruiseConfig(com.thoughtworks.go.config.CruiseConfig) CaseInsensitiveString(com.thoughtworks.go.config.CaseInsensitiveString) Test(org.junit.Test)

Example 19 with SvnMaterial

use of com.thoughtworks.go.config.materials.svn.SvnMaterial in project gocd by gocd.

the class AutoTriggerDependencyResolutionTest method shouldTriggerWithRevisions_inDay3_whenSharedMaterialIsNotAvailableInDay2.

@Test
public void shouldTriggerWithRevisions_inDay3_whenSharedMaterialIsNotAvailableInDay2() throws Exception {
    /**
         * day 1.
         * git -------> P1--------+
         *   \                    |
         *    \                   |
         *     \                  v
         *      -----> P2 -----> P3
         *
         * day 2.
         * git -------> P1--------+
         *                        |
         *                        |
         *                        v
         * svn -------> P2 -----> P3
         *
         * day 3.
         * git -------> P1--------+
         *   \                    |
         *    \                   |
         *     \                  v
         *      -----> P2 -----> P3
         */
    GitMaterial git = u.wf(new GitMaterial("git"), "folder1");
    String[] git_revs = { "g1", "g2", "g3" };
    u.checkinInOrder(git, git_revs);
    SvnMaterial svn = u.wf(new SvnMaterial("svn", "username", "password", false), "folder2");
    String[] svn_revs = { "s1" };
    u.checkinInOrder(svn, svn_revs);
    ScheduleTestUtil.AddedPipeline p1 = u.saveConfigWith("P1", u.m(git));
    ScheduleTestUtil.AddedPipeline p2 = u.saveConfigWith("P2", u.m(git));
    ScheduleTestUtil.AddedPipeline p3 = u.saveConfigWith("P3", u.m(p1), u.m(p2));
    CruiseConfig cruiseConfig = goConfigDao.load();
    //day 1:
    String p1_1 = u.runAndPass(p1, "g1");
    String p2_1 = u.runAndPass(p2, "g1");
    String p3_1 = u.runAndPass(p3, p1_1, p2_1);
    //day 2:
    configHelper.setMaterialConfigForPipeline("P2", svn.config());
    cruiseConfig = goConfigDao.load();
    String p1_2 = u.runAndPass(p1, "g2");
    String p2_2 = u.runAndPass(new ScheduleTestUtil.AddedPipeline(cruiseConfig.pipelineConfigByName(new CaseInsensitiveString("P2")), p2.material), "s1");
    String p3_2 = u.runAndPass(p3, p1_2, p2_2);
    //day 3:
    configHelper.setMaterialConfigForPipeline("P2", git.config());
    cruiseConfig = goConfigDao.load();
    String p1_3 = u.runAndPass(p1, "g2");
    String p2_3 = u.runAndPass(p2, "g2");
    MaterialRevisions given = u.mrs(u.mr(p1, true, p1_3), u.mr(p2, false, p2_3));
    assertThat(getRevisionsBasedOnDependencies(p3, cruiseConfig, given), is(given));
}
Also used : GitMaterial(com.thoughtworks.go.config.materials.git.GitMaterial) MaterialRevisions(com.thoughtworks.go.domain.MaterialRevisions) SvnMaterial(com.thoughtworks.go.config.materials.svn.SvnMaterial) CaseInsensitiveString(com.thoughtworks.go.config.CaseInsensitiveString) CruiseConfig(com.thoughtworks.go.config.CruiseConfig) CaseInsensitiveString(com.thoughtworks.go.config.CaseInsensitiveString) Test(org.junit.Test)

Example 20 with SvnMaterial

use of com.thoughtworks.go.config.materials.svn.SvnMaterial in project gocd by gocd.

the class AutoTriggerDependencyResolutionTest method shouldChooseTheAppropriateRevisionsOfAllMaterials_inAComplexMultipleDiamondDependencySituation_withDependencyMaterialsNotResolvingStrictly.

@Test
public void shouldChooseTheAppropriateRevisionsOfAllMaterials_inAComplexMultipleDiamondDependencySituation_withDependencyMaterialsNotResolvingStrictly() throws Exception {
    /**
         * +-----------------------------+
         * |             hg---------->P4 |
         * |             |\           |  |
         * |             | \          |  |
         * |             |  \----\    |  |
         * |             V        \   |  |
         * |      /----> P3 ------\\  |  |
         * |    /                  \\ |  |
         * |  /                     \V|  |
         * |/                       V V  |
         * svn -----> P1 ---------> P6 <-+---+
         *  \         |            ^ ^       |
         *   \        |           /  |       |
         *    \       V         /    |       |
         *     \---> P2-------/      |       |
         *          # ^              |       |
         *            |              |       |
         *           git----------->P5<-----git2
         *
         */
    int i = 1;
    SvnMaterial svn = u.wf(new SvnMaterial("svn", "username", "password", false), "folder1");
    String[] svn_revs = { "s1", "s2", "s3", "s4", "s5", "s6", "s7", "s8", "s9", "s10" };
    u.checkinInOrder(svn, u.d(i++), svn_revs);
    HgMaterial hg = u.wf(new HgMaterial("hg", null), "folder2");
    String[] hg_revs = { "h1", "h2", "h3", "h4", "h5", "h6", "h7" };
    u.checkinInOrder(hg, u.d(i++), hg_revs);
    GitMaterial git1 = u.wf(new GitMaterial("git-1"), "folder3");
    u.checkinInOrder(git1, u.d(i++), "g1-1", "g1-2", "g1-3", "g1-4", "g1-5", "g1-6");
    GitMaterial git2 = u.wf(new GitMaterial("git-2"), "folder4");
    String[] git2_revs = { "g2-1", "g2-2", "g2-3", "g2-4", "g2-5", "g2-6", "g2-7", "g2-8" };
    u.checkinInOrder(git2, u.d(i++), git2_revs);
    ScheduleTestUtil.AddedPipeline p1 = u.saveConfigWith("P1", u.m(svn));
    ScheduleTestUtil.AddedPipeline p2 = u.saveConfigWith("P2", u.m(p1), u.m(svn), u.m(git1));
    ScheduleTestUtil.AddedPipeline p3 = u.saveConfigWith("P3", u.m(svn), u.m(hg));
    ScheduleTestUtil.AddedPipeline p4 = u.saveConfigWith("P4", u.m(hg));
    ScheduleTestUtil.AddedPipeline p5 = u.saveConfigWith("P5", u.m(git1), u.m(git2));
    ScheduleTestUtil.AddedPipeline p6 = u.saveConfigWith("P6", u.m(svn), u.m(p4), u.m(hg), u.m(p3), u.m(p1), u.m(p2), u.m(p5), u.m(git2));
    CruiseConfig cruiseConfig = goConfigDao.load();
    String p1_1 = u.runAndPassWithGivenMDUTimestampAndRevisionStrings(p1, u.d(i++), "s1");
    String p1_2 = u.runAndPassWithGivenMDUTimestampAndRevisionStrings(p1, u.d(i++), "s2");
    String p1_3 = u.runAndPassWithGivenMDUTimestampAndRevisionStrings(p1, u.d(i++), "s3");
    String p1_4 = u.runAndPassWithGivenMDUTimestampAndRevisionStrings(p1, u.d(i++), "s4");
    String p1_5 = u.runAndPassWithGivenMDUTimestampAndRevisionStrings(p1, u.d(i++), "s6");
    String p1_6 = u.runAndPassWithGivenMDUTimestampAndRevisionStrings(p1, u.d(i++), "s8");
    String p2_1 = u.runAndPassWithGivenMDUTimestampAndRevisionStrings(p2, u.d(i++), p1_1, "s1", "g1-2");
    String p2_2 = u.runAndPassWithGivenMDUTimestampAndRevisionStrings(p2, u.d(i++), p1_2, "s2", "g1-3");
    String p2_3 = u.runAndPassWithGivenMDUTimestampAndRevisionStrings(p2, u.d(i++), p1_4, "s5", "g1-5");
    String p2_4 = u.runAndPassWithGivenMDUTimestampAndRevisionStrings(p2, u.d(i++), p1_5, "s6", "g1-6");
    String p3_1 = u.runAndPassWithGivenMDUTimestampAndRevisionStrings(p3, u.d(i++), "s1", "h1");
    String p3_2 = u.runAndPassWithGivenMDUTimestampAndRevisionStrings(p3, u.d(i++), "s2", "h3");
    String p3_3 = u.runAndPassWithGivenMDUTimestampAndRevisionStrings(p3, u.d(i++), "s3", "h5");
    String p3_4 = u.runAndPassWithGivenMDUTimestampAndRevisionStrings(p3, u.d(i++), "s7", "h6");
    String p4_1 = u.runAndPassWithGivenMDUTimestampAndRevisionStrings(p4, u.d(i++), "h1");
    String p4_2 = u.runAndPassWithGivenMDUTimestampAndRevisionStrings(p4, u.d(i++), "h3");
    String p4_3 = u.runAndPassWithGivenMDUTimestampAndRevisionStrings(p4, u.d(i++), "h6");
    String p4_4 = u.runAndPassWithGivenMDUTimestampAndRevisionStrings(p4, u.d(i++), "h7");
    String p5_1 = u.runAndPassWithGivenMDUTimestampAndRevisionStrings(p5, u.d(i++), "g1-2", "g2-2");
    String p5_2 = u.runAndPassWithGivenMDUTimestampAndRevisionStrings(p5, u.d(i++), "g1-3", "g2-3");
    String p5_3 = u.runAndPassWithGivenMDUTimestampAndRevisionStrings(p5, u.d(i++), "g1-6", "g2-5");
    MaterialRevisions given = u.mrs(u.mr(rel(git2, p6), true, git2_revs), u.mr(rel(p5, p6), false, p5_3), u.mr(rel(p2, p6), false, p2_4), u.mr(rel(p1, p6), true, p1_6), u.mr(rel(p3, p6), false, p3_4), u.mr(rel(hg, p6), false, hg_revs), u.mr(rel(p4, p6), false, p4_4), u.mr(rel(svn, p6), true, svn_revs));
    MaterialRevisions expected = u.mrs(u.mr(rel(git2, p6), true, "g2-3"), u.mr(rel(p5, p6), false, p5_2), u.mr(rel(p2, p6), false, p2_2), u.mr(rel(p1, p6), false, p1_2), u.mr(rel(p3, p6), false, p3_2), u.mr(rel(hg, p6), false, "h3"), u.mr(rel(p4, p6), false, p4_2), u.mr(rel(svn, p6), true, "s2"));
    MaterialRevisions finalRevisions = getRevisionsBasedOnDependencies(p6, cruiseConfig, given);
    assertThat(finalRevisions, is(expected));
}
Also used : GitMaterial(com.thoughtworks.go.config.materials.git.GitMaterial) MaterialRevisions(com.thoughtworks.go.domain.MaterialRevisions) SvnMaterial(com.thoughtworks.go.config.materials.svn.SvnMaterial) HgMaterial(com.thoughtworks.go.config.materials.mercurial.HgMaterial) CaseInsensitiveString(com.thoughtworks.go.config.CaseInsensitiveString) CruiseConfig(com.thoughtworks.go.config.CruiseConfig) Test(org.junit.Test)

Aggregations

SvnMaterial (com.thoughtworks.go.config.materials.svn.SvnMaterial)136 Test (org.junit.Test)113 MaterialRevisions (com.thoughtworks.go.domain.MaterialRevisions)44 CaseInsensitiveString (com.thoughtworks.go.config.CaseInsensitiveString)37 DependencyMaterial (com.thoughtworks.go.config.materials.dependency.DependencyMaterial)21 HgMaterial (com.thoughtworks.go.config.materials.mercurial.HgMaterial)20 MaterialRevision (com.thoughtworks.go.domain.MaterialRevision)19 BuildCause (com.thoughtworks.go.domain.buildcause.BuildCause)19 GitMaterial (com.thoughtworks.go.config.materials.git.GitMaterial)18 MaterialConfigs (com.thoughtworks.go.config.materials.MaterialConfigs)17 Material (com.thoughtworks.go.domain.materials.Material)16 Modification (com.thoughtworks.go.domain.materials.Modification)16 Date (java.util.Date)14 Materials (com.thoughtworks.go.config.materials.Materials)13 Username (com.thoughtworks.go.server.domain.Username)9 File (java.io.File)9 P4Material (com.thoughtworks.go.config.materials.perforce.P4Material)8 CoreMatchers.containsString (org.hamcrest.CoreMatchers.containsString)8 PipelineConfig (com.thoughtworks.go.config.PipelineConfig)7 SystemEnvironment (com.thoughtworks.go.util.SystemEnvironment)7