# HG changeset patch # User Severin Gehwolf # Date 1488203570 -3600 # Node ID 02f866dff054b15307f0457d84ea5583f127ca08 # Parent 4d7312c27c6c59909d75bdaaca8ca2f135dca288 Test fixes for in-container build. - Some container builds might have THERMOSTAT_HOME/USER_THERMOSTAT_HOME set, which causes some tests to fail. - Other tests assume the environment USER is always defined. It's not the case for a container build. - Don't assume the system is UTF-8 for tests. - Don't assume any specific order of issuers returned from keystore files. Reviewed-by: neugens Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2017-March/022307.html diff -r 4d7312c27c6c -r 02f866dff054 common/core/src/test/java/com/redhat/thermostat/common/internal/CustomX509TrustManagerTest.java --- a/common/core/src/test/java/com/redhat/thermostat/common/internal/CustomX509TrustManagerTest.java Thu Mar 02 10:52:18 2017 -0500 +++ b/common/core/src/test/java/com/redhat/thermostat/common/internal/CustomX509TrustManagerTest.java Mon Feb 27 14:52:50 2017 +0100 @@ -38,6 +38,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.Mockito.mock; @@ -47,12 +48,13 @@ import java.net.URLDecoder; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; +import java.util.HashSet; +import java.util.Set; import javax.net.ssl.X509TrustManager; import org.junit.Test; -import com.redhat.thermostat.common.internal.CustomX509TrustManager; import com.redhat.thermostat.common.ssl.SslInitException; /** @@ -133,12 +135,13 @@ X509TrustManager tm = new CustomX509TrustManager((X509TrustManager)null, ourKeyStore, "testpassword"); // keystore contains private key of itself + imported CA cert assertEquals(2, tm.getAcceptedIssuers().length); - String issuerNameCustomCA = "1.2.840.113549.1.9.1=#16126a6572626f6161407265646861742e636f6d,CN=test.example.com,O=Red Hat Inc.,L=Saalfelden,ST=Salzburg,C=AT"; - String issuerNameKeystoreCA = "CN=Unknown,OU=Unknown,O=Unknown,L=Unknown,ST=Unknown,C=Unknown"; - assertEquals(issuerNameCustomCA, tm.getAcceptedIssuers()[0] - .getIssuerX500Principal().getName()); - assertEquals(issuerNameKeystoreCA, tm.getAcceptedIssuers()[1] - .getIssuerX500Principal().getName()); + Set trustedIssuers = new HashSet<>(); + trustedIssuers.add("1.2.840.113549.1.9.1=#16126a6572626f6161407265646861742e636f6d,CN=test.example.com,O=Red Hat Inc.,L=Saalfelden,ST=Salzburg,C=AT"); + trustedIssuers.add("CN=Unknown,OU=Unknown,O=Unknown,L=Unknown,ST=Unknown,C=Unknown"); + // Don't assume a specific order in which issuers are returned + for (X509Certificate issuer: tm.getAcceptedIssuers()) { + assertTrue(trustedIssuers.contains(issuer.getIssuerX500Principal().getName())); + } } private static String decodeFilePath(URL url) { diff -r 4d7312c27c6c -r 02f866dff054 common/portability/src/test/java/com/redhat/thermostat/common/portability/internal/linux/LinuxProcessEnvironmentBuilderImplTest.java --- a/common/portability/src/test/java/com/redhat/thermostat/common/portability/internal/linux/LinuxProcessEnvironmentBuilderImplTest.java Thu Mar 02 10:52:18 2017 -0500 +++ b/common/portability/src/test/java/com/redhat/thermostat/common/portability/internal/linux/LinuxProcessEnvironmentBuilderImplTest.java Mon Feb 27 14:52:50 2017 +0100 @@ -41,9 +41,13 @@ import org.mockito.Mockito; import java.io.ByteArrayInputStream; +import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.util.List; import java.util.Map; import java.util.Random; @@ -61,16 +65,22 @@ public class LinuxProcessEnvironmentBuilderImplTest { + private static final String ROOT_CGROUP_SCOPE = "/"; + private static final String PID_1_PROC_CGROUP = "/proc/1/cgroup"; private final Random r = new Random(); @Test public void testBasicBuild() { Assume.assumeTrue(OS.IS_LINUX); ProcDataSource dataSource = new ProcDataSource(); - Map result = new LinuxProcessEnvironmentBuilderImpl(dataSource).build(TestUtils.getProcessId()); + int pid = TestUtils.getProcessId(); + Map result = new LinuxProcessEnvironmentBuilderImpl(dataSource).build(pid); assertNotNull(result); assertFalse(result.isEmpty()); - assertTrue(result.containsKey("USER")); + // assert this only for the non-container case. + if (!isContainer()) { + assertTrue(result.containsKey("USER")); + } } @Test @@ -133,5 +143,25 @@ } return result; } + + /* + * Heuristic: /proc/1/cgroup => A:B:C where C == '/' outside a container. + * where C == '/system.slice/docker-.scope in a container + */ + private boolean isContainer() { + try { + List lines = Files.readAllLines(new File(PID_1_PROC_CGROUP).toPath(), Charset.forName("UTF-8")); + String[] tokens = lines.get(0).split(":"); + if (tokens.length == 3) { + return !(tokens[2].equals(ROOT_CGROUP_SCOPE)); + } else { + // unknown format? + return false; + } + } catch (Throwable e) { + // Default to false + return false; + } + } } diff -r 4d7312c27c6c -r 02f866dff054 config/src/test/java/com/redhat/thermostat/shared/config/internal/CommonPathsImplTest.java --- a/config/src/test/java/com/redhat/thermostat/shared/config/internal/CommonPathsImplTest.java Thu Mar 02 10:52:18 2017 -0500 +++ b/config/src/test/java/com/redhat/thermostat/shared/config/internal/CommonPathsImplTest.java Mon Feb 27 14:52:50 2017 +0100 @@ -145,7 +145,7 @@ try { thermostatHome = setupTempDir("CommonPathsImplTest.testUserLocations", THERMOSTAT_HOME_PROPERTY); - String userHome = System.getProperty("user.home") + s + ".thermostat"; + String userHome = getUserHome(); CommonPaths config = new CommonPathsImpl(); Assert.assertEquals(concatPath(userHome, "etc", "agent.properties"), @@ -170,11 +170,32 @@ } } } + + // Duplicated from CommonPathsImpl.UnprivilegedUserDirectories + private String getUserHome() { + String userHome = System.getProperty(USER_THERMOSTAT_HOME_PROPERTY); + if (userHome == null) { + userHome = System.getenv(USER_THERMOSTAT_HOME_PROPERTY); + } + if (userHome == null) { + userHome = System.getProperty("user.home") + s + ".thermostat"; + } + return userHome; + } @Test public void testPrivilegedUserLocations() throws InvalidConfigurationException, IOException { String thermostatHomeAndFakeRoot = null; try { + // It's not safe to create directories in this setup. It's treated + // as a prefix "/tmp/foo" for example in this config. Creating + // directories in a random prefix is not a good idea. Not even for + // tests. Skip the test in this case + String userHomeEnv = System.getenv(USER_THERMOSTAT_HOME_PROPERTY); + if (userHomeEnv != null) { + System.out.println("USER_TEHMOSTAT_HOME set to: " + userHomeEnv + " skipping test!"); + return; + } thermostatHomeAndFakeRoot = setupTempDir("CommonPathsImplTest.testPrivilegedUserLocations", THERMOSTAT_HOME_PROPERTY); System.setProperty(THERMOSTAT_SYSTEM_USER_PROPERTY, ""); @@ -243,6 +264,9 @@ @Test public void instantiationThrowsExceptionUndefinedThermostatHome() { + // This test does not make sense when THERMOSTAT_HOME env var is defined + // externally. Ignore in this case. + Assume.assumeTrue(System.getenv(THERMOSTAT_HOME_PROPERTY) == null); try { new CommonPathsImpl(); // The web archive uses this. See WebStorageEndPoint#init(); diff -r 4d7312c27c6c -r 02f866dff054 dev/perflog-analyzer/src/main/java/com/redhat/thermostat/dev/perf/logs/internal/LogAnalyzerImpl.java --- a/dev/perflog-analyzer/src/main/java/com/redhat/thermostat/dev/perf/logs/internal/LogAnalyzerImpl.java Thu Mar 02 10:52:18 2017 -0500 +++ b/dev/perflog-analyzer/src/main/java/com/redhat/thermostat/dev/perf/logs/internal/LogAnalyzerImpl.java Mon Feb 27 14:52:50 2017 +0100 @@ -37,8 +37,10 @@ package com.redhat.thermostat.dev.perf.logs.internal; import java.io.FileNotFoundException; -import java.io.FileReader; import java.io.IOException; +import java.io.Reader; +import java.nio.charset.Charset; +import java.nio.file.Files; import java.util.Scanner; import com.redhat.thermostat.dev.perf.logs.LogAnalyzer; @@ -102,8 +104,8 @@ } private void readFileCollectStats(final StatsParser parser, final LogFileStats stats) throws ReadException { - try (FileReader freader = new FileReader(config.getLogFile()); - Scanner scanner = new Scanner(freader)) { + try (Reader freader = Files.newBufferedReader(config.getLogFile().toPath(), Charset.forName("UTF-8")); + Scanner scanner = new Scanner(freader)) { while (scanner.hasNextLine()) { String line = scanner.nextLine(); LineStat stat = parser.parse(line); diff -r 4d7312c27c6c -r 02f866dff054 dev/perflog-analyzer/src/test/java/com/redhat/thermostat/dev/perf/logs/internal/StatementStatsTest.java --- a/dev/perflog-analyzer/src/test/java/com/redhat/thermostat/dev/perf/logs/internal/StatementStatsTest.java Thu Mar 02 10:52:18 2017 -0500 +++ b/dev/perflog-analyzer/src/test/java/com/redhat/thermostat/dev/perf/logs/internal/StatementStatsTest.java Mon Feb 27 14:52:50 2017 +0100 @@ -44,6 +44,7 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.PrintStream; +import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Date; import java.util.HashSet; @@ -211,14 +212,14 @@ } @Test - public void verifySummaryPrinting() { + public void verifySummaryPrinting() throws UnsupportedEncodingException { when(state.getDescriptor(desc1Id)).thenReturn(desc1); when(state.getDescriptor(desc2Id)).thenReturn(desc2); when(state.getDescriptor(desc3Id)).thenReturn(desc3); StatsConfig config = new StatsConfig(new File("foo-bar"), SortBy.AVG, Direction.DSC, false); ByteArrayOutputStream baos = new ByteArrayOutputStream(); - PrintStream pStream = new PrintStream(baos); + PrintStream pStream = new PrintStream(baos, false, "UTF-8"); stats.setConfig(config); stats.printSummary(pStream); String expected = "Statement statistics (6 records): 3 distinct statements (5 reads, 1 writes)\n" + @@ -227,7 +228,7 @@ "Total #: 2, 300µs (min), 333µs (max), 316.50µs (avg), DESCRIPTOR: QUERY foo-bar WHERE 'x' = ?l\n" + "Total #: 3, 2ms (min), 120ms (max), 44.67ms (avg), DESCRIPTOR: QUERY foo WHERE 'a' = ?s\n" + "Total #: 1, 44ns (min), 44ns (max), 44.00ns (avg), DESCRIPTOR: ADD foo SET 'a' = ?s\n\n"; - String summary = baos.toString(); + String summary = baos.toString("UTF-8"); assertEquals(expected, summary); } diff -r 4d7312c27c6c -r 02f866dff054 dev/perflog-analyzer/src/test/java/com/redhat/thermostat/dev/perf/logs/internal/StatsParserBuilderTest.java --- a/dev/perflog-analyzer/src/test/java/com/redhat/thermostat/dev/perf/logs/internal/StatsParserBuilderTest.java Thu Mar 02 10:52:18 2017 -0500 +++ b/dev/perflog-analyzer/src/test/java/com/redhat/thermostat/dev/perf/logs/internal/StatsParserBuilderTest.java Mon Feb 27 14:52:50 2017 +0100 @@ -126,7 +126,7 @@ public void canParseBasicLogFile() throws FileNotFoundException { StatsParser parser = StatsParserBuilder.build(); File perfLogFile = new File(decodeFilePath(this.getClass().getResource("/testPerfLogFile.log"))); - Scanner scanner = new Scanner(perfLogFile); + Scanner scanner = new Scanner(perfLogFile, "UTF-8"); ArrayList stats = new ArrayList<>(); while (scanner.hasNextLine()) { String line = scanner.nextLine(); @@ -150,7 +150,7 @@ public void canParseLogFileWithMultipleLogTags() throws FileNotFoundException, IllegalFilterException, ParseException { StatsParser parser = StatsParserBuilder.build(); File perfLogFile = new File(decodeFilePath(this.getClass().getResource("/perflogMultipleLogTags.log"))); - Scanner scanner = new Scanner(perfLogFile); + Scanner scanner = new Scanner(perfLogFile, "UTF-8"); LogFileStats stats = new LogFileStats(new SharedStatementState(), null); // add composite filters for queue stats. LineStatsFilter qFrontFilter = new LogTagStatsFilterDecorator<>(new QueueStatsFilter(), LogTag.STORAGE_FRONT_END); diff -r 4d7312c27c6c -r 02f866dff054 web/server/src/test/java/com/redhat/thermostat/web/server/PropertySettingServletContextListenerTest.java --- a/web/server/src/test/java/com/redhat/thermostat/web/server/PropertySettingServletContextListenerTest.java Thu Mar 02 10:52:18 2017 -0500 +++ b/web/server/src/test/java/com/redhat/thermostat/web/server/PropertySettingServletContextListenerTest.java Mon Feb 27 14:52:50 2017 +0100 @@ -41,6 +41,7 @@ import javax.servlet.ServletContextEvent; import org.junit.After; +import org.junit.Assume; import org.junit.Test; import com.redhat.thermostat.common.Constants; @@ -63,6 +64,7 @@ @Test public void verifySetsProperty() { + Assume.assumeTrue(System.getenv("THERMOSTAT_HOME") == null); PropertySettingServletContextListener listener = new PropertySettingServletContextListener(); ServletContextEvent event = mock(ServletContextEvent.class); ServletContext mockContext = mock(ServletContext.class); diff -r 4d7312c27c6c -r 02f866dff054 web/server/src/test/java/com/redhat/thermostat/web/server/WebStorageEndPointUnitTest.java --- a/web/server/src/test/java/com/redhat/thermostat/web/server/WebStorageEndPointUnitTest.java Thu Mar 02 10:52:18 2017 -0500 +++ b/web/server/src/test/java/com/redhat/thermostat/web/server/WebStorageEndPointUnitTest.java Mon Feb 27 14:52:50 2017 +0100 @@ -67,6 +67,7 @@ import com.redhat.thermostat.common.internal.test.Bug; import com.redhat.thermostat.storage.core.Storage; import org.junit.After; +import org.junit.Assume; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; @@ -162,6 +163,7 @@ @Test public void initThrowsRuntimeExceptionIfThermostatHomeNotSet() { + Assume.assumeTrue(System.getenv("THERMOSTAT_HOME") == null); WebStorageEndPoint endpoint = new WebStorageEndPoint(); ServletConfig config = mock(ServletConfig.class); try { diff -r 4d7312c27c6c -r 02f866dff054 web/server/src/test/java/com/redhat/thermostat/web/server/auth/spi/PropertiesUserValidatorTest.java --- a/web/server/src/test/java/com/redhat/thermostat/web/server/auth/spi/PropertiesUserValidatorTest.java Thu Mar 02 10:52:18 2017 -0500 +++ b/web/server/src/test/java/com/redhat/thermostat/web/server/auth/spi/PropertiesUserValidatorTest.java Mon Feb 27 14:52:50 2017 +0100 @@ -48,6 +48,7 @@ import java.util.Set; import org.junit.After; +import org.junit.Assume; import org.junit.Before; import org.junit.Test; @@ -114,6 +115,7 @@ @Test public void testInit() { + Assume.assumeTrue(System.getenv("THERMOSTAT_HOME") == null); try { new PropertiesUserValidator(); fail("THERMOSTAT_HOME not set, should have failed!"); diff -r 4d7312c27c6c -r 02f866dff054 web/server/src/test/java/com/redhat/thermostat/web/server/auth/spi/RolesAmenderTest.java --- a/web/server/src/test/java/com/redhat/thermostat/web/server/auth/spi/RolesAmenderTest.java Thu Mar 02 10:52:18 2017 -0500 +++ b/web/server/src/test/java/com/redhat/thermostat/web/server/auth/spi/RolesAmenderTest.java Mon Feb 27 14:52:50 2017 +0100 @@ -54,6 +54,7 @@ import java.util.Set; import org.junit.After; +import org.junit.Assume; import org.junit.Before; import org.junit.Test; @@ -228,6 +229,7 @@ @Test public void testInit() { + Assume.assumeTrue(System.getenv("THERMOSTAT_HOME") == null); try { new RolesAmender(null); fail("THERMOSTAT_HOME not set, should have failed!");