diff --git a/core/pom.xml b/core/pom.xml index 85e168a2df2583592f98bcc3f4f1e2cb35ea1319..2f2870fb98cee6f2a40d705bc12c675308f89d96 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -179,6 +179,12 @@ THE SOFTWARE. tests test + + org.hamcrest + hamcrest-library + 1.3 + test + com.infradna.tool diff --git a/core/src/test/java/jenkins/security/ClassFilterImplSanityTest.java b/core/src/test/java/jenkins/security/ClassFilterImplSanityTest.java new file mode 100644 index 0000000000000000000000000000000000000000..e665cd7bfef18e40093b0f74890b07e43fa6f2d0 --- /dev/null +++ b/core/src/test/java/jenkins/security/ClassFilterImplSanityTest.java @@ -0,0 +1,61 @@ +/* + * The MIT License + * + * Copyright 2017-2018 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package jenkins.security; + +import hudson.util.CopyOnWriteMap; +import org.apache.commons.io.IOUtils; +import org.junit.Test; + +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.TreeSet; +import java.util.stream.Collectors; + +import static org.junit.Assert.assertThat; +import static org.hamcrest.Matchers.*; + +/** + * Tests for {@link ClassFilterImpl}. + * More tests are available in the "test" module. + */ +public class ClassFilterImplSanityTest { + + @Test + public void whitelistSanity() throws Exception { + try (InputStream is = ClassFilterImpl.class.getResourceAsStream("whitelisted-classes.txt")) { + List lines = IOUtils.readLines(is, StandardCharsets.UTF_8).stream().filter(line -> !line.matches("#.*|\\s*")).collect(Collectors.toList()); + TreeSet set = new TreeSet<>(lines); + assertThat("whitelist is NOT ordered", new TreeSet<>(lines), contains(lines.toArray(new String[0]))); + for (String line : lines) { + try { + Class.forName(line); + } catch (ClassNotFoundException x) { + System.err.println("skipping checks of unknown class " + line); + } + } + } + } + +} diff --git a/test/src/test/java/jenkins/security/ClassFilterImplTest.java b/test/src/test/java/jenkins/security/ClassFilterImplTest.java index c3ca2c3bac72f48f3963ce6fc3adc8766d6aff60..b94601d0d973391f234b3e87108f64aa38bf6df3 100644 --- a/test/src/test/java/jenkins/security/ClassFilterImplTest.java +++ b/test/src/test/java/jenkins/security/ClassFilterImplTest.java @@ -66,22 +66,6 @@ public class ClassFilterImplTest { @Rule public LoggerRule logging = new LoggerRule().record(ClassFilterImpl.class, Level.FINE); - @WithoutJenkins - @Test - public void whitelistSanity() throws Exception { - try (InputStream is = ClassFilterImpl.class.getResourceAsStream("whitelisted-classes.txt")) { - List lines = IOUtils.readLines(is, StandardCharsets.UTF_8).stream().filter(line -> !line.matches("#.*|\\s*")).collect(Collectors.toList()); - assertThat("whitelist is ordered", new TreeSet<>(lines), contains(lines.toArray(new String[0]))); - for (String line : lines) { - try { - Class.forName(line); - } catch (ClassNotFoundException x) { - System.err.println("skipping checks of unknown class " + line); - } - } - } - } - @Test public void masterToSlaveBypassesWhitelist() throws Exception { assumeThat(ClassFilterImpl.WHITELISTED_CLASSES, not(contains(LinkedListMultimap.class.getName())));