Skip to content

Commit

Permalink
[JENKINS-43507] Fresh eyes find and fix fresh bugs
Browse files Browse the repository at this point in the history
- Need to upgrade to structs 1.9 to pick up JENKINS-45130
- Two legacy setters were not purging useless traits, and we were missing tests to verify same
- Pick up git's -alpha-4
  • Loading branch information
stephenc committed Jun 26, 2017
1 parent 471e5b7 commit b359323
Show file tree
Hide file tree
Showing 5 changed files with 105 additions and 20 deletions.
4 changes: 2 additions & 2 deletions pom.xml
Expand Up @@ -36,7 +36,7 @@
<dependency> <dependency>
<groupId>org.jenkins-ci.plugins</groupId> <groupId>org.jenkins-ci.plugins</groupId>
<artifactId>structs</artifactId> <artifactId>structs</artifactId>
<version>1.8</version> <version>1.9</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.jenkins-ci.plugins</groupId> <groupId>org.jenkins-ci.plugins</groupId>
Expand All @@ -46,7 +46,7 @@
<dependency> <dependency>
<groupId>org.jenkins-ci.plugins</groupId> <groupId>org.jenkins-ci.plugins</groupId>
<artifactId>git</artifactId> <artifactId>git</artifactId>
<version>3.4.0-alpha-1</version> <version>3.4.0-alpha-4</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.jenkins-ci.plugins</groupId> <groupId>org.jenkins-ci.plugins</groupId>
Expand Down
Expand Up @@ -529,13 +529,18 @@ public void setBuildOriginBranch(boolean buildOriginBranch) {
for (int i = 0; i < traits.size(); i++) { for (int i = 0; i < traits.size(); i++) {
SCMTrait<?> trait = traits.get(i); SCMTrait<?> trait = traits.get(i);
if (trait instanceof BranchDiscoveryTrait) { if (trait instanceof BranchDiscoveryTrait) {
traits.set(i, new BranchDiscoveryTrait( BranchDiscoveryTrait previous = (BranchDiscoveryTrait) trait;
buildOriginBranch, ((BranchDiscoveryTrait) trait).isBuildBranchesWithPR() if (buildOriginBranch || previous.isBuildBranchesWithPR()) {
)); traits.set(i, new BranchDiscoveryTrait(buildOriginBranch, previous.isBuildBranchesWithPR()));
} else {
traits.remove(i);
}
return; return;
} }
} }
traits.add(new BranchDiscoveryTrait(buildOriginBranch, false)); if (buildOriginBranch) {
traits.add(new BranchDiscoveryTrait(buildOriginBranch, false));
}
} }


/** /**
Expand Down Expand Up @@ -570,13 +575,18 @@ public void setBuildOriginBranchWithPR(boolean buildOriginBranchWithPR) {
for (int i = 0; i < traits.size(); i++) { for (int i = 0; i < traits.size(); i++) {
SCMTrait<?> trait = traits.get(i); SCMTrait<?> trait = traits.get(i);
if (trait instanceof BranchDiscoveryTrait) { if (trait instanceof BranchDiscoveryTrait) {
traits.set(i, new BranchDiscoveryTrait( BranchDiscoveryTrait previous = (BranchDiscoveryTrait) trait;
((BranchDiscoveryTrait) trait).isBuildBranch(), buildOriginBranchWithPR if (buildOriginBranchWithPR || previous.isBuildBranch()) {
)); traits.set(i, new BranchDiscoveryTrait(previous.isBuildBranch(), buildOriginBranchWithPR));
} else {
traits.remove(i);
}
return; return;
} }
} }
traits.add(new BranchDiscoveryTrait(false, buildOriginBranchWithPR)); if (buildOriginBranchWithPR) {
traits.add(new BranchDiscoveryTrait(false, buildOriginBranchWithPR));
}
} }


/** /**
Expand Down
Expand Up @@ -289,7 +289,7 @@ public GitHubSCMSource(@NonNull String repoOwner, @NonNull String repository) {
this.repository = repository; this.repository = repository;
pullRequestMetadataCache = new ConcurrentHashMap<>(); pullRequestMetadataCache = new ConcurrentHashMap<>();
pullRequestContributorCache = new ConcurrentHashMap<>(); pullRequestContributorCache = new ConcurrentHashMap<>();
this.traits = new ArrayList<>(((DescriptorImpl) getDescriptor()).getTraitsDefaults()); this.traits = new ArrayList<>();
} }


/** /**
Expand Down Expand Up @@ -606,13 +606,18 @@ public void setBuildOriginBranch(boolean buildOriginBranch) {
for (int i = 0; i < traits.size(); i++) { for (int i = 0; i < traits.size(); i++) {
SCMTrait<?> trait = traits.get(i); SCMTrait<?> trait = traits.get(i);
if (trait instanceof BranchDiscoveryTrait) { if (trait instanceof BranchDiscoveryTrait) {
traits.set(i, new BranchDiscoveryTrait( BranchDiscoveryTrait previous = (BranchDiscoveryTrait) trait;
buildOriginBranch, ((BranchDiscoveryTrait) trait).isBuildBranchesWithPR() if (buildOriginBranch || previous.isBuildBranchesWithPR()) {
)); traits.set(i, new BranchDiscoveryTrait(buildOriginBranch, previous.isBuildBranchesWithPR()));
} else {
traits.remove(i);
}
return; return;
} }
} }
traits.add(new BranchDiscoveryTrait(buildOriginBranch, false)); if (buildOriginBranch) {
traits.add(new BranchDiscoveryTrait(buildOriginBranch, false));
}
} }


@Deprecated @Deprecated
Expand All @@ -635,13 +640,18 @@ public void setBuildOriginBranchWithPR(boolean buildOriginBranchWithPR) {
for (int i = 0; i < traits.size(); i++) { for (int i = 0; i < traits.size(); i++) {
SCMTrait<?> trait = traits.get(i); SCMTrait<?> trait = traits.get(i);
if (trait instanceof BranchDiscoveryTrait) { if (trait instanceof BranchDiscoveryTrait) {
traits.set(i, new BranchDiscoveryTrait( BranchDiscoveryTrait previous = (BranchDiscoveryTrait) trait;
((BranchDiscoveryTrait) trait).isBuildBranch(), buildOriginBranchWithPR if (buildOriginBranchWithPR || previous.isBuildBranch()) {
)); traits.set(i, new BranchDiscoveryTrait(previous.isBuildBranch(), buildOriginBranchWithPR));
} else {
traits.remove(i);
}
return; return;
} }
} }
traits.add(new BranchDiscoveryTrait(false, buildOriginBranchWithPR)); if (buildOriginBranchWithPR) {
traits.add(new BranchDiscoveryTrait(false, buildOriginBranchWithPR));
}
} }


@Deprecated @Deprecated
Expand Down
Expand Up @@ -5,6 +5,7 @@
import java.util.EnumSet; import java.util.EnumSet;
import jenkins.model.Jenkins; import jenkins.model.Jenkins;
import jenkins.scm.api.mixin.ChangeRequestCheckoutStrategy; import jenkins.scm.api.mixin.ChangeRequestCheckoutStrategy;
import jenkins.scm.api.trait.SCMSourceTrait;
import jenkins.scm.api.trait.SCMTrait; import jenkins.scm.api.trait.SCMTrait;
import jenkins.scm.impl.trait.RegexSCMSourceFilterTrait; import jenkins.scm.impl.trait.RegexSCMSourceFilterTrait;
import jenkins.scm.impl.trait.WildcardSCMHeadFilterTrait; import jenkins.scm.impl.trait.WildcardSCMHeadFilterTrait;
Expand Down Expand Up @@ -1972,4 +1973,36 @@ public void given__legacyCode_withIncludes__when__setExcludes_value__then__trait
))); )));
} }


@Test
public void given__legacyCode__when__setBuildOriginBranch__then__traitsMaintained() {
GitHubSCMNavigator instance = new GitHubSCMNavigator("test");
instance.setTraits(Collections.<SCMTrait<?>>emptyList());
assertThat(instance.getTraits(), is(Collections.<SCMTrait<?>>emptyList()));
instance.setBuildOriginBranch(true);
assertThat(instance.getTraits(), contains(instanceOf(BranchDiscoveryTrait.class)));
instance.setBuildOriginBranch(false);
assertThat(instance.getTraits(), is(Collections.<SCMTrait<?>>emptyList()));

instance.setBuildOriginBranchWithPR(true);
assertThat(instance.getTraits(), contains(instanceOf(BranchDiscoveryTrait.class)));
instance.setBuildOriginBranchWithPR(false);
assertThat(instance.getTraits(), is(Collections.<SCMTrait<?>>emptyList()));

instance.setBuildOriginBranchWithPR(true);
instance.setBuildOriginBranch(true);
assertThat(instance.getTraits(), contains(instanceOf(BranchDiscoveryTrait.class)));
instance.setBuildOriginBranchWithPR(false);
assertThat(instance.getTraits(), contains(instanceOf(BranchDiscoveryTrait.class)));
instance.setBuildOriginBranch(false);
assertThat(instance.getTraits(), is(Collections.<SCMTrait<?>>emptyList()));

instance.setBuildOriginBranchWithPR(true);
instance.setBuildOriginBranch(true);
assertThat(instance.getTraits(), contains(instanceOf(BranchDiscoveryTrait.class)));
instance.setBuildOriginBranch(false);
assertThat(instance.getTraits(), contains(instanceOf(BranchDiscoveryTrait.class)));
instance.setBuildOriginBranchWithPR(false);
assertThat(instance.getTraits(), is(Collections.<SCMTrait<?>>emptyList()));
}

} }
Expand Up @@ -73,7 +73,7 @@ public void given__configuredInstance__when__uninstantiating__then__deprecatedFi
+ "repoOwner=repo-owner," + "repoOwner=repo-owner,"
+ "repository=repo," + "repository=repo,"
+ "traits=[" + "traits=["
+ "$BranchDiscoveryTrait(strategyId=1), " + "$org.jenkinsci.plugins.github_branch_source.BranchDiscoveryTrait(strategyId=1), "
+ "$OriginPullRequestDiscoveryTrait(strategyId=1), " + "$OriginPullRequestDiscoveryTrait(strategyId=1), "
+ "$ForkPullRequestDiscoveryTrait(" + "$ForkPullRequestDiscoveryTrait("
+ "strategyId=2," + "strategyId=2,"
Expand Down Expand Up @@ -433,6 +433,38 @@ public void given__instance__when__setTraits_empty__then__traitsEmpty() {
assertThat(instance.getTraits(), is(Collections.<SCMSourceTrait>emptyList())); assertThat(instance.getTraits(), is(Collections.<SCMSourceTrait>emptyList()));
} }


@Test
public void given__legacyCode__when__setBuildOriginBranch__then__traitsMaintained() {
GitHubSCMSource instance = new GitHubSCMSource("testing", "test-repo");
instance.setTraits(Collections.<SCMSourceTrait>emptyList());
assertThat(instance.getTraits(), is(Collections.<SCMSourceTrait>emptyList()));
instance.setBuildOriginBranch(true);
assertThat(instance.getTraits(), contains(instanceOf(BranchDiscoveryTrait.class)));
instance.setBuildOriginBranch(false);
assertThat(instance.getTraits(), is(Collections.<SCMSourceTrait>emptyList()));

instance.setBuildOriginBranchWithPR(true);
assertThat(instance.getTraits(), contains(instanceOf(BranchDiscoveryTrait.class)));
instance.setBuildOriginBranchWithPR(false);
assertThat(instance.getTraits(), is(Collections.<SCMSourceTrait>emptyList()));

instance.setBuildOriginBranchWithPR(true);
instance.setBuildOriginBranch(true);
assertThat(instance.getTraits(), contains(instanceOf(BranchDiscoveryTrait.class)));
instance.setBuildOriginBranchWithPR(false);
assertThat(instance.getTraits(), contains(instanceOf(BranchDiscoveryTrait.class)));
instance.setBuildOriginBranch(false);
assertThat(instance.getTraits(), is(Collections.<SCMSourceTrait>emptyList()));

instance.setBuildOriginBranchWithPR(true);
instance.setBuildOriginBranch(true);
assertThat(instance.getTraits(), contains(instanceOf(BranchDiscoveryTrait.class)));
instance.setBuildOriginBranch(false);
assertThat(instance.getTraits(), contains(instanceOf(BranchDiscoveryTrait.class)));
instance.setBuildOriginBranchWithPR(false);
assertThat(instance.getTraits(), is(Collections.<SCMSourceTrait>emptyList()));
}

@Test @Test
public void given__instance__when__setTraits__then__traitsSet() { public void given__instance__when__setTraits__then__traitsSet() {
GitHubSCMSource instance = new GitHubSCMSource("testing", "test-repo"); GitHubSCMSource instance = new GitHubSCMSource("testing", "test-repo");
Expand Down

0 comments on commit b359323

Please sign in to comment.