Skip to content

Commit

Permalink
Merge branch 'JENKINS-17545'
Browse files Browse the repository at this point in the history
  • Loading branch information
fcamblor committed May 23, 2013
2 parents 3310ced + c3d21f8 commit 53ed117
Show file tree
Hide file tree
Showing 18 changed files with 292 additions and 13 deletions.
@@ -1,46 +1,42 @@
package hudson.plugins.scm_sync_configuration.strategies.model;

import com.google.common.base.Function;
import com.google.common.collect.Collections2;
import hudson.model.Hudson;
import hudson.model.Saveable;
import hudson.plugins.scm_sync_configuration.JenkinsFilesHelper;
import org.apache.tools.ant.DirectoryScanner;

import javax.annotation.Nullable;
import java.io.File;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;

public class PatternsEntityMatcher implements ConfigurationEntityMatcher {

private String[] patterns;
private String[] includesPatterns;

public PatternsEntityMatcher(String[] patterns) {
this.patterns = patterns;
}
public PatternsEntityMatcher(String[] includesPatterns){
this.includesPatterns = includesPatterns;
}

public boolean matches(Saveable saveable, File file) {
if (file == null) {
return false;
}
String filePathRelativeToHudsonRoot = JenkinsFilesHelper.buildPathRelativeToHudsonRoot(file);
for(String pattern : patterns) {
if(DirectoryScanner.match(pattern, filePathRelativeToHudsonRoot)){
for(String matchingFile : matchingFilesFrom(Hudson.getInstance().getRootDir())) {
if(matchingFile.equals(filePathRelativeToHudsonRoot)){
return true;
}
}
return false;
}

public List<String> getIncludes(){
return Arrays.asList(patterns);
return Arrays.asList(includesPatterns);
}

public String[] matchingFilesFrom(File rootDirectory) {
DirectoryScanner scanner = new DirectoryScanner();
scanner.setIncludes(patterns);
scanner.setIncludes(includesPatterns);
scanner.setBasedir(rootDirectory);
scanner.scan();
return scanner.getIncludedFiles();
Expand Down
Expand Up @@ -354,6 +354,10 @@ public void shouldReloadAllFilesUpdateScmAndReloadAllFilesWithFileAdd() throws T

@Test
public void shouldFileWhichHaveToBeInSCM() throws Throwable {
// IMPORTANT NOTE :
// For every tested files in this test, file path should exist in
// HudsonExtensionsTest.shouldFileWhichHaveToBeInSCM/ directory

assertStrategy(JenkinsConfigScmSyncStrategy.class, Mockito.mock(Saveable.class), "config.xml");
assertStrategy(BasicPluginsConfigScmSyncStrategy.class, Mockito.mock(Saveable.class), "hudson.scm.SubversionSCM.xml");
assertStrategy(null, Mockito.mock(Saveable.class), "hudson.config.xml2");
Expand All @@ -377,5 +381,13 @@ private void assertStrategy(Class<? extends ScmSyncStrategy> expectedStrategyCla
assertThat(strategy, instanceOf(expectedStrategyClass));
}
}


@Override
protected String getHudsonRootBaseTemplate(){
if("shouldFileWhichHaveToBeInSCM".equals(testName.getMethodName())){
return "HudsonExtensionsTest.shouldFileWhichHaveToBeInSCM/";
}

return "hudsonRootBaseTemplate/";
}
}
@@ -0,0 +1,68 @@
package hudson.plugins.scm_sync_configuration.strategies.impl;

import hudson.XmlFile;
import hudson.model.Item;
import hudson.model.Job;
import hudson.plugins.scm_sync_configuration.ScmSyncConfigurationPlugin;
import hudson.plugins.scm_sync_configuration.extensions.ScmSyncConfigurationItemListener;
import hudson.plugins.scm_sync_configuration.extensions.ScmSyncConfigurationSaveableListener;
import hudson.plugins.scm_sync_configuration.strategies.ScmSyncStrategy;
import hudson.plugins.scm_sync_configuration.util.ScmSyncConfigurationBaseTest;
import hudson.plugins.scm_sync_configuration.util.ScmSyncConfigurationPluginBaseTest;
import hudson.plugins.test.utils.scms.ScmUnderTest;
import hudson.plugins.test.utils.scms.ScmUnderTestSubversion;
import org.codehaus.plexus.PlexusContainerException;
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
import org.codehaus.plexus.util.FileUtils;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;

import java.io.File;
import java.io.IOException;

import static org.mockito.Mockito.when;

/**
* @author fcamblor
*/
public class JobConfigScmSyncStrategyTest extends ScmSyncConfigurationPluginBaseTest {

private ScmSyncConfigurationSaveableListener sscConfigurationSaveableListener;

public JobConfigScmSyncStrategyTest() {
super(new ScmUnderTestSubversion());
}

@Before
public void initObjectsUnderTests() throws Throwable{
this.sscConfigurationSaveableListener = new ScmSyncConfigurationSaveableListener();
}

protected String getHudsonRootBaseTemplate(){
return "jobConfigStrategyTemplate/";
}

// Reproducing JENKINS-17545
@Test
public void shouldConfigInSubmodulesNotSynced() throws ComponentLookupException, PlexusContainerException, IOException {
// Initializing the repository...
createSCMMock();

// Synchronizing hudson config files
sscBusiness.synchronizeAllConfigs(ScmSyncConfigurationPlugin.AVAILABLE_STRATEGIES);

File subModuleConfigFile = new File(getCurrentHudsonRootDirectory() + "/jobs/fakeJob/modules/submodule/config.xml" );

// Creating fake new item
Job mockedItem = Mockito.mock(Job.class);
when(mockedItem.getRootDir()).thenReturn(subModuleConfigFile.getParentFile());

sscConfigurationSaveableListener.onChange(mockedItem, new XmlFile(subModuleConfigFile));

verifyCurrentScmContentMatchesHierarchy("expected-scm-hierarchies/JobConfigScmSyncStrategyTest.shouldConfigInSubmodulesNotSynced/");

assertStatusManagerIsOk();
}

}
@@ -0,0 +1,31 @@
<?xml version='1.0' encoding='UTF-8'?>
<hudson>
<version>1.339</version>
<numExecutors>2</numExecutors>
<mode>NORMAL</mode>
<useSecurity>true</useSecurity>
<authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy"/>
<securityRealm class="hudson.security.HudsonPrivateSecurityRealm">
<disableSignup>true</disableSignup>
</securityRealm>
<systemMessage>Welcome !</systemMessage>
<jdks />
<clouds/>
<slaves/>
<quietPeriod>5</quietPeriod>
<scmCheckoutRetryCount>0</scmCheckoutRetryCount>
<views>
<hudson.model.AllView>
<owner class="hudson" reference="../../.."/>
<name>All</name>
<filterExecutors>false</filterExecutors>
<filterQueue>false</filterQueue>
</hudson.model.AllView>
</views>
<primaryView>All</primaryView>
<slaveAgentPort>0</slaveAgentPort>
<label></label>
<nodeProperties/>
<globalNodeProperties/>
<disabledAdministrativeMonitors/>
</hudson>
Empty file.
@@ -0,0 +1,21 @@
<?xml version='1.0' encoding='UTF-8'?>
<maven2-moduleset>
<actions/>
<description></description>
<keepDependencies>false</keepDependencies>
<properties/>
<scm class="hudson.scm.NullSCM"/>
<canRoam>true</canRoam>
<disabled>false</disabled>
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
<triggers class="vector"/>
<concurrentBuild>false</concurrentBuild>
<aggregatorStyleBuild>true</aggregatorStyleBuild>
<incrementalBuild>false</incrementalBuild>
<usePrivateRepository>false</usePrivateRepository>
<ignoreUpstremChanges>false</ignoreUpstremChanges>
<archivingDisabled>false</archivingDisabled>
<reporters/>
<publishers/>
<buildWrappers/>
</maven2-moduleset>
@@ -0,0 +1,21 @@
<?xml version='1.0' encoding='UTF-8'?>
<maven2-moduleset>
<actions/>
<description></description>
<keepDependencies>false</keepDependencies>
<properties/>
<scm class="hudson.scm.NullSCM"/>
<canRoam>true</canRoam>
<disabled>false</disabled>
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
<triggers class="vector"/>
<concurrentBuild>false</concurrentBuild>
<aggregatorStyleBuild>true</aggregatorStyleBuild>
<incrementalBuild>false</incrementalBuild>
<usePrivateRepository>false</usePrivateRepository>
<ignoreUpstremChanges>false</ignoreUpstremChanges>
<archivingDisabled>false</archivingDisabled>
<reporters/>
<publishers/>
<buildWrappers/>
</maven2-moduleset>
@@ -0,0 +1,21 @@
<?xml version='1.0' encoding='UTF-8'?>
<maven2-moduleset>
<actions/>
<description></description>
<keepDependencies>false</keepDependencies>
<properties/>
<scm class="hudson.scm.NullSCM"/>
<canRoam>true</canRoam>
<disabled>false</disabled>
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
<triggers class="vector"/>
<concurrentBuild>false</concurrentBuild>
<aggregatorStyleBuild>true</aggregatorStyleBuild>
<incrementalBuild>false</incrementalBuild>
<usePrivateRepository>false</usePrivateRepository>
<ignoreUpstremChanges>false</ignoreUpstremChanges>
<archivingDisabled>false</archivingDisabled>
<reporters/>
<publishers/>
<buildWrappers/>
</maven2-moduleset>
Empty file.
@@ -0,0 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<hudson.plugins.scm__sync__configuration.ScmSyncConfigurationPlugin version="1">
<scmRepositoryUrl>scm:svn:https://myrepo/synchronizedDirectory/</scmRepositoryUrl>
<scm class="hudson.plugins.scm_sync_configuration.scms.ScmSyncSubversionSCM"/>
</hudson.plugins.scm__sync__configuration.ScmSyncConfigurationPlugin>
@@ -0,0 +1,21 @@
<?xml version='1.0' encoding='UTF-8'?>
<maven2-moduleset>
<actions/>
<description></description>
<keepDependencies>false</keepDependencies>
<properties/>
<scm class="hudson.scm.NullSCM"/>
<canRoam>true</canRoam>
<disabled>false</disabled>
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
<triggers class="vector"/>
<concurrentBuild>false</concurrentBuild>
<aggregatorStyleBuild>true</aggregatorStyleBuild>
<incrementalBuild>false</incrementalBuild>
<usePrivateRepository>false</usePrivateRepository>
<ignoreUpstremChanges>false</ignoreUpstremChanges>
<archivingDisabled>false</archivingDisabled>
<reporters/>
<publishers/>
<buildWrappers/>
</maven2-moduleset>
Empty file.
31 changes: 31 additions & 0 deletions src/test/resources/jobConfigStrategyTemplate/config.xml
@@ -0,0 +1,31 @@
<?xml version='1.0' encoding='UTF-8'?>
<hudson>
<version>1.339</version>
<numExecutors>2</numExecutors>
<mode>NORMAL</mode>
<useSecurity>true</useSecurity>
<authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy"/>
<securityRealm class="hudson.security.HudsonPrivateSecurityRealm">
<disableSignup>true</disableSignup>
</securityRealm>
<systemMessage>Welcome !</systemMessage>
<jdks />
<clouds/>
<slaves/>
<quietPeriod>5</quietPeriod>
<scmCheckoutRetryCount>0</scmCheckoutRetryCount>
<views>
<hudson.model.AllView>
<owner class="hudson" reference="../../.."/>
<name>All</name>
<filterExecutors>false</filterExecutors>
<filterQueue>false</filterQueue>
</hudson.model.AllView>
</views>
<primaryView>All</primaryView>
<slaveAgentPort>0</slaveAgentPort>
<label></label>
<nodeProperties/>
<globalNodeProperties/>
<disabledAdministrativeMonitors/>
</hudson>
@@ -0,0 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<hudson.tasks.Shell_-DescriptorImpl>
<helpRedirect/>
<shell>/bin/bash</shell>
</hudson.tasks.Shell_-DescriptorImpl>
@@ -0,0 +1,21 @@
<?xml version='1.0' encoding='UTF-8'?>
<maven2-moduleset>
<actions/>
<description></description>
<keepDependencies>false</keepDependencies>
<properties/>
<scm class="hudson.scm.NullSCM"/>
<canRoam>true</canRoam>
<disabled>false</disabled>
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
<triggers class="vector"/>
<concurrentBuild>false</concurrentBuild>
<aggregatorStyleBuild>true</aggregatorStyleBuild>
<incrementalBuild>false</incrementalBuild>
<usePrivateRepository>false</usePrivateRepository>
<ignoreUpstremChanges>false</ignoreUpstremChanges>
<archivingDisabled>false</archivingDisabled>
<reporters/>
<publishers/>
<buildWrappers/>
</maven2-moduleset>
@@ -0,0 +1,21 @@
<?xml version='1.0' encoding='UTF-8'?>
<maven2-moduleset>
<actions/>
<description></description>
<keepDependencies>false</keepDependencies>
<properties/>
<scm class="hudson.scm.NullSCM"/>
<canRoam>true</canRoam>
<disabled>false</disabled>
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
<triggers class="vector"/>
<concurrentBuild>false</concurrentBuild>
<aggregatorStyleBuild>true</aggregatorStyleBuild>
<incrementalBuild>false</incrementalBuild>
<usePrivateRepository>false</usePrivateRepository>
<ignoreUpstremChanges>false</ignoreUpstremChanges>
<archivingDisabled>false</archivingDisabled>
<reporters/>
<publishers/>
<buildWrappers/>
</maven2-moduleset>
@@ -0,0 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<hudson.plugins.scm__sync__configuration.ScmSyncConfigurationPlugin version="1">
<scmRepositoryUrl>scm:svn:https://myrepo/synchronizedDirectory/</scmRepositoryUrl>
<scm class="hudson.plugins.scm_sync_configuration.scms.ScmSyncSubversionSCM"/>
</hudson.plugins.scm__sync__configuration.ScmSyncConfigurationPlugin>

0 comments on commit 53ed117

Please sign in to comment.