Skip to content

Commit 6fb22d7

Browse files
committed
feat: add http engine support
Signed-off-by: moxiaoying <[email protected]>
1 parent 5da5e3c commit 6fb22d7

File tree

10 files changed

+232
-144
lines changed

10 files changed

+232
-144
lines changed

bookkeeper-admin-api/pom.xml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,11 @@
1010
</parent>
1111

1212
<artifactId>bookkeeper-admin-api</artifactId>
13-
13+
<dependencies>
14+
<dependency>
15+
<groupId>io.github.openfacade</groupId>
16+
<artifactId>http-facade</artifactId>
17+
<version>${http-facade.version}</version>
18+
</dependency>
19+
</dependencies>
1420
</project>

bookkeeper-admin-api/src/main/java/io/github/protocol/bookkeeper/admin/api/Configuration.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.github.protocol.bookkeeper.admin.api;
22

3+
import io.github.openfacade.http.HttpClientEngine;
4+
35
public class Configuration {
46
public String host = "localhost";
57

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

1012
public TlsConfig tlsConfig;
1113

14+
public HttpClientEngine engine;
15+
1216
public Configuration() {
1317
}
1418

@@ -31,4 +35,9 @@ public Configuration tlsConfig(TlsConfig tlsConfig) {
3135
this.tlsConfig = tlsConfig;
3236
return this;
3337
}
38+
39+
public Configuration engine(HttpClientEngine engine) {
40+
this.engine = engine;
41+
return this;
42+
}
3443
}

bookkeeper-admin/pom.xml

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
</parent>
1111

1212
<artifactId>bookkeeper-admin</artifactId>
13-
1413
<dependencies>
1514
<dependency>
1615
<groupId>io.github.protocol-laboratory</groupId>
@@ -22,6 +21,41 @@
2221
<artifactId>http-facade</artifactId>
2322
<version>${http-facade.version}</version>
2423
</dependency>
24+
<dependency>
25+
<groupId>org.apache.httpcomponents.client5</groupId>
26+
<artifactId>httpclient5</artifactId>
27+
<version>${apache-http-client.version}</version>
28+
<scope>test</scope>
29+
</dependency>
30+
<dependency>
31+
<groupId>org.asynchttpclient</groupId>
32+
<artifactId>async-http-client</artifactId>
33+
<version>${asynchttp.version}</version>
34+
<scope>test</scope>
35+
</dependency>
36+
<dependency>
37+
<groupId>org.eclipse.jetty</groupId>
38+
<artifactId>jetty-client</artifactId>
39+
<version>${jetty.version}</version>
40+
<scope>test</scope>
41+
</dependency>
42+
<dependency>
43+
<groupId>com.squareup.okhttp3</groupId>
44+
<artifactId>okhttp</artifactId>
45+
<version>${okhttp.version}</version>
46+
<scope>test</scope>
47+
</dependency>
48+
<dependency>
49+
<groupId>io.vertx</groupId>
50+
<artifactId>vertx-web-client</artifactId>
51+
<version>${vertx.version}</version>
52+
</dependency>
53+
<dependency>
54+
<groupId>io.github.embedded-middleware</groupId>
55+
<artifactId>embedded-bookkeeper-core</artifactId>
56+
<version>${embedded-bookkeeper.version}</version>
57+
<scope>test</scope>
58+
</dependency>
2559
</dependencies>
2660

2761
</project>

bookkeeper-admin/src/main/java/io/github/protocol/bookkeeper/admin/jdk/InnerHttpClient.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ public class InnerHttpClient {
2929

3030
public InnerHttpClient(Configuration conf) {
3131
HttpClientConfig.Builder clientConfigBuilder = new HttpClientConfig.Builder();
32-
clientConfigBuilder.engine(HttpClientEngine.Java);
32+
HttpClientEngine engine = conf.engine == null ? HttpClientEngine.Java : conf.engine;
33+
clientConfigBuilder.engine(engine);
3334
if (conf.tlsEnabled) {
3435
TlsConfig.Builder tlsConfigBuilder = new TlsConfig.Builder();
3536
io.github.protocol.bookkeeper.admin.api.TlsConfig tlsConfig = conf.tlsConfig;
Lines changed: 30 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,87 +1,74 @@
11
package io.github.protocol.bookkeeper.admin.jdk;
22

3-
import io.github.embedded.bookkeeper.core.EmbeddedBookkeeperServer;
4-
import io.github.protocol.bookkeeper.admin.api.Configuration;
5-
import org.junit.jupiter.api.AfterAll;
63
import org.junit.jupiter.api.Assertions;
7-
import org.junit.jupiter.api.BeforeAll;
8-
import org.junit.jupiter.api.Test;
4+
import org.junit.jupiter.params.ParameterizedTest;
5+
import org.junit.jupiter.params.provider.MethodSource;
96

107
import java.util.Collections;
118

12-
public class AutoRecoveryImplTest {
13-
14-
private static final EmbeddedBookkeeperServer SERVER = new EmbeddedBookkeeperServer();
15-
16-
private static AutoRecoveryImpl autoRecovery = null;
17-
18-
@BeforeAll
19-
public static void setup() throws Exception {
20-
SERVER.start();
21-
Configuration conf = new Configuration();
22-
conf.host("localhost");
23-
conf.port(SERVER.getBkWebPort());
24-
autoRecovery = new AutoRecoveryImpl(new InnerHttpClient(conf));
25-
}
26-
27-
@AfterAll
28-
public static void teardown() throws Exception {
29-
SERVER.close();
30-
}
31-
32-
@Test
33-
public void testAutoRecoveryStatus() throws BookkeeperAdminException {
9+
public class AutoRecoveryImplTest extends BaseTest {
10+
@ParameterizedTest
11+
@MethodSource("provideAutoRecoveries")
12+
public void testAutoRecoveryStatus(AutoRecoveryImpl autoRecovery) throws BookkeeperAdminException {
3413
AutoRecoveryStatus status = autoRecovery.autoRecoveryStatus();
3514
Assertions.assertNotNull(status);
3615
Assertions.assertTrue(status.isEnabled());
3716
}
3817

39-
@Test
40-
public void testRecoveryBookie() throws BookkeeperAdminException {
18+
@ParameterizedTest
19+
@MethodSource("provideAutoRecoveries")
20+
public void testRecoveryBookie(AutoRecoveryImpl autoRecovery) throws BookkeeperAdminException {
4121
RecoveryBookieReqData reqData = new RecoveryBookieReqData();
4222
reqData.setBookieSrc(Collections.singletonList("localhost:3181"));
4323
reqData.setDeleteCookie(false);
4424
autoRecovery.recoveryBookie(reqData);
4525
}
4626

47-
@Test
48-
public void testRecoveryBookieError() {
27+
@ParameterizedTest
28+
@MethodSource("provideAutoRecoveries")
29+
public void testRecoveryBookieError(AutoRecoveryImpl autoRecovery) {
4930
RecoveryBookieReqData reqData = new RecoveryBookieReqData();
5031
// bookie src is required
5132
reqData.setBookieSrc(null);
5233
reqData.setDeleteCookie(false);
5334
Assertions.assertThrows(BookkeeperAdminException.class, () -> autoRecovery.recoveryBookie(reqData));
5435
}
5536

56-
@Test
57-
public void testListUnderReplicatedLedger() {
37+
@ParameterizedTest
38+
@MethodSource("provideAutoRecoveries")
39+
public void testListUnderReplicatedLedger(AutoRecoveryImpl autoRecovery) {
5840
ListUnderReplicatedLedgerReqData reqData = new ListUnderReplicatedLedgerReqData();
5941
reqData.setPrintMissingReplica(true);
6042
Assertions.assertThrows(BookkeeperAdminException.class, () -> autoRecovery.listUnderReplicatedLedger(reqData));
6143
}
6244

63-
@Test
64-
public void testWhoIsAuditor() {
45+
@ParameterizedTest
46+
@MethodSource("provideAutoRecoveries")
47+
public void testWhoIsAuditor(AutoRecoveryImpl autoRecovery) {
6548
Assertions.assertThrows(BookkeeperAdminException.class, () -> autoRecovery.whoIsAuditor());
6649
}
6750

68-
@Test
69-
public void testTriggerAudit() {
51+
@ParameterizedTest
52+
@MethodSource("provideAutoRecoveries")
53+
public void testTriggerAudit(AutoRecoveryImpl autoRecovery) {
7054
Assertions.assertThrows(BookkeeperAdminException.class, () -> autoRecovery.triggerAudit());
7155
}
7256

73-
@Test
74-
public void testLostBookieRecoveryDelayByDefault() {
57+
@ParameterizedTest
58+
@MethodSource("provideAutoRecoveries")
59+
public void testLostBookieRecoveryDelayByDefault(AutoRecoveryImpl autoRecovery) {
7560
Assertions.assertThrows(BookkeeperAdminException.class, () -> autoRecovery.lostBookieRecoveryDelay());
7661
}
7762

78-
@Test
79-
public void testLostBookieRecoveryDelay() throws BookkeeperAdminException {
63+
@ParameterizedTest
64+
@MethodSource("provideAutoRecoveries")
65+
public void testLostBookieRecoveryDelay(AutoRecoveryImpl autoRecovery) throws BookkeeperAdminException {
8066
autoRecovery.lostBookieRecoveryDelay(5);
8167
}
8268

83-
@Test
84-
public void testDecommission() throws BookkeeperAdminException {
69+
@ParameterizedTest
70+
@MethodSource("provideAutoRecoveries")
71+
public void testDecommission(AutoRecoveryImpl autoRecovery) throws BookkeeperAdminException {
8572
autoRecovery.decommission("localhost:3181");
8673
}
8774
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package io.github.protocol.bookkeeper.admin.jdk;
2+
3+
import io.github.embedded.bookkeeper.core.EmbeddedBookkeeperServer;
4+
import io.github.openfacade.http.HttpClientEngine;
5+
import io.github.protocol.bookkeeper.admin.api.Configuration;
6+
import org.junit.jupiter.api.AfterAll;
7+
import org.junit.jupiter.api.BeforeAll;
8+
import org.junit.jupiter.api.TestInstance;
9+
import org.junit.jupiter.params.provider.Arguments;
10+
11+
import java.util.ArrayList;
12+
import java.util.List;
13+
import java.util.stream.Stream;
14+
15+
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
16+
public class BaseTest {
17+
protected final EmbeddedBookkeeperServer server = new EmbeddedBookkeeperServer();
18+
19+
@BeforeAll
20+
public void setup() throws Exception {
21+
server.start();
22+
}
23+
24+
@AfterAll
25+
public void teardown() throws Exception {
26+
server.close();
27+
}
28+
29+
public Stream<Arguments> provideAutoRecoveries() {
30+
List<AutoRecoveryImpl> autoRecoveries = new ArrayList<>();
31+
Configuration conf = new Configuration();
32+
conf.host("localhost");
33+
conf.port(server.getBkWebPort());
34+
for (HttpClientEngine engine : HttpClientEngine.values()) {
35+
conf.engine(engine);
36+
AutoRecoveryImpl recovery = new AutoRecoveryImpl(new InnerHttpClient(conf));
37+
autoRecoveries.add(recovery);
38+
}
39+
return autoRecoveries.stream().map(recovery -> Arguments.arguments(recovery));
40+
}
41+
42+
public Stream<Arguments> provideBookiesImpl() {
43+
List<Bookies> bookies = new ArrayList<>();
44+
Configuration conf = new Configuration();
45+
conf.host("localhost");
46+
conf.port(server.getBkWebPort());
47+
for (HttpClientEngine engine : HttpClientEngine.values()) {
48+
conf.engine(engine);
49+
Bookies bookie = new BookiesImpl(new InnerHttpClient(conf));
50+
bookies.add(bookie);
51+
}
52+
return bookies.stream().map(recovery -> Arguments.arguments(recovery));
53+
}
54+
55+
public Stream<Arguments> provideConfigsImpl() {
56+
List<Configs> configs = new ArrayList<>();
57+
Configuration conf = new Configuration();
58+
conf.host("localhost");
59+
conf.port(server.getBkWebPort());
60+
for (HttpClientEngine engine : HttpClientEngine.values()) {
61+
conf.engine(engine);
62+
Configs config = new ConfigsImpl(new InnerHttpClient(conf));
63+
configs.add(config);
64+
}
65+
return configs.stream().map(recovery -> Arguments.arguments(recovery));
66+
}
67+
}

0 commit comments

Comments
 (0)