This is an automated email from the ASF dual-hosted git repository. upthewaterspout pushed a commit to branch feature/redis-performance-testing in repository https://gitbox.apache.org/repos/asf/geode-benchmarks.git
commit 8392f66a41d10ff977f90ef2375a7b5a8f66b2a2 Author: Dan Smith <dasm...@vmware.com> AuthorDate: Thu Apr 1 14:43:31 2021 -0700 Automatically passing properties prefixed with benchmark.system.ROLE. to JVMs Adding a way to automatically set system properties in test JVMs. Just add a property with the prefix benchmark.system.ROLE, where ROLE is the role of jvms to target. Eg benchmark.system.server.gemfire.disablePartitionedRegionBucketAck=true would set gemfire.disablePartitionedRegionBucketAck=true in the server JVMs. --- .../apache/geode/perftest/BenchmarkProperties.java | 25 ++++++++++++++++++++++ .../java/org/apache/geode/perftest/TestConfig.java | 3 +-- .../geode/perftest/BenchmarkPropertiesTest.java | 24 +++++++++++++++++++++ .../geode/perftest/TestRunnerIntegrationTest.java | 10 +++++++++ 4 files changed, 60 insertions(+), 2 deletions(-) diff --git a/harness/src/main/java/org/apache/geode/perftest/BenchmarkProperties.java b/harness/src/main/java/org/apache/geode/perftest/BenchmarkProperties.java new file mode 100644 index 0000000..0a7fd6e --- /dev/null +++ b/harness/src/main/java/org/apache/geode/perftest/BenchmarkProperties.java @@ -0,0 +1,25 @@ +package org.apache.geode.perftest; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class BenchmarkProperties { + + public static Map<String, List<String>> getDefaultJVMArgs() { + Map<String, List<String>> results = new HashMap<>(); + System.getProperties().stringPropertyNames().stream() + .filter(name -> name.startsWith("benchmark.system.")) + .forEach(name -> { + String shortName = name.replace("benchmark.system.", ""); + String[] roleAndProperty = shortName.split("\\.", 2); + String role = roleAndProperty[0]; + String property = roleAndProperty[1]; + String value = System.getProperty(name); + List<String> roleProperties = results.computeIfAbsent(role, key -> new ArrayList<>()); + roleProperties.add("-D" + property + "=" + value); + }); + return results; + } +} diff --git a/harness/src/main/java/org/apache/geode/perftest/TestConfig.java b/harness/src/main/java/org/apache/geode/perftest/TestConfig.java index 1b66fdc..1e454e6 100644 --- a/harness/src/main/java/org/apache/geode/perftest/TestConfig.java +++ b/harness/src/main/java/org/apache/geode/perftest/TestConfig.java @@ -21,7 +21,6 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -39,7 +38,7 @@ public class TestConfig implements Serializable { private final WorkloadConfig workloadConfig = new WorkloadConfig(); private Map<String, Integer> roles = new LinkedHashMap<>(); - private Map<String, List<String>> jvmArgs = new HashMap<>(); + private Map<String, List<String>> jvmArgs = BenchmarkProperties.getDefaultJVMArgs(); private List<TestStep> before = new ArrayList<>(); private List<TestStep> workload = new ArrayList<>(); private List<TestStep> after = new ArrayList<>(); diff --git a/harness/src/test/java/org/apache/geode/perftest/BenchmarkPropertiesTest.java b/harness/src/test/java/org/apache/geode/perftest/BenchmarkPropertiesTest.java new file mode 100644 index 0000000..a8a5105 --- /dev/null +++ b/harness/src/test/java/org/apache/geode/perftest/BenchmarkPropertiesTest.java @@ -0,0 +1,24 @@ +package org.apache.geode.perftest; + +import java.util.List; +import java.util.Map; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + +class BenchmarkPropertiesTest { + + @Test + public void canParsePropertiesForRoles() { + System.setProperty("benchmark.system.role1.p1", "v1"); + System.setProperty("benchmark.system.role1.p2", "v2"); + + Map<String, List<String>> defaultArgs = + BenchmarkProperties.getDefaultJVMArgs(); + + Assertions.assertThat(defaultArgs).containsOnlyKeys("role1"); + + Assertions.assertThat(defaultArgs.get("role1")).containsExactlyInAnyOrder("-Dp1=v1", "-Dp2=v2"); + } + +} diff --git a/harness/src/test/java/org/apache/geode/perftest/TestRunnerIntegrationTest.java b/harness/src/test/java/org/apache/geode/perftest/TestRunnerIntegrationTest.java index f82cb6c..2bddb1a 100644 --- a/harness/src/test/java/org/apache/geode/perftest/TestRunnerIntegrationTest.java +++ b/harness/src/test/java/org/apache/geode/perftest/TestRunnerIntegrationTest.java @@ -17,6 +17,7 @@ package org.apache.geode.perftest; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -26,6 +27,7 @@ import java.nio.file.Path; import java.util.function.Predicate; import java.util.stream.Stream; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -38,6 +40,7 @@ import org.apache.geode.perftest.yardstick.analysis.YardstickThroughputSensorPar public class TestRunnerIntegrationTest { + public static final String TEST_PROPERTY = "benchmark.system.all.prop3"; private TestRunner runner; @TempDir @@ -51,6 +54,11 @@ public class TestRunnerIntegrationTest { outputDir); } + @AfterEach() + void clearProperty() { + System.clearProperty(TEST_PROPERTY); + } + @Test public void runsBeforeWorkload() throws Exception { runner.runTest(() -> { @@ -93,6 +101,7 @@ public class TestRunnerIntegrationTest { @Test public void configuresJVMOptions() throws Exception { + System.setProperty(TEST_PROPERTY, "p3"); runner.runTest(() -> { TestConfig testConfig = new TestConfig(); testConfig.role("all", 1); @@ -102,6 +111,7 @@ public class TestRunnerIntegrationTest { "Expecting system property to be set in launched JVM, but it was not present."); assertEquals(5, Integer.getInteger("prop2").intValue(), "Expecting system property to be set in launched JVM, but it was not present."); + assertThat(System.getProperty("prop3")).isEqualTo("p3"); }, "all"); return testConfig; });