Skip to content

Commit

Permalink
Merge pull request #149 from varyvol/JENKINS-53184
Browse files Browse the repository at this point in the history
[JENKINS-53184] Include Jenkins version as stop word
  • Loading branch information
Evaristo Gutiérrez committed Sep 11, 2018
2 parents 5702b44 + 6bc706e commit 2133220
Show file tree
Hide file tree
Showing 6 changed files with 111 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -88,18 +88,27 @@ public static ContentMappings get() {
private final Map<String, ContentMapping> mappings;

private ContentMappings(@Nonnull XmlProxy proxy) {
stopWords = proxy.stopWords == null ? getDefaultStopWords() : proxy.stopWords;
mappings = proxy.stopWords == null
if (proxy.stopWords == null) {
stopWords = getDefaultStopWords();
} else {
stopWords = proxy.stopWords;
stopWords.add(Jenkins.VERSION);
}

mappings = proxy.mappings == null
? new ConcurrentSkipListMap<>(COMPARATOR)
: proxy.mappings.stream().collect(toConcurrentMap(ContentMapping::getOriginal, Function.identity(), (a, b) -> {throw new IllegalArgumentException();}, () -> new ConcurrentSkipListMap<>(COMPARATOR)));
: proxy.mappings.stream()
.filter(mapping -> !stopWords.contains(mapping.getOriginal()))
.collect(toConcurrentMap(ContentMapping::getOriginal, Function.identity(), (a, b) -> {throw new IllegalArgumentException();}, () -> new ConcurrentSkipListMap<>(COMPARATOR)));
}

private static Set<String> getDefaultStopWords() {
return new HashSet<>(Arrays.asList(
"jenkins", "node", "master", "computer",
"item", "label", "view", "all", "unknown",
"user", "anonymous", "authenticated",
"everyone", "system", "admin"
"everyone", "system", "admin",
Jenkins.VERSION
));
}

Expand Down Expand Up @@ -160,6 +169,7 @@ public Spliterator<ContentMapping> spliterator() {
private Object writeReplace() {
XmlProxy proxy = new XmlProxy();
proxy.stopWords = new HashSet<>(stopWords);
proxy.stopWords.remove(Jenkins.VERSION);
proxy.mappings = new HashSet<>(mappings.values());
return proxy;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,11 @@ public static InetAddressContentFilter get() {
Set<ContentMapping> found = new HashSet<>();
Matcher m = IP_ADDRESS.matcher(input);
while (m.find()) {
found.add(mappings.getMappingOrCreate(m.group(), InetAddressContentFilter::newMapping));
String ip = m.group();

if (!mappings.getStopWords().contains(ip)) {
found.add(mappings.getMappingOrCreate(ip, InetAddressContentFilter::newMapping));
}
}
String filtered = input;
for (ContentMapping mapping : found) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,23 +24,39 @@
package com.cloudbees.jenkins.support.filter;

import hudson.model.FreeStyleProject;
import jenkins.model.Jenkins;
import org.assertj.core.api.Assertions;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.jvnet.hudson.test.Issue;
import org.jvnet.hudson.test.RestartableJenkinsRule;
import org.jvnet.hudson.test.recipes.LocalData;

import java.io.IOException;
import java.util.List;
import java.util.Locale;
import java.util.stream.StreamSupport;
import org.jvnet.hudson.test.RestartableJenkinsRule;

import static java.util.stream.Collectors.toList;
import static org.hamcrest.Matchers.hasEntry;
import static org.hamcrest.Matchers.hasItems;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;

public class ContentMappingsTest {

private static String originalVersion;

public class ContentMappingsTest {
@BeforeClass
public static void storeVersion() {
originalVersion = Jenkins.VERSION;
}

@AfterClass
public static void restoreVersion() {
Jenkins.VERSION = originalVersion;
}

@Rule
public RestartableJenkinsRule rr = new RestartableJenkinsRule();
Expand Down Expand Up @@ -86,4 +102,21 @@ public void contentMappingsSurviveSerializationRoundTrip() {
assertThat(ContentMappings.get().getMappings(), hasEntry(mapping.getOriginal(), mapping.getReplacement()));
});
}

@Issue("JENKINS-53184")
@Test
@LocalData
public void jenkinsVersionIncludedAsStopWord() {
rr.then(r -> {
Jenkins.VERSION = "1.2.3.4";
ContentMappings mappings = ContentMappings.get();

// Jenkins version added to stop words
assertTrue(mappings.getStopWords().contains(Jenkins.VERSION));

// Previous mappings with Jenkins version are ignored
assertTrue(mappings.getMappings().isEmpty());
});
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@
package com.cloudbees.jenkins.support.filter;

import hudson.BulkChange;
import jenkins.model.Jenkins;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
import org.jvnet.hudson.test.Issue;
Expand All @@ -39,9 +42,21 @@

public class InetAddressContentFilterTest {

private static String originalVersion;

@ClassRule
public static JenkinsRule jenkins = new JenkinsRule();

@BeforeClass
public static void storeVersion() {
originalVersion = Jenkins.VERSION;
}

@AfterClass
public static void restoreVersion() {
Jenkins.VERSION = originalVersion;
}

@Issue("JENKINS-21670")
@Test
public void shouldFilterInetAddresses() {
Expand All @@ -57,6 +72,15 @@ public void shouldFilterInetAddresses() {
}
}

@Issue("JENKINS-53184")
@Test
public void shouldNotFilterInetAddressMatchingJenkinsVersion() {
Jenkins.VERSION = "1.2.3.4";
InetAddressContentFilter filter = InetAddressContentFilter.get();
assertThat(filter.filter(Jenkins.VERSION))
.isEqualTo(Jenkins.VERSION);
}

private Gen<String> inetAddress() {
return ipv4().mix(ipv6());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version='1.1' encoding='UTF-8'?>
<com.cloudbees.jenkins.support.filter.ContentFilters plugin="support-core@2.49">
<enabled>true</enabled>
</com.cloudbees.jenkins.support.filter.ContentFilters>
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?xml version='1.1' encoding='UTF-8'?>
<com.cloudbees.jenkins.support.filter.ContentMappings resolves-to="com.cloudbees.jenkins.support.filter.ContentMappings$XmlProxy">
<stopWords>
<string>all</string>
<string>authenticated</string>
<string>item</string>
<string>everyone</string>
<string>admin</string>
<string>label</string>
<string>master</string>
<string>unknown</string>
<string>node</string>
<string>computer</string>
<string>view</string>
<string>system</string>
<string>jenkins</string>
<string>anonymous</string>
<string>user</string>
</stopWords>
<mappings>
<com.cloudbees.jenkins.support.filter.ContentMapping resolves-to="com.cloudbees.jenkins.support.filter.ContentMapping$SerializationProxy">
<original>1.2.3.4</original>
<replacement>ip_thin_idea</replacement>
</com.cloudbees.jenkins.support.filter.ContentMapping>
</mappings>
</com.cloudbees.jenkins.support.filter.ContentMappings>

0 comments on commit 2133220

Please sign in to comment.