You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by jb...@apache.org on 2021/05/11 17:47:41 UTC
[geode-benchmarks] branch feature/redis updated: Test for all
RedisBenchmark subclasses.
This is an automated email from the ASF dual-hosted git repository.
jbarrett pushed a commit to branch feature/redis
in repository https://gitbox.apache.org/repos/asf/geode-benchmarks.git
The following commit(s) were added to refs/heads/feature/redis by this push:
new e8b400b Test for all RedisBenchmark subclasses.
e8b400b is described below
commit e8b400b206bf1bf061186cc16c325206fb943739
Author: Jacob Barrett <jb...@pivotal.io>
AuthorDate: Tue May 11 10:47:26 2021 -0700
Test for all RedisBenchmark subclasses.
---
.../apache/geode/benchmark/tasks/StartServer.java | 2 +-
.../benchmark/tests/redis/RedisBenchmark.java | 19 ++++++++
.../benchmark/tests/redis/RedisGetBenchmark.java | 17 -------
.../benchmark/tests/redis/RedisHgetBenchmark.java | 17 -------
.../tests/redis/RedisHsetAndHgetBenchmark.java | 17 -------
.../benchmark/tests/redis/RedisHsetBenchmark.java | 25 ----------
...disPutBenchmark.java => RedisSetBenchmark.java} | 22 +--------
.../redis/RedisWeightedHsetAndHgetBenchmark.java | 17 -------
.../benchmark/junit/CartesianSubclassSource.java | 54 +++++++++++++++++++++
.../benchmark/junit/SubclassSourceProvider.java | 46 ++++++++++++++++++
.../benchmark/tests/redis/RedisBenchmarkTest.java | 56 ++++++++++++++++++++++
11 files changed, 177 insertions(+), 115 deletions(-)
diff --git a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/StartServer.java b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/StartServer.java
index 27dbb04..693c234 100644
--- a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/StartServer.java
+++ b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tasks/StartServer.java
@@ -53,7 +53,7 @@ public class StartServer implements Task {
final CacheFactory cacheFactory = new CacheFactory(properties);
configureCacheFactory(cacheFactory, context);
- InternalCache cache = (InternalCache) cacheFactory.create();
+ final InternalCache cache = (InternalCache) cacheFactory.create();
final CacheServer cacheServer = configureCacheServer(cache.addCacheServer(), context);
if (null != cacheServer) {
diff --git a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisBenchmark.java b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisBenchmark.java
index d9775b6..7542769 100644
--- a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisBenchmark.java
+++ b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisBenchmark.java
@@ -16,13 +16,19 @@
package org.apache.geode.benchmark.tests.redis;
import static com.google.common.base.Strings.isNullOrEmpty;
+import static java.lang.Long.getLong;
import static org.apache.geode.benchmark.Config.after;
import static org.apache.geode.benchmark.Config.before;
+import static org.apache.geode.benchmark.tests.GeodeBenchmark.WITH_MAX_KEY;
+import static org.apache.geode.benchmark.tests.GeodeBenchmark.WITH_MIN_KEY;
import static org.apache.geode.benchmark.tests.redis.RedisBenchmark.RedisClientImplementation.Jedis;
import static org.apache.geode.benchmark.tests.redis.RedisBenchmark.RedisClusterImplementation.Geode;
import static org.apache.geode.benchmark.tests.redis.RedisBenchmark.RedisClusterImplementation.Manual;
import static org.apache.geode.benchmark.topology.Roles.CLIENT;
+import org.junit.jupiter.api.Test;
+
+import org.apache.geode.benchmark.LongRange;
import org.apache.geode.benchmark.tasks.redis.FlushDbTask;
import org.apache.geode.benchmark.tasks.redis.JedisClientManager;
import org.apache.geode.benchmark.tasks.redis.LettuceClientManager;
@@ -35,6 +41,7 @@ import org.apache.geode.benchmark.topology.redis.GedisTopology;
import org.apache.geode.benchmark.topology.redis.ManualRedisTopology;
import org.apache.geode.benchmark.topology.redis.RedisTopology;
import org.apache.geode.perftest.TestConfig;
+import org.apache.geode.perftest.TestRunners;
public class RedisBenchmark extends AbstractPerformanceTest {
@@ -76,6 +83,18 @@ public class RedisBenchmark extends AbstractPerformanceTest {
protected transient RedisClientManager redisClientManager;
+ protected LongRange keyRange =
+ new LongRange(getLong(WITH_MIN_KEY, 0), getLong(WITH_MAX_KEY, 1000000));
+
+ public void setKeyRange(final LongRange keyRange) {
+ this.keyRange = keyRange;
+ }
+
+ @Test
+ public void run() throws Exception {
+ TestRunners.defaultRunner().runTest(this);
+ }
+
@Override
public TestConfig configure() {
TestConfig config = GeodeBenchmark.createConfig();
diff --git a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisGetBenchmark.java b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisGetBenchmark.java
index 7fec686..8e1fda6 100644
--- a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisGetBenchmark.java
+++ b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisGetBenchmark.java
@@ -23,32 +23,15 @@ import static org.apache.geode.benchmark.Config.workload;
import static org.apache.geode.benchmark.tests.GeodeBenchmark.isValidationEnabled;
import static org.apache.geode.benchmark.topology.Roles.CLIENT;
-import org.junit.jupiter.api.Test;
-
-import org.apache.geode.benchmark.LongRange;
import org.apache.geode.benchmark.tasks.redis.GetRedisTask;
import org.apache.geode.benchmark.tasks.redis.PrePopulateRedis;
import org.apache.geode.perftest.TestConfig;
-import org.apache.geode.perftest.TestRunners;
/**
* Benchmark of gets on a partitioned region.
*/
public class RedisGetBenchmark extends RedisBenchmark {
- private LongRange keyRange = new LongRange(0, 1000000);
-
- @Test
- public void run() throws Exception {
- TestRunners.defaultRunner().runTest(this);
- }
-
- public RedisGetBenchmark() {}
-
- public void setKeyRange(final LongRange keyRange) {
- this.keyRange = keyRange;
- }
-
@Override
public TestConfig configure() {
final TestConfig config = super.configure();
diff --git a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisHgetBenchmark.java b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisHgetBenchmark.java
index 8edfc58..09b721b 100644
--- a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisHgetBenchmark.java
+++ b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisHgetBenchmark.java
@@ -23,32 +23,15 @@ import static org.apache.geode.benchmark.Config.workload;
import static org.apache.geode.benchmark.tests.GeodeBenchmark.isValidationEnabled;
import static org.apache.geode.benchmark.topology.Roles.CLIENT;
-import org.junit.jupiter.api.Test;
-
-import org.apache.geode.benchmark.LongRange;
import org.apache.geode.benchmark.tasks.redis.HgetRedisTask;
import org.apache.geode.benchmark.tasks.redis.PrePopulateRedisHash;
import org.apache.geode.perftest.TestConfig;
-import org.apache.geode.perftest.TestRunners;
/**
* Benchmark of gets on a partitioned region.
*/
public class RedisHgetBenchmark extends RedisBenchmark {
- private LongRange keyRange = new LongRange(0, 1000000);
-
- @Test
- public void run() throws Exception {
- TestRunners.defaultRunner().runTest(this);
- }
-
- public RedisHgetBenchmark() {}
-
- public void setKeyRange(final LongRange keyRange) {
- this.keyRange = keyRange;
- }
-
@Override
public TestConfig configure() {
final TestConfig config = super.configure();
diff --git a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisHsetAndHgetBenchmark.java b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisHsetAndHgetBenchmark.java
index 2679c28..10d3c46 100644
--- a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisHsetAndHgetBenchmark.java
+++ b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisHsetAndHgetBenchmark.java
@@ -22,34 +22,17 @@ import static org.apache.geode.benchmark.Config.before;
import static org.apache.geode.benchmark.Config.workload;
import static org.apache.geode.benchmark.topology.Roles.CLIENT;
-import org.junit.jupiter.api.Test;
-
-import org.apache.geode.benchmark.LongRange;
import org.apache.geode.benchmark.tasks.CompositeTask;
import org.apache.geode.benchmark.tasks.redis.HgetRedisTask;
import org.apache.geode.benchmark.tasks.redis.HsetRedisTask;
import org.apache.geode.benchmark.tasks.redis.PrePopulateRedisHash;
import org.apache.geode.perftest.TestConfig;
-import org.apache.geode.perftest.TestRunners;
/**
* Benchmark of gets on a partitioned region.
*/
public class RedisHsetAndHgetBenchmark extends RedisBenchmark {
- private LongRange keyRange = new LongRange(0, 1000000);
-
- @Test
- public void run() throws Exception {
- TestRunners.defaultRunner().runTest(this);
- }
-
- public RedisHsetAndHgetBenchmark() {}
-
- public void setKeyRange(final LongRange keyRange) {
- this.keyRange = keyRange;
- }
-
@Override
public TestConfig configure() {
final TestConfig config = super.configure();
diff --git a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisHsetBenchmark.java b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisHsetBenchmark.java
index 595c727..b41b38b 100644
--- a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisHsetBenchmark.java
+++ b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisHsetBenchmark.java
@@ -17,41 +17,16 @@
package org.apache.geode.benchmark.tests.redis;
-
-import static java.lang.Long.getLong;
import static org.apache.geode.benchmark.Config.before;
import static org.apache.geode.benchmark.Config.workload;
-import static org.apache.geode.benchmark.tests.GeodeBenchmark.WITH_MAX_KEY;
-import static org.apache.geode.benchmark.tests.GeodeBenchmark.WITH_MIN_KEY;
import static org.apache.geode.benchmark.topology.Roles.CLIENT;
-import org.junit.jupiter.api.Test;
-
-import org.apache.geode.benchmark.LongRange;
import org.apache.geode.benchmark.tasks.redis.HsetRedisTask;
import org.apache.geode.benchmark.tasks.redis.PrePopulateRedisHash;
import org.apache.geode.perftest.TestConfig;
-import org.apache.geode.perftest.TestRunners;
-/**
- * Benchmark of gets on a partitioned region.
- */
public class RedisHsetBenchmark extends RedisBenchmark {
- private LongRange keyRange =
- new LongRange(getLong(WITH_MIN_KEY, 0), getLong(WITH_MAX_KEY, 1000000));
-
- @Test
- public void run() throws Exception {
- TestRunners.defaultRunner().runTest(this);
- }
-
- public RedisHsetBenchmark() {}
-
- public void setKeyRange(final LongRange keyRange) {
- this.keyRange = keyRange;
- }
-
@Override
public TestConfig configure() {
final TestConfig config = super.configure();
diff --git a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisPutBenchmark.java b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisSetBenchmark.java
similarity index 74%
rename from geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisPutBenchmark.java
rename to geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisSetBenchmark.java
index 4c39a3d..25c00d3 100644
--- a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisPutBenchmark.java
+++ b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisSetBenchmark.java
@@ -22,31 +22,11 @@ import static org.apache.geode.benchmark.Config.before;
import static org.apache.geode.benchmark.Config.workload;
import static org.apache.geode.benchmark.topology.Roles.CLIENT;
-import org.junit.jupiter.api.Test;
-
-import org.apache.geode.benchmark.LongRange;
import org.apache.geode.benchmark.tasks.redis.PrePopulateRedis;
import org.apache.geode.benchmark.tasks.redis.SetRedisTask;
import org.apache.geode.perftest.TestConfig;
-import org.apache.geode.perftest.TestRunners;
-
-/**
- * Benchmark of gets on a partitioned region.
- */
-public class RedisPutBenchmark extends RedisBenchmark {
-
- private LongRange keyRange = new LongRange(0, 1000000);
- @Test
- public void run() throws Exception {
- TestRunners.defaultRunner().runTest(this);
- }
-
- public RedisPutBenchmark() {}
-
- public void setKeyRange(final LongRange keyRange) {
- this.keyRange = keyRange;
- }
+public class RedisSetBenchmark extends RedisBenchmark {
@Override
public TestConfig configure() {
diff --git a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisWeightedHsetAndHgetBenchmark.java b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisWeightedHsetAndHgetBenchmark.java
index d17821d..b588fb0 100644
--- a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisWeightedHsetAndHgetBenchmark.java
+++ b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/tests/redis/RedisWeightedHsetAndHgetBenchmark.java
@@ -22,35 +22,18 @@ import static org.apache.geode.benchmark.Config.before;
import static org.apache.geode.benchmark.Config.workload;
import static org.apache.geode.benchmark.topology.Roles.CLIENT;
-import org.junit.jupiter.api.Test;
-
-import org.apache.geode.benchmark.LongRange;
import org.apache.geode.benchmark.tasks.WeightedTasks;
import org.apache.geode.benchmark.tasks.WeightedTasks.WeightedTask;
import org.apache.geode.benchmark.tasks.redis.HgetRedisTask;
import org.apache.geode.benchmark.tasks.redis.HsetRedisTask;
import org.apache.geode.benchmark.tasks.redis.PrePopulateRedisHash;
import org.apache.geode.perftest.TestConfig;
-import org.apache.geode.perftest.TestRunners;
/**
* Benchmark of gets on a partitioned region.
*/
public class RedisWeightedHsetAndHgetBenchmark extends RedisBenchmark {
- private LongRange keyRange = new LongRange(0, 1000000);
-
- @Test
- public void run() throws Exception {
- TestRunners.defaultRunner().runTest(this);
- }
-
- public RedisWeightedHsetAndHgetBenchmark() {}
-
- public void setKeyRange(final LongRange keyRange) {
- this.keyRange = keyRange;
- }
-
@Override
public TestConfig configure() {
final TestConfig config = super.configure();
diff --git a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/junit/CartesianSubclassSource.java b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/junit/CartesianSubclassSource.java
new file mode 100644
index 0000000..2e7212f
--- /dev/null
+++ b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/junit/CartesianSubclassSource.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.geode.benchmark.junit;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Repeatable;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.junit.jupiter.params.provider.ArgumentsSource;
+
+/**
+ * {@code }@CartesianSubclassSource} is a argument source subclass of the specified {@linkplain
+ * #value Class} for tests annotated with {@code @CartesianProductTest}.
+ */
+@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+@Repeatable(CartesianSubclassSource.CartesianSubclassSources.class)
+@ArgumentsSource(SubclassSourceProvider.class)
+public @interface CartesianSubclassSource {
+
+ /**
+ * The Class to find subclasses for.
+ */
+ Class<?> value();
+
+ /**
+ * Class Packages to accept. All by default.
+ */
+ String[] acceptPackages() default {};
+
+ @Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD})
+ @Retention(RetentionPolicy.RUNTIME)
+ @Documented
+ @interface CartesianSubclassSources {
+ CartesianSubclassSource[] value();
+ }
+}
diff --git a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/junit/SubclassSourceProvider.java b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/junit/SubclassSourceProvider.java
new file mode 100644
index 0000000..e82b2e6
--- /dev/null
+++ b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/junit/SubclassSourceProvider.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.geode.benchmark.junit;
+
+import java.util.List;
+import java.util.stream.Stream;
+
+import io.github.classgraph.ClassGraph;
+import io.github.classgraph.ScanResult;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+import org.junitpioneer.jupiter.CartesianAnnotationConsumer;
+
+public class SubclassSourceProvider
+ implements CartesianAnnotationConsumer<CartesianSubclassSource>, ArgumentsProvider {
+
+ private List<Class<?>> subclasses;
+
+ @Override
+ public void accept(final CartesianSubclassSource subclassSource) {
+ try (final ScanResult scanResult = new ClassGraph().enableAllInfo()
+ .acceptPackages(subclassSource.acceptPackages())
+ .scan()) {
+ subclasses = scanResult.getSubclasses(subclassSource.value().getName()).loadClasses();
+ }
+ }
+
+ @Override
+ public Stream<? extends Arguments> provideArguments(final ExtensionContext context) {
+ return subclasses.stream().map(Arguments::of);
+ }
+}
diff --git a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/redis/RedisBenchmarkTest.java b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/redis/RedisBenchmarkTest.java
new file mode 100644
index 0000000..34a514e
--- /dev/null
+++ b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/tests/redis/RedisBenchmarkTest.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.geode.benchmark.tests.redis;
+
+import static java.lang.System.setProperty;
+import static org.apache.geode.benchmark.tests.redis.RedisBenchmark.WITH_REDIS_CLIENT_PROPERTY;
+import static org.apache.geode.benchmark.topology.Topology.WITH_SERVER_COUNT_PROPERTY;
+
+import java.io.File;
+
+import org.junit.jupiter.api.io.TempDir;
+import org.junitpioneer.jupiter.CartesianEnumSource;
+import org.junitpioneer.jupiter.CartesianProductTest;
+import org.junitpioneer.jupiter.ClearSystemProperty;
+import org.junitpioneer.jupiter.SetSystemProperty;
+
+import org.apache.geode.benchmark.LongRange;
+import org.apache.geode.benchmark.junit.CartesianSubclassSource;
+import org.apache.geode.benchmark.tests.redis.RedisBenchmark.RedisClientImplementation;
+import org.apache.geode.perftest.TestRunners;
+
+public class RedisBenchmarkTest {
+
+ @TempDir()
+ File folder;
+
+ @CartesianProductTest()
+ @CartesianEnumSource(RedisClientImplementation.class)
+ @CartesianSubclassSource(RedisBenchmark.class)
+ @ClearSystemProperty(key = WITH_REDIS_CLIENT_PROPERTY)
+ @SetSystemProperty(key = WITH_SERVER_COUNT_PROPERTY, value = "1")
+ public void benchmarkRunsSuccessfully(final RedisClientImplementation redisClientImplementation,
+ final Class<? extends RedisBenchmark> redisBenchmark)
+ throws Exception {
+ setProperty(WITH_REDIS_CLIENT_PROPERTY, redisClientImplementation.name());
+
+ final RedisBenchmark test = redisBenchmark.newInstance();
+ test.setKeyRange(new LongRange(0, 100));
+ test.setValidationEnabled(true);
+
+ TestRunners.minimalRunner(folder).runTest(test);
+ }
+}