This is an automated email from the ASF dual-hosted git repository.
Apache9 pushed a commit to branch branch-2.6
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2.6 by this push:
new bfa45653e30 HBASE-30089 Rewrite AbstractTestAsyncTableScan and related
sub classes (#8099) (#8139) (#8146)
bfa45653e30 is described below
commit bfa45653e301cdc334f9460773eca65a0f606762
Author: Duo Zhang <[email protected]>
AuthorDate: Tue Apr 28 23:21:29 2026 +0800
HBASE-30089 Rewrite AbstractTestAsyncTableScan and related sub classes
(#8099) (#8139) (#8146)
(cherry picked from commit 79f14ed42257d7c57ad25f67b529b5b31970afa8)
Signed-off-by: Xiao Liu <[email protected]>
---
.../hbase/client/AbstractTestAsyncTableScan.java | 166 ++++++++++-----------
.../hadoop/hbase/client/TestAsyncTableScan.java | 41 +++--
.../hadoop/hbase/client/TestAsyncTableScanAll.java | 44 +++---
.../hadoop/hbase/client/TestAsyncTableScanner.java | 48 +++---
.../hadoop/hbase/client/TestRawAsyncTableScan.java | 40 +++--
5 files changed, 149 insertions(+), 190 deletions(-)
diff --git
a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.java
b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.java
index 6f36be61c65..d0339079be8 100644
---
a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.java
+++
b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.java
@@ -27,10 +27,11 @@ import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.hasProperty;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.isA;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThrows;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.fail;
+import io.opentelemetry.sdk.testing.junit5.OpenTelemetryExtension;
import io.opentelemetry.sdk.trace.data.SpanData;
import java.io.IOException;
import java.io.UncheckedIOException;
@@ -44,71 +45,66 @@ import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.hbase.ConnectionRule;
import org.apache.hadoop.hbase.HBaseTestingUtility;
import org.apache.hadoop.hbase.MatcherPredicate;
-import org.apache.hadoop.hbase.MiniClusterRule;
-import org.apache.hadoop.hbase.StartMiniClusterOption;
import org.apache.hadoop.hbase.TableName;
-import org.apache.hadoop.hbase.Waiter;
import org.apache.hadoop.hbase.ipc.RemoteWithExtrasException;
import org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException;
import org.apache.hadoop.hbase.trace.HBaseSemanticAttributes;
-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.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;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.TestInfo;
+import org.junit.jupiter.api.TestTemplate;
+import org.junit.jupiter.api.extension.RegisterExtension;
+import org.junit.jupiter.params.provider.Arguments;
+
+import org.apache.hbase.thirdparty.com.google.common.io.Closeables;
public abstract class AbstractTestAsyncTableScan {
- protected static final OpenTelemetryClassRule OTEL_CLASS_RULE =
OpenTelemetryClassRule.create();
- protected static final MiniClusterRule MINI_CLUSTER_RULE =
MiniClusterRule.newBuilder()
-
.setMiniClusterOption(StartMiniClusterOption.builder().numWorkers(3).build()).build();
+ @RegisterExtension
+ protected static final OpenTelemetryExtension OTEL_EXT =
OpenTelemetryExtension.create();
- protected static final ConnectionRule CONN_RULE =
-
ConnectionRule.createAsyncConnectionRule(MINI_CLUSTER_RULE::createAsyncConnection);
+ protected static final HBaseTestingUtility UTIL = new HBaseTestingUtility();
- private static final class Setup extends ExternalResource {
- @Override
- protected void before() throws Throwable {
- final HBaseTestingUtility testingUtil =
MINI_CLUSTER_RULE.getTestingUtility();
- final AsyncConnection conn = CONN_RULE.getAsyncConnection();
+ protected static AsyncConnection CONN;
- byte[][] splitKeys = new byte[8][];
- for (int i = 111; i < 999; i += 111) {
- splitKeys[i / 111 - 1] = Bytes.toBytes(String.format("%03d", i));
- }
- testingUtil.createTable(TABLE_NAME, FAMILY, splitKeys);
- testingUtil.waitTableAvailable(TABLE_NAME);
- conn.getTable(TABLE_NAME)
- .putAll(IntStream.range(0, COUNT)
- .mapToObj(i -> new Put(Bytes.toBytes(String.format("%03d", i)))
- .addColumn(FAMILY, CQ1, Bytes.toBytes(i)).addColumn(FAMILY, CQ2,
Bytes.toBytes(i * i)))
- .collect(Collectors.toList()))
- .get();
+ protected String methodName;
+
+ @BeforeAll
+ public static void setUpBeforeClass() throws Exception {
+ UTIL.startMiniCluster(3);
+ byte[][] splitKeys = new byte[8][];
+ for (int i = 111; i < 999; i += 111) {
+ splitKeys[i / 111 - 1] = Bytes.toBytes(String.format("%03d", i));
+ }
+ UTIL.createTable(TABLE_NAME, FAMILY, splitKeys);
+ UTIL.waitTableAvailable(TABLE_NAME);
+ try (Table table = UTIL.getConnection().getTable(TABLE_NAME)) {
+ table.put(IntStream.range(0, COUNT)
+ .mapToObj(i -> new Put(Bytes.toBytes(String.format("%03d", i)))
+ .addColumn(FAMILY, CQ1, Bytes.toBytes(i)).addColumn(FAMILY, CQ2,
Bytes.toBytes(i * i)))
+ .collect(Collectors.toList()));
}
+ CONN =
ConnectionFactory.createAsyncConnection(UTIL.getConfiguration()).get();
}
- @ClassRule
- public static final TestRule classRule = RuleChain.outerRule(OTEL_CLASS_RULE)
- .around(MINI_CLUSTER_RULE).around(CONN_RULE).around(new Setup());
-
- @Rule
- public final OpenTelemetryTestRule otelTestRule = new
OpenTelemetryTestRule(OTEL_CLASS_RULE);
+ @AfterAll
+ public static void tearDownAfterClass() throws Exception {
+ Closeables.close(CONN, true);
+ UTIL.shutdownMiniCluster();
+ }
- @Rule
- public final TestName testName = new TestName();
+ @BeforeEach
+ public void setUp(TestInfo testInfo) {
+ methodName = testInfo.getTestMethod().get().getName();
+ }
protected static TableName TABLE_NAME = TableName.valueOf("async");
@@ -138,11 +134,11 @@ public abstract class AbstractTestAsyncTableScan {
}
private static AsyncTable<?> getRawTable() {
- return CONN_RULE.getAsyncConnection().getTable(TABLE_NAME);
+ return CONN.getTable(TABLE_NAME);
}
private static AsyncTable<?> getTable() {
- return CONN_RULE.getAsyncConnection().getTable(TABLE_NAME,
ForkJoinPool.commonPool());
+ return CONN.getTable(TABLE_NAME, ForkJoinPool.commonPool());
}
private static List<Pair<String, Supplier<Scan>>> getScanCreator() {
@@ -153,9 +149,8 @@ public abstract class AbstractTestAsyncTableScan {
AbstractTestAsyncTableScan::createBatchSmallResultSizeScan));
}
- protected static List<Object[]> getScanCreatorParams() {
- return getScanCreator().stream().map(p -> new Object[] { p.getFirst(),
p.getSecond() })
- .collect(Collectors.toList());
+ protected static Stream<Arguments> getScanCreatorParams() {
+ return getScanCreator().stream().map(p -> Arguments.of(p.getFirst(),
p.getSecond()));
}
private static List<Pair<String, Supplier<AsyncTable<?>>>> getTableCreator()
{
@@ -163,13 +158,11 @@ public abstract class AbstractTestAsyncTableScan {
Pair.newPair("normal", AbstractTestAsyncTableScan::getTable));
}
- protected static List<Object[]> getTableAndScanCreatorParams() {
+ protected static Stream<Arguments> getTableAndScanCreatorParams() {
List<Pair<String, Supplier<AsyncTable<?>>>> tableCreator =
getTableCreator();
List<Pair<String, Supplier<Scan>>> scanCreator = getScanCreator();
- return tableCreator.stream()
- .flatMap(tp -> scanCreator.stream()
- .map(sp -> new Object[] { tp.getFirst(), tp.getSecond(),
sp.getFirst(), sp.getSecond() }))
- .collect(Collectors.toList());
+ return tableCreator.stream().flatMap(tp -> scanCreator.stream()
+ .map(sp -> Arguments.of(tp.getFirst(), tp.getSecond(), sp.getFirst(),
sp.getSecond())));
}
protected abstract Scan createScan();
@@ -200,25 +193,24 @@ public abstract class AbstractTestAsyncTableScan {
}
protected static void waitForSpan(final Matcher<SpanData> parentSpanMatcher)
{
- final Configuration conf =
MINI_CLUSTER_RULE.getTestingUtility().getConfiguration();
- Waiter.waitFor(conf, TimeUnit.SECONDS.toMillis(5), new MatcherPredicate<>(
- "Span for test failed to complete.", OTEL_CLASS_RULE::getSpans,
hasItem(parentSpanMatcher)));
+ UTIL.waitFor(TimeUnit.SECONDS.toMillis(5), new MatcherPredicate<>(
+ "Span for test failed to complete.", OTEL_EXT::getSpans,
hasItem(parentSpanMatcher)));
}
protected static Stream<SpanData> spanStream() {
- return OTEL_CLASS_RULE.getSpans().stream().filter(Objects::nonNull);
+ return OTEL_EXT.getSpans().stream().filter(Objects::nonNull);
}
- @Test
+ @TestTemplate
public void testScanAll() throws Exception {
List<Result> results = doScan(createScan(), -1);
// make sure all scanners are closed at RS side
-
MINI_CLUSTER_RULE.getTestingUtility().getHBaseCluster().getRegionServerThreads().stream()
- .map(JVMClusterUtil.RegionServerThread::getRegionServer).forEach(
- rs -> assertEquals(
- "The scanner count of " + rs.getServerName() + " is "
- + rs.getRSRpcServices().getScannersCount(),
- 0, rs.getRSRpcServices().getScannersCount()));
+ UTIL.getHBaseCluster().getRegionServerThreads().stream()
+ .map(JVMClusterUtil.RegionServerThread::getRegionServer).forEach(rs -> {
+ int scannerCount = rs.getRSRpcServices().getScannersCount();
+ assertEquals(0, scannerCount,
+ "The scanner count of " + rs.getServerName() + " is " +
scannerCount);
+ });
assertEquals(COUNT, results.size());
IntStream.range(0, COUNT).forEach(i -> {
Result result = results.get(i);
@@ -233,43 +225,41 @@ public abstract class AbstractTestAsyncTableScan {
assertEquals(i * i, Bytes.toInt(result.getValue(FAMILY, CQ2)));
}
- @Test
+ @TestTemplate
public void testReversedScanAll() throws Exception {
List<Result> results =
- TraceUtil.trace(() -> doScan(createScan().setReversed(true), -1),
testName.getMethodName());
+ TraceUtil.trace(() -> doScan(createScan().setReversed(true), -1),
methodName);
assertEquals(COUNT, results.size());
IntStream.range(0, COUNT).forEach(i -> assertResultEquals(results.get(i),
COUNT - i - 1));
assertTraceContinuity();
}
- @Test
+ @TestTemplate
public void testScanNoStopKey() throws Exception {
int start = 345;
List<Result> results = TraceUtil.trace(
() ->
doScan(createScan().withStartRow(Bytes.toBytes(String.format("%03d", start))),
-1),
- testName.getMethodName());
+ methodName);
assertEquals(COUNT - start, results.size());
IntStream.range(0, COUNT - start).forEach(i ->
assertResultEquals(results.get(i), start + i));
assertTraceContinuity();
}
- @Test
+ @TestTemplate
public void testReverseScanNoStopKey() throws Exception {
int start = 765;
final Scan scan =
createScan().withStartRow(Bytes.toBytes(String.format("%03d",
start))).setReversed(true);
- List<Result> results = TraceUtil.trace(() -> doScan(scan, -1),
testName.getMethodName());
+ List<Result> results = TraceUtil.trace(() -> doScan(scan, -1), methodName);
assertEquals(start + 1, results.size());
IntStream.range(0, start + 1).forEach(i ->
assertResultEquals(results.get(i), start - i));
assertTraceContinuity();
}
- @Test
+ @TestTemplate
public void testScanWrongColumnFamily() {
- final Exception e = assertThrows(Exception.class,
- () -> TraceUtil.trace(
- () ->
doScan(createScan().addFamily(Bytes.toBytes("WrongColumnFamily")), -1),
- testName.getMethodName()));
+ final Exception e = assertThrows(Exception.class, () -> TraceUtil.trace(
+ () -> doScan(createScan().addFamily(Bytes.toBytes("WrongColumnFamily")),
-1), methodName));
// hamcrest generic enforcement for `anyOf` is a pain; skip it
// but -- don't we always unwrap ExecutionExceptions -- bug?
if (e instanceof NoSuchColumnFamilyException) {
@@ -338,7 +328,7 @@ public abstract class AbstractTestAsyncTableScan {
IntStream.range(0, count).forEach(i -> assertResultEquals(results.get(i),
actualStart - i));
}
- @Test
+ @TestTemplate
public void testScanWithStartKeyAndStopKey() throws Exception {
testScan(1, true, 998, false, -1); // from first region to last region
testScan(123, true, 345, true, -1);
@@ -347,7 +337,7 @@ public abstract class AbstractTestAsyncTableScan {
testScan(456, false, 678, false, -1);
}
- @Test
+ @TestTemplate
public void testReversedScanWithStartKeyAndStopKey() throws Exception {
testReversedScan(998, true, 1, false, -1); // from last region to first
region
testReversedScan(543, true, 321, true, -1);
@@ -356,7 +346,7 @@ public abstract class AbstractTestAsyncTableScan {
testReversedScan(876, false, 654, false, -1);
}
- @Test
+ @TestTemplate
public void testScanAtRegionBoundary() throws Exception {
testScan(222, true, 333, true, -1);
testScan(333, true, 444, false, -1);
@@ -364,7 +354,7 @@ public abstract class AbstractTestAsyncTableScan {
testScan(555, false, 666, false, -1);
}
- @Test
+ @TestTemplate
public void testReversedScanAtRegionBoundary() throws Exception {
testReversedScan(333, true, 222, true, -1);
testReversedScan(444, true, 333, false, -1);
@@ -372,7 +362,7 @@ public abstract class AbstractTestAsyncTableScan {
testReversedScan(666, false, 555, false, -1);
}
- @Test
+ @TestTemplate
public void testScanWithLimit() throws Exception {
testScan(1, true, 998, false, 900); // from first region to last region
testScan(123, true, 234, true, 100);
@@ -381,7 +371,7 @@ public abstract class AbstractTestAsyncTableScan {
testScan(456, false, 678, false, 100);
}
- @Test
+ @TestTemplate
public void testScanWithLimitGreaterThanActualCount() throws Exception {
testScan(1, true, 998, false, 1000); // from first region to last region
testScan(123, true, 345, true, 200);
@@ -390,7 +380,7 @@ public abstract class AbstractTestAsyncTableScan {
testScan(456, false, 678, false, 200);
}
- @Test
+ @TestTemplate
public void testReversedScanWithLimit() throws Exception {
testReversedScan(998, true, 1, false, 900); // from last region to first
region
testReversedScan(543, true, 321, true, 100);
@@ -399,7 +389,7 @@ public abstract class AbstractTestAsyncTableScan {
testReversedScan(876, false, 654, false, 100);
}
- @Test
+ @TestTemplate
public void testReversedScanWithLimitGreaterThanActualCount() throws
Exception {
testReversedScan(998, true, 1, false, 1000); // from last region to first
region
testReversedScan(543, true, 321, true, 200);
@@ -408,7 +398,7 @@ public abstract class AbstractTestAsyncTableScan {
testReversedScan(876, false, 654, false, 200);
}
- @Test
+ @TestTemplate
public void testScanEndingEarly() throws Exception {
testScan(1, true, 998, false, 0, 900); // from first region to last region
testScan(123, true, 234, true, 0, 100);
diff --git
a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScan.java
b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScan.java
index 7cdb58c1260..a9d896e1a09 100644
---
a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScan.java
+++
b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScan.java
@@ -32,49 +32,42 @@ import java.util.List;
import java.util.concurrent.ForkJoinPool;
import java.util.function.Supplier;
import java.util.stream.Collectors;
-import org.apache.hadoop.hbase.HBaseClassTestRule;
+import java.util.stream.Stream;
+import org.apache.hadoop.hbase.HBaseParameterizedTestTemplate;
import org.apache.hadoop.hbase.client.trace.StringTraceRenderer;
import org.apache.hadoop.hbase.testclassification.ClientTests;
import org.apache.hadoop.hbase.testclassification.LargeTests;
import org.hamcrest.Matcher;
-import org.junit.ClassRule;
-import org.junit.experimental.categories.Category;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameter;
-import org.junit.runners.Parameterized.Parameters;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.params.provider.Arguments;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-@RunWith(Parameterized.class)
-@Category({ LargeTests.class, ClientTests.class })
+@Tag(LargeTests.TAG)
+@Tag(ClientTests.TAG)
+@HBaseParameterizedTestTemplate(name = "{index}: scan={0}")
public class TestAsyncTableScan extends AbstractTestAsyncTableScan {
private static final Logger logger =
LoggerFactory.getLogger(TestAsyncTableScan.class);
- @ClassRule
- public static final HBaseClassTestRule CLASS_RULE =
- HBaseClassTestRule.forClass(TestAsyncTableScan.class);
+ private Supplier<Scan> scanCreator;
- @Parameter(0)
- public String scanType;
-
- @Parameter(1)
- public Supplier<Scan> scanCreater;
+ // scanType is only for displaying
+ public TestAsyncTableScan(String scanType, Supplier<Scan> scanCreator) {
+ this.scanCreator = scanCreator;
+ }
- @Parameters(name = "{index}: scan={0}")
- public static List<Object[]> params() {
+ public static Stream<Arguments> parameters() {
return getScanCreatorParams();
}
@Override
protected Scan createScan() {
- return scanCreater.get();
+ return scanCreator.get();
}
@Override
protected List<Result> doScan(Scan scan, int closeAfter) throws Exception {
- AsyncTable<ScanResultConsumer> table =
- CONN_RULE.getAsyncConnection().getTable(TABLE_NAME,
ForkJoinPool.commonPool());
+ AsyncTable<ScanResultConsumer> table = CONN.getTable(TABLE_NAME,
ForkJoinPool.commonPool());
List<Result> results;
if (closeAfter > 0) {
// these tests batch settings with the sample data result in each result
being
@@ -101,7 +94,7 @@ public class TestAsyncTableScan extends
AbstractTestAsyncTableScan {
@Override
protected void assertTraceContinuity() {
- final String parentSpanName = testName.getMethodName();
+ final String parentSpanName = methodName;
final Matcher<SpanData> parentSpanMatcher =
allOf(hasName(parentSpanName), hasStatusWithCode(StatusCode.OK),
hasEnded());
waitForSpan(parentSpanMatcher);
@@ -140,7 +133,7 @@ public class TestAsyncTableScan extends
AbstractTestAsyncTableScan {
@Override
protected void
assertTraceError(Matcher<io.opentelemetry.api.common.Attributes>
exceptionMatcher) {
- final String parentSpanName = testName.getMethodName();
+ final String parentSpanName = methodName;
final Matcher<SpanData> parentSpanMatcher = allOf(hasName(parentSpanName),
hasEnded());
waitForSpan(parentSpanMatcher);
diff --git
a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScanAll.java
b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScanAll.java
index 8f2d3c5e814..660266b119c 100644
---
a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScanAll.java
+++
b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScanAll.java
@@ -30,43 +30,35 @@ import io.opentelemetry.sdk.trace.data.SpanData;
import java.util.List;
import java.util.function.Supplier;
import java.util.stream.Collectors;
-import org.apache.hadoop.hbase.HBaseClassTestRule;
+import java.util.stream.Stream;
+import org.apache.hadoop.hbase.HBaseParameterizedTestTemplate;
import org.apache.hadoop.hbase.client.trace.StringTraceRenderer;
import org.apache.hadoop.hbase.testclassification.ClientTests;
import org.apache.hadoop.hbase.testclassification.LargeTests;
import org.hamcrest.Matcher;
-import org.junit.ClassRule;
-import org.junit.experimental.categories.Category;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameter;
-import org.junit.runners.Parameterized.Parameters;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.params.provider.Arguments;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-@RunWith(Parameterized.class)
-@Category({ LargeTests.class, ClientTests.class })
+@Tag(LargeTests.TAG)
+@Tag(ClientTests.TAG)
+@HBaseParameterizedTestTemplate(name = "{index}: table={0}, scan={2}")
public class TestAsyncTableScanAll extends AbstractTestAsyncTableScan {
private static final Logger logger =
LoggerFactory.getLogger(TestAsyncTableScanAll.class);
- @ClassRule
- public static final HBaseClassTestRule CLASS_RULE =
- HBaseClassTestRule.forClass(TestAsyncTableScanAll.class);
+ private Supplier<AsyncTable<?>> getTable;
- @Parameter(0)
- public String tableType;
+ private Supplier<Scan> scanCreator;
- @Parameter(1)
- public Supplier<AsyncTable<?>> getTable;
-
- @Parameter(2)
- public String scanType;
-
- @Parameter(3)
- public Supplier<Scan> scanCreator;
+ // tableType and scanType are only for displaying
+ public TestAsyncTableScanAll(String tableType, Supplier<AsyncTable<?>>
getTable, String scanType,
+ Supplier<Scan> scanCreator) {
+ this.getTable = getTable;
+ this.scanCreator = scanCreator;
+ }
- @Parameters(name = "{index}: table={0}, scan={2}")
- public static List<Object[]> params() {
+ public static Stream<Arguments> parameters() {
return getTableAndScanCreatorParams();
}
@@ -91,7 +83,7 @@ public class TestAsyncTableScanAll extends
AbstractTestAsyncTableScan {
@Override
protected void assertTraceContinuity() {
- final String parentSpanName = testName.getMethodName();
+ final String parentSpanName = methodName;
final Matcher<SpanData> parentSpanMatcher =
allOf(hasName(parentSpanName), hasStatusWithCode(StatusCode.OK),
hasEnded());
waitForSpan(parentSpanMatcher);
@@ -115,7 +107,7 @@ public class TestAsyncTableScanAll extends
AbstractTestAsyncTableScan {
@Override
protected void
assertTraceError(Matcher<io.opentelemetry.api.common.Attributes>
exceptionMatcher) {
- final String parentSpanName = testName.getMethodName();
+ final String parentSpanName = methodName;
final Matcher<SpanData> parentSpanMatcher = allOf(hasName(parentSpanName),
hasEnded());
waitForSpan(parentSpanMatcher);
diff --git
a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScanner.java
b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScanner.java
index 54552639c75..45a6536f586 100644
---
a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScanner.java
+++
b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScanner.java
@@ -29,46 +29,37 @@ import io.opentelemetry.api.trace.StatusCode;
import io.opentelemetry.sdk.trace.data.SpanData;
import java.util.ArrayList;
import java.util.List;
-import java.util.concurrent.ForkJoinPool;
import java.util.function.Supplier;
import java.util.stream.Collectors;
-import org.apache.hadoop.hbase.HBaseClassTestRule;
+import java.util.stream.Stream;
+import org.apache.hadoop.hbase.HBaseParameterizedTestTemplate;
import org.apache.hadoop.hbase.client.trace.StringTraceRenderer;
import org.apache.hadoop.hbase.testclassification.ClientTests;
import org.apache.hadoop.hbase.testclassification.LargeTests;
import org.hamcrest.Matcher;
-import org.junit.ClassRule;
-import org.junit.experimental.categories.Category;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameter;
-import org.junit.runners.Parameterized.Parameters;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.params.provider.Arguments;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-@RunWith(Parameterized.class)
-@Category({ LargeTests.class, ClientTests.class })
+@Tag(LargeTests.TAG)
+@Tag(ClientTests.TAG)
+@HBaseParameterizedTestTemplate(name = "{index}: table={0}, scan={2}")
public class TestAsyncTableScanner extends AbstractTestAsyncTableScan {
private static final Logger logger =
LoggerFactory.getLogger(TestAsyncTableScanner.class);
- @ClassRule
- public static final HBaseClassTestRule CLASS_RULE =
- HBaseClassTestRule.forClass(TestAsyncTableScanner.class);
+ private Supplier<AsyncTable<?>> getTable;
- @Parameter(0)
- public String tableType;
+ private Supplier<Scan> scanCreator;
- @Parameter(1)
- public Supplier<AsyncTable<?>> getTable;
-
- @Parameter(2)
- public String scanType;
-
- @Parameter(3)
- public Supplier<Scan> scanCreator;
+ // tableType and scanType are only for displaying
+ public TestAsyncTableScanner(String tableType, Supplier<AsyncTable<?>>
getTable, String scanType,
+ Supplier<Scan> scanCreator) {
+ this.getTable = getTable;
+ this.scanCreator = scanCreator;
+ }
- @Parameters(name = "{index}: table={0}, scan={2}")
- public static List<Object[]> params() {
+ public static Stream<Arguments> parameters() {
return getTableAndScanCreatorParams();
}
@@ -79,8 +70,7 @@ public class TestAsyncTableScanner extends
AbstractTestAsyncTableScan {
@Override
protected List<Result> doScan(Scan scan, int closeAfter) throws Exception {
- AsyncTable<?> table =
- CONN_RULE.getAsyncConnection().getTable(TABLE_NAME,
ForkJoinPool.commonPool());
+ AsyncTable<?> table = getTable.get();
List<Result> results = new ArrayList<>();
// these tests batch settings with the sample data result in each result
being
// split in two. so we must allow twice the expected results in order to
reach
@@ -104,7 +94,7 @@ public class TestAsyncTableScanner extends
AbstractTestAsyncTableScan {
@Override
protected void assertTraceContinuity() {
- final String parentSpanName = testName.getMethodName();
+ final String parentSpanName = methodName;
final Matcher<SpanData> parentSpanMatcher =
allOf(hasName(parentSpanName), hasStatusWithCode(StatusCode.OK),
hasEnded());
waitForSpan(parentSpanMatcher);
@@ -126,7 +116,7 @@ public class TestAsyncTableScanner extends
AbstractTestAsyncTableScan {
@Override
protected void
assertTraceError(Matcher<io.opentelemetry.api.common.Attributes>
exceptionMatcher) {
- final String parentSpanName = testName.getMethodName();
+ final String parentSpanName = methodName;
final Matcher<SpanData> parentSpanMatcher = allOf(hasName(parentSpanName),
hasEnded());
waitForSpan(parentSpanMatcher);
diff --git
a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRawAsyncTableScan.java
b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRawAsyncTableScan.java
index 758e1245bde..c10c75e604a 100644
---
a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRawAsyncTableScan.java
+++
b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRawAsyncTableScan.java
@@ -32,49 +32,43 @@ import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;
import java.util.stream.Collectors;
-import org.apache.hadoop.hbase.HBaseClassTestRule;
+import java.util.stream.Stream;
+import org.apache.hadoop.hbase.HBaseParameterizedTestTemplate;
import org.apache.hadoop.hbase.client.trace.StringTraceRenderer;
import org.apache.hadoop.hbase.testclassification.ClientTests;
import org.apache.hadoop.hbase.testclassification.LargeTests;
import org.hamcrest.Matcher;
-import org.junit.ClassRule;
-import org.junit.experimental.categories.Category;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameter;
-import org.junit.runners.Parameterized.Parameters;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.params.provider.Arguments;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-@RunWith(Parameterized.class)
-@Category({ LargeTests.class, ClientTests.class })
+@Tag(LargeTests.TAG)
+@Tag(ClientTests.TAG)
+@HBaseParameterizedTestTemplate(name = "{index}: scan={0}")
public class TestRawAsyncTableScan extends AbstractTestAsyncTableScan {
private static final Logger logger =
LoggerFactory.getLogger(TestRawAsyncTableScan.class);
- @ClassRule
- public static final HBaseClassTestRule CLASS_RULE =
- HBaseClassTestRule.forClass(TestRawAsyncTableScan.class);
+ private Supplier<Scan> scanCreator;
- @Parameter(0)
- public String scanType;
-
- @Parameter(1)
- public Supplier<Scan> scanCreater;
+ // scanType is only for displaying
+ public TestRawAsyncTableScan(String scanType, Supplier<Scan> scanCreator) {
+ this.scanCreator = scanCreator;
+ }
- @Parameters(name = "{index}: type={0}")
- public static List<Object[]> params() {
+ public static Stream<Arguments> parameters() {
return getScanCreatorParams();
}
@Override
protected Scan createScan() {
- return scanCreater.get();
+ return scanCreator.get();
}
@Override
protected List<Result> doScan(Scan scan, int closeAfter) throws Exception {
TracedAdvancedScanResultConsumer scanConsumer = new
TracedAdvancedScanResultConsumer();
- CONN_RULE.getAsyncConnection().getTable(TABLE_NAME).scan(scan,
scanConsumer);
+ CONN.getTable(TABLE_NAME).scan(scan, scanConsumer);
List<Result> results = new ArrayList<>();
// these tests batch settings with the sample data result in each result
being
// split in two. so we must allow twice the expected results in order to
reach
@@ -96,7 +90,7 @@ public class TestRawAsyncTableScan extends
AbstractTestAsyncTableScan {
@Override
protected void assertTraceContinuity() {
- final String parentSpanName = testName.getMethodName();
+ final String parentSpanName = methodName;
final Matcher<SpanData> parentSpanMatcher =
allOf(hasName(parentSpanName), hasStatusWithCode(StatusCode.OK),
hasEnded());
waitForSpan(parentSpanMatcher);
@@ -137,7 +131,7 @@ public class TestRawAsyncTableScan extends
AbstractTestAsyncTableScan {
@Override
protected void
assertTraceError(Matcher<io.opentelemetry.api.common.Attributes>
exceptionMatcher) {
- final String parentSpanName = testName.getMethodName();
+ final String parentSpanName = methodName;
final Matcher<SpanData> parentSpanMatcher = allOf(hasName(parentSpanName),
hasEnded());
waitForSpan(parentSpanMatcher);