Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion bookkeeper-admin-api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,11 @@
</parent>

<artifactId>bookkeeper-admin-api</artifactId>

<dependencies>
<dependency>
<groupId>io.github.openfacade</groupId>
<artifactId>http-facade</artifactId>
<version>${http-facade.version}</version>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package io.github.protocol.bookkeeper.admin.api;

import io.github.openfacade.http.HttpClientEngine;

public class Configuration {
public String host = "localhost";

Expand All @@ -9,6 +11,8 @@ public class Configuration {

public TlsConfig tlsConfig;

public HttpClientEngine engine;

public Configuration() {
}

Expand All @@ -31,4 +35,9 @@ public Configuration tlsConfig(TlsConfig tlsConfig) {
this.tlsConfig = tlsConfig;
return this;
}

public Configuration engine(HttpClientEngine engine) {
this.engine = engine;
return this;
}
}
36 changes: 35 additions & 1 deletion bookkeeper-admin/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
</parent>

<artifactId>bookkeeper-admin</artifactId>

<dependencies>
<dependency>
<groupId>io.github.protocol-laboratory</groupId>
Expand All @@ -22,6 +21,41 @@
<artifactId>http-facade</artifactId>
<version>${http-facade.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
<version>${apache-http-client.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.asynchttpclient</groupId>
<artifactId>async-http-client</artifactId>
<version>${asynchttp.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-client</artifactId>
<version>${jetty.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>${okhttp.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-web-client</artifactId>
<version>${vertx.version}</version>
</dependency>
<dependency>
<groupId>io.github.embedded-middleware</groupId>
<artifactId>embedded-bookkeeper-core</artifactId>
<version>${embedded-bookkeeper.version}</version>
<scope>test</scope>
</dependency>
</dependencies>

</project>
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,87 +1,74 @@
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);
reqData.setDeleteCookie(false);
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");
}
}
Original file line number Diff line number Diff line change
@@ -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<Arguments> provideAutoRecoveries() {
List<AutoRecoveryImpl> 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<Arguments> provideBookiesImpl() {
List<Bookies> 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<Arguments> provideConfigsImpl() {
List<Configs> 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));
}
}
Loading
Loading