diff --git a/bookkeeper-admin-api/pom.xml b/bookkeeper-admin-api/pom.xml index 70dc438..25826ed 100644 --- a/bookkeeper-admin-api/pom.xml +++ b/bookkeeper-admin-api/pom.xml @@ -10,5 +10,11 @@ bookkeeper-admin-api - + + + io.github.openfacade + http-facade + ${http-facade.version} + + diff --git a/bookkeeper-admin-api/src/main/java/io/github/protocol/bookkeeper/admin/api/Configuration.java b/bookkeeper-admin-api/src/main/java/io/github/protocol/bookkeeper/admin/api/Configuration.java index 38a0942..950cec9 100644 --- a/bookkeeper-admin-api/src/main/java/io/github/protocol/bookkeeper/admin/api/Configuration.java +++ b/bookkeeper-admin-api/src/main/java/io/github/protocol/bookkeeper/admin/api/Configuration.java @@ -1,5 +1,7 @@ package io.github.protocol.bookkeeper.admin.api; +import io.github.openfacade.http.HttpClientEngine; + public class Configuration { public String host = "localhost"; @@ -9,6 +11,8 @@ public class Configuration { public TlsConfig tlsConfig; + public HttpClientEngine engine; + public Configuration() { } @@ -31,4 +35,9 @@ public Configuration tlsConfig(TlsConfig tlsConfig) { this.tlsConfig = tlsConfig; return this; } + + public Configuration engine(HttpClientEngine engine) { + this.engine = engine; + return this; + } } diff --git a/bookkeeper-admin/pom.xml b/bookkeeper-admin/pom.xml index 50426c6..950cfc9 100644 --- a/bookkeeper-admin/pom.xml +++ b/bookkeeper-admin/pom.xml @@ -10,7 +10,6 @@ bookkeeper-admin - io.github.protocol-laboratory @@ -22,6 +21,41 @@ http-facade ${http-facade.version} + + org.apache.httpcomponents.client5 + httpclient5 + ${apache-http-client.version} + test + + + org.asynchttpclient + async-http-client + ${asynchttp.version} + test + + + org.eclipse.jetty + jetty-client + ${jetty.version} + test + + + com.squareup.okhttp3 + okhttp + ${okhttp.version} + test + + + io.vertx + vertx-web-client + ${vertx.version} + + + io.github.embedded-middleware + embedded-bookkeeper-core + ${embedded-bookkeeper.version} + test + diff --git a/bookkeeper-admin/src/main/java/io/github/protocol/bookkeeper/admin/jdk/InnerHttpClient.java b/bookkeeper-admin/src/main/java/io/github/protocol/bookkeeper/admin/jdk/InnerHttpClient.java index c580cee..c13b9a8 100644 --- a/bookkeeper-admin/src/main/java/io/github/protocol/bookkeeper/admin/jdk/InnerHttpClient.java +++ b/bookkeeper-admin/src/main/java/io/github/protocol/bookkeeper/admin/jdk/InnerHttpClient.java @@ -29,7 +29,8 @@ public class InnerHttpClient { public InnerHttpClient(Configuration conf) { HttpClientConfig.Builder clientConfigBuilder = new HttpClientConfig.Builder(); - clientConfigBuilder.engine(HttpClientEngine.Java); + HttpClientEngine engine = conf.engine == null ? HttpClientEngine.Java : conf.engine; + clientConfigBuilder.engine(engine); if (conf.tlsEnabled) { TlsConfig.Builder tlsConfigBuilder = new TlsConfig.Builder(); io.github.protocol.bookkeeper.admin.api.TlsConfig tlsConfig = conf.tlsConfig; diff --git a/bookkeeper-admin/src/test/java/io/github/protocol/bookkeeper/admin/jdk/AutoRecoveryImplTest.java b/bookkeeper-admin/src/test/java/io/github/protocol/bookkeeper/admin/jdk/AutoRecoveryImplTest.java index d1d716c..00c2dc7 100644 --- a/bookkeeper-admin/src/test/java/io/github/protocol/bookkeeper/admin/jdk/AutoRecoveryImplTest.java +++ b/bookkeeper-admin/src/test/java/io/github/protocol/bookkeeper/admin/jdk/AutoRecoveryImplTest.java @@ -1,51 +1,32 @@ package io.github.protocol.bookkeeper.admin.jdk; -import io.github.embedded.bookkeeper.core.EmbeddedBookkeeperServer; -import io.github.protocol.bookkeeper.admin.api.Configuration; -import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; import java.util.Collections; -public class AutoRecoveryImplTest { - - private static final EmbeddedBookkeeperServer SERVER = new EmbeddedBookkeeperServer(); - - private static AutoRecoveryImpl autoRecovery = null; - - @BeforeAll - public static void setup() throws Exception { - SERVER.start(); - Configuration conf = new Configuration(); - conf.host("localhost"); - conf.port(SERVER.getBkWebPort()); - autoRecovery = new AutoRecoveryImpl(new InnerHttpClient(conf)); - } - - @AfterAll - public static void teardown() throws Exception { - SERVER.close(); - } - - @Test - public void testAutoRecoveryStatus() throws BookkeeperAdminException { +public class AutoRecoveryImplTest extends BaseTest { + @ParameterizedTest + @MethodSource("provideAutoRecoveries") + public void testAutoRecoveryStatus(AutoRecoveryImpl autoRecovery) throws BookkeeperAdminException { AutoRecoveryStatus status = autoRecovery.autoRecoveryStatus(); Assertions.assertNotNull(status); Assertions.assertTrue(status.isEnabled()); } - @Test - public void testRecoveryBookie() throws BookkeeperAdminException { + @ParameterizedTest + @MethodSource("provideAutoRecoveries") + public void testRecoveryBookie(AutoRecoveryImpl autoRecovery) throws BookkeeperAdminException { RecoveryBookieReqData reqData = new RecoveryBookieReqData(); reqData.setBookieSrc(Collections.singletonList("localhost:3181")); reqData.setDeleteCookie(false); autoRecovery.recoveryBookie(reqData); } - @Test - public void testRecoveryBookieError() { + @ParameterizedTest + @MethodSource("provideAutoRecoveries") + public void testRecoveryBookieError(AutoRecoveryImpl autoRecovery) { RecoveryBookieReqData reqData = new RecoveryBookieReqData(); // bookie src is required reqData.setBookieSrc(null); @@ -53,35 +34,41 @@ public void testRecoveryBookieError() { Assertions.assertThrows(BookkeeperAdminException.class, () -> autoRecovery.recoveryBookie(reqData)); } - @Test - public void testListUnderReplicatedLedger() { + @ParameterizedTest + @MethodSource("provideAutoRecoveries") + public void testListUnderReplicatedLedger(AutoRecoveryImpl autoRecovery) { ListUnderReplicatedLedgerReqData reqData = new ListUnderReplicatedLedgerReqData(); reqData.setPrintMissingReplica(true); Assertions.assertThrows(BookkeeperAdminException.class, () -> autoRecovery.listUnderReplicatedLedger(reqData)); } - @Test - public void testWhoIsAuditor() { + @ParameterizedTest + @MethodSource("provideAutoRecoveries") + public void testWhoIsAuditor(AutoRecoveryImpl autoRecovery) { Assertions.assertThrows(BookkeeperAdminException.class, () -> autoRecovery.whoIsAuditor()); } - @Test - public void testTriggerAudit() { + @ParameterizedTest + @MethodSource("provideAutoRecoveries") + public void testTriggerAudit(AutoRecoveryImpl autoRecovery) { Assertions.assertThrows(BookkeeperAdminException.class, () -> autoRecovery.triggerAudit()); } - @Test - public void testLostBookieRecoveryDelayByDefault() { + @ParameterizedTest + @MethodSource("provideAutoRecoveries") + public void testLostBookieRecoveryDelayByDefault(AutoRecoveryImpl autoRecovery) { Assertions.assertThrows(BookkeeperAdminException.class, () -> autoRecovery.lostBookieRecoveryDelay()); } - @Test - public void testLostBookieRecoveryDelay() throws BookkeeperAdminException { + @ParameterizedTest + @MethodSource("provideAutoRecoveries") + public void testLostBookieRecoveryDelay(AutoRecoveryImpl autoRecovery) throws BookkeeperAdminException { autoRecovery.lostBookieRecoveryDelay(5); } - @Test - public void testDecommission() throws BookkeeperAdminException { + @ParameterizedTest + @MethodSource("provideAutoRecoveries") + public void testDecommission(AutoRecoveryImpl autoRecovery) throws BookkeeperAdminException { autoRecovery.decommission("localhost:3181"); } } diff --git a/bookkeeper-admin/src/test/java/io/github/protocol/bookkeeper/admin/jdk/BaseTest.java b/bookkeeper-admin/src/test/java/io/github/protocol/bookkeeper/admin/jdk/BaseTest.java new file mode 100644 index 0000000..6815362 --- /dev/null +++ b/bookkeeper-admin/src/test/java/io/github/protocol/bookkeeper/admin/jdk/BaseTest.java @@ -0,0 +1,67 @@ +package io.github.protocol.bookkeeper.admin.jdk; + +import io.github.embedded.bookkeeper.core.EmbeddedBookkeeperServer; +import io.github.openfacade.http.HttpClientEngine; +import io.github.protocol.bookkeeper.admin.api.Configuration; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.TestInstance; +import org.junit.jupiter.params.provider.Arguments; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Stream; + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +public class BaseTest { + protected final EmbeddedBookkeeperServer server = new EmbeddedBookkeeperServer(); + + @BeforeAll + public void setup() throws Exception { + server.start(); + } + + @AfterAll + public void teardown() throws Exception { + server.close(); + } + + public Stream provideAutoRecoveries() { + List autoRecoveries = new ArrayList<>(); + Configuration conf = new Configuration(); + conf.host("localhost"); + conf.port(server.getBkWebPort()); + for (HttpClientEngine engine : HttpClientEngine.values()) { + conf.engine(engine); + AutoRecoveryImpl recovery = new AutoRecoveryImpl(new InnerHttpClient(conf)); + autoRecoveries.add(recovery); + } + return autoRecoveries.stream().map(recovery -> Arguments.arguments(recovery)); + } + + public Stream provideBookiesImpl() { + List bookies = new ArrayList<>(); + Configuration conf = new Configuration(); + conf.host("localhost"); + conf.port(server.getBkWebPort()); + for (HttpClientEngine engine : HttpClientEngine.values()) { + conf.engine(engine); + Bookies bookie = new BookiesImpl(new InnerHttpClient(conf)); + bookies.add(bookie); + } + return bookies.stream().map(recovery -> Arguments.arguments(recovery)); + } + + public Stream provideConfigsImpl() { + List configs = new ArrayList<>(); + Configuration conf = new Configuration(); + conf.host("localhost"); + conf.port(server.getBkWebPort()); + for (HttpClientEngine engine : HttpClientEngine.values()) { + conf.engine(engine); + Configs config = new ConfigsImpl(new InnerHttpClient(conf)); + configs.add(config); + } + return configs.stream().map(recovery -> Arguments.arguments(recovery)); + } +} diff --git a/bookkeeper-admin/src/test/java/io/github/protocol/bookkeeper/admin/jdk/BookiesImplTest.java b/bookkeeper-admin/src/test/java/io/github/protocol/bookkeeper/admin/jdk/BookiesImplTest.java index 0403f5a..d9a7fe5 100644 --- a/bookkeeper-admin/src/test/java/io/github/protocol/bookkeeper/admin/jdk/BookiesImplTest.java +++ b/bookkeeper-admin/src/test/java/io/github/protocol/bookkeeper/admin/jdk/BookiesImplTest.java @@ -1,66 +1,56 @@ package io.github.protocol.bookkeeper.admin.jdk; -import io.github.embedded.bookkeeper.core.EmbeddedBookkeeperServer; -import io.github.protocol.bookkeeper.admin.api.Configuration; -import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; import java.util.List; import java.util.Map; -public class BookiesImplTest { +public class BookiesImplTest extends BaseTest { - private static final EmbeddedBookkeeperServer SERVER = new EmbeddedBookkeeperServer(); - - private static Bookies bookiesImpl = null; - - @BeforeAll - public static void setup() throws Exception { - SERVER.start(); - Configuration conf = new Configuration(); - conf.host("localhost"); - conf.port(SERVER.getBkWebPort()); - bookiesImpl = new BookiesImpl(new InnerHttpClient(conf)); - } - - @Test - public void testBookiesList() throws BookkeeperAdminException { + @ParameterizedTest + @MethodSource("provideBookiesImpl") + public void testBookiesList(Bookies bookiesImpl) throws BookkeeperAdminException { Map map = bookiesImpl.bookieList(); Assertions.assertEquals(1, map.size()); String key = ""; for (Map.Entry entry : map.entrySet()) { key = entry.getKey(); } - Assertions.assertTrue(key.contains(String.valueOf(SERVER.getBkPort()))); + Assertions.assertTrue(key.contains(String.valueOf(server.getBkPort()))); } - @Test - public void testListBookieInfo() throws BookkeeperAdminException { + @ParameterizedTest + @MethodSource("provideBookiesImpl") + public void testListBookieInfo(Bookies bookiesImpl) throws BookkeeperAdminException { Map info = bookiesImpl.listBookieInfo(); Assertions.assertEquals(2, info.size()); } - @Test - public void testLastLogMark() throws BookkeeperAdminException { + @ParameterizedTest + @MethodSource("provideBookiesImpl") + public void testLastLogMark(Bookies bookiesImpl) throws BookkeeperAdminException { LastLogMark lastLogMark = bookiesImpl.lastLogMark(); Assertions.assertEquals(1, lastLogMark.getLogFileIdTxnMap().size()); } - @Test - public void testListDiskFile() throws BookkeeperAdminException { + @ParameterizedTest + @MethodSource("provideBookiesImpl") + public void testListDiskFile(Bookies bookiesImpl) throws BookkeeperAdminException { bookiesImpl.listDiskFile(); } - @Test - public void testIsInForceGc() throws BookkeeperAdminException { + @ParameterizedTest + @MethodSource("provideBookiesImpl") + public void testIsInForceGc(Bookies bookiesImpl) throws BookkeeperAdminException { boolean inForceGc = bookiesImpl.isInForceGc(); Assertions.assertFalse(inForceGc); } - @Test - public void testGcStatus() throws BookkeeperAdminException { + @ParameterizedTest + @MethodSource("provideBookiesImpl") + public void testGcStatus(Bookies bookiesImpl) throws BookkeeperAdminException { List statuses = bookiesImpl.gcStatusList(); Assertions.assertEquals(1, statuses.size()); GarbageCollectionStatus garbageCollectionStatus = statuses.get(0); @@ -68,36 +58,35 @@ public void testGcStatus() throws BookkeeperAdminException { } - @Test - public void testBookiesStatus() throws BookkeeperAdminException { + @ParameterizedTest + @MethodSource("provideBookiesImpl") + public void testBookiesStatus(Bookies bookiesImpl) throws BookkeeperAdminException { BookieStatus status = bookiesImpl.status(); Assertions.assertTrue(status.isRunning()); Assertions.assertFalse(status.isReadOnly()); } - @Test - public void testIsReadOnly() throws BookkeeperAdminException { + @ParameterizedTest + @MethodSource("provideBookiesImpl") + public void testIsReadOnly(Bookies bookiesImpl) throws BookkeeperAdminException { boolean readOnly = bookiesImpl.isReadOnly(); Assertions.assertFalse(readOnly); } - @Test - public void testBookiesIsReady() throws BookkeeperAdminException { + @ParameterizedTest + @MethodSource("provideBookiesImpl") + public void testBookiesIsReady(Bookies bookiesImpl) throws BookkeeperAdminException { boolean ready = bookiesImpl.isReady(); Assertions.assertTrue(ready); } - @Test - public void testBookiesInfo() throws BookkeeperAdminException { + @ParameterizedTest + @MethodSource("provideBookiesImpl") + public void testBookiesInfo(Bookies bookiesImpl) throws BookkeeperAdminException { BookieInfo bookieInfo = bookiesImpl.bookieInfo(); Assertions.assertTrue(bookieInfo.getFreeSpace() > 0); Assertions.assertTrue(bookieInfo.getTotalSpace() > 0); } - @AfterAll - public static void teardown() throws Exception { - SERVER.close(); - } - } diff --git a/bookkeeper-admin/src/test/java/io/github/protocol/bookkeeper/admin/jdk/ConfigsImplTest.java b/bookkeeper-admin/src/test/java/io/github/protocol/bookkeeper/admin/jdk/ConfigsImplTest.java index 9789c72..7f39f35 100644 --- a/bookkeeper-admin/src/test/java/io/github/protocol/bookkeeper/admin/jdk/ConfigsImplTest.java +++ b/bookkeeper-admin/src/test/java/io/github/protocol/bookkeeper/admin/jdk/ConfigsImplTest.java @@ -1,33 +1,16 @@ package io.github.protocol.bookkeeper.admin.jdk; -import io.github.embedded.bookkeeper.core.EmbeddedBookkeeperServer; -import io.github.protocol.bookkeeper.admin.api.Configuration; -import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; import java.util.HashMap; import java.util.Map; -public class ConfigsImplTest { - - - private static final EmbeddedBookkeeperServer SERVER = new EmbeddedBookkeeperServer(); - - private static ConfigsImpl configsImpl = null; - - @BeforeAll - public static void setup() throws Exception { - SERVER.start(); - Configuration conf = new Configuration(); - conf.host("localhost"); - conf.port(SERVER.getBkWebPort()); - configsImpl = new ConfigsImpl(new InnerHttpClient(conf)); - } - - @Test - public void testPutConfig() throws BookkeeperAdminException { +public class ConfigsImplTest extends BaseTest { + @ParameterizedTest + @MethodSource("provideConfigsImpl") + public void testPutConfig(Configs configsImpl) throws BookkeeperAdminException { HashMap config = new HashMap<>(); config.put("allowEphemeralPorts", "false"); configsImpl.putConfig(config); @@ -35,14 +18,10 @@ public void testPutConfig() throws BookkeeperAdminException { Assertions.assertEquals("false", resp.get("allowEphemeralPorts")); } - @Test - public void testGetConfig() throws BookkeeperAdminException { + @ParameterizedTest + @MethodSource("provideConfigsImpl") + public void testGetConfig(Configs configsImpl) throws BookkeeperAdminException { Map config = configsImpl.getConfig(); Assertions.assertTrue(config.size() != 0); } - - @AfterAll - public static void teardown() throws Exception { - SERVER.close(); - } } diff --git a/bookkeeper-admin/src/test/java/io/github/protocol/bookkeeper/admin/jdk/HeartbeatTest.java b/bookkeeper-admin/src/test/java/io/github/protocol/bookkeeper/admin/jdk/HeartbeatTest.java index 28425fe..f2424ea 100644 --- a/bookkeeper-admin/src/test/java/io/github/protocol/bookkeeper/admin/jdk/HeartbeatTest.java +++ b/bookkeeper-admin/src/test/java/io/github/protocol/bookkeeper/admin/jdk/HeartbeatTest.java @@ -1,26 +1,11 @@ package io.github.protocol.bookkeeper.admin.jdk; -import io.github.embedded.bookkeeper.core.EmbeddedBookkeeperServer; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -public class HeartbeatTest { - private static final EmbeddedBookkeeperServer SERVER = new EmbeddedBookkeeperServer(); - - @BeforeAll - public static void setup() throws Exception { - SERVER.start(); - } - - @AfterAll - public static void teardown() throws Exception { - SERVER.close(); - } - +public class HeartbeatTest extends BaseTest { @Test public void testHeartbeat() throws BookkeeperAdminException { - BookkeeperAdmin bookkeeperAdmin = BookkeeperAdmin.builder().port(SERVER.getBkWebPort()).build(); + BookkeeperAdmin bookkeeperAdmin = BookkeeperAdmin.builder().port(server.getBkWebPort()).build(); bookkeeperAdmin.heartbeat().heartbeat(); } } diff --git a/pom.xml b/pom.xml index f93829f..df592fe 100644 --- a/pom.xml +++ b/pom.xml @@ -47,6 +47,13 @@ 1.7.0 4.8.6.2 2.43.0 + 3.0.0 + 5.3.1 + 12.0.13 + 4.12.0 + 4.5.10 + 4.17.1 + 4.1.112.Final @@ -58,6 +65,30 @@ pom import + + io.vertx + vertx-core + ${vertx.version} + test + + + io.vertx + vertx-web + ${vertx.version} + test + + + org.apache.bookkeeper.http + vertx-http-server + ${vertx-http-server.version} + test + + + io.netty + netty-transport-native-epoll + linux-x86_64 + ${netty.version} + @@ -83,15 +114,15 @@ test - org.apache.logging.log4j - log4j-slf4j-impl - ${log4j.version} + org.junit.jupiter + junit-jupiter-params + ${junit.version} test - io.github.embedded-middleware - embedded-bookkeeper-core - ${embedded-bookkeeper.version} + org.apache.logging.log4j + log4j-slf4j-impl + ${log4j.version} test