ndimiduk commented on a change in pull request #4106:
URL: https://github.com/apache/hbase/pull/4106#discussion_r825741397
##########
File path:
hbase-server/src/test/java/org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.java
##########
@@ -17,29 +17,95 @@
*/
package org.apache.hadoop.hbase.client;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.allOf;
+import static org.hamcrest.Matchers.endsWith;
+import static org.hamcrest.Matchers.hasItem;
+import static org.hamcrest.Matchers.hasProperty;
+import static org.hamcrest.Matchers.isA;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
+import static org.junit.Assert.assertThrows;
+import static org.junit.Assert.fail;
+import io.opentelemetry.sdk.trace.data.SpanData;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.util.Arrays;
import java.util.List;
+import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
+import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.ConnectionRule;
import org.apache.hadoop.hbase.HBaseTestingUtil;
+import org.apache.hadoop.hbase.MatcherPredicate;
+import org.apache.hadoop.hbase.MiniClusterRule;
+import org.apache.hadoop.hbase.StartTestingClusterOption;
import org.apache.hadoop.hbase.TableName;
+import org.apache.hadoop.hbase.Waiter;
import org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException;
+import org.apache.hadoop.hbase.trace.OpenTelemetryClassRule;
+import org.apache.hadoop.hbase.trace.OpenTelemetryTestRule;
+import org.apache.hadoop.hbase.trace.TraceUtil;
import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hadoop.hbase.util.JVMClusterUtil;
import org.apache.hadoop.hbase.util.Pair;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
+import org.hamcrest.Matcher;
+import org.junit.ClassRule;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.ExternalResource;
+import org.junit.rules.RuleChain;
+import org.junit.rules.TestName;
+import org.junit.rules.TestRule;
public abstract class AbstractTestAsyncTableScan {
- protected static final HBaseTestingUtil TEST_UTIL = new HBaseTestingUtil();
+ protected static final OpenTelemetryClassRule otelClassRule =
OpenTelemetryClassRule.create();
+ protected static final MiniClusterRule miniClusterRule =
MiniClusterRule.newBuilder()
+ .setMiniClusterOption(StartTestingClusterOption.builder()
+ .numWorkers(3)
+ .build())
+ .build();
+
+ protected static final ConnectionRule connectionRule =
+ new ConnectionRule(miniClusterRule::createConnection);
+
+ private static final class Setup extends ExternalResource {
Review comment:
It's not just convention. JUnit makes no promises re: execution order of
`@Before` and `@Rule`, of `@BeforeClass` and `@ClassRule`. I want to use fields
that are initialized by the `@ClassRule` annotation, so I need to participate
in that annotation. The `ChainRule` allows me to explicitly order the
execution, so that otel is initialize first, then the miniCluster, then the
connection to the miniCluster, and finally my code that makes use of the
previous.
I much much much prefer the Rules over test class inheritance because mixing
in functionality is so much easier to reason about.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]