diff --git a/ci/spotbugs/exclude.xml b/ci/spotbugs/exclude.xml
index cd71318..9d17990 100644
--- a/ci/spotbugs/exclude.xml
+++ b/ci/spotbugs/exclude.xml
@@ -7,6 +7,10 @@
+
+
+
+
diff --git a/src/main/java/io/github/protocol/bookkeeper/Configs.java b/src/main/java/io/github/protocol/bookkeeper/Configs.java
new file mode 100644
index 0000000..3f68010
--- /dev/null
+++ b/src/main/java/io/github/protocol/bookkeeper/Configs.java
@@ -0,0 +1,12 @@
+package io.github.protocol.bookkeeper;
+
+
+import java.util.Map;
+
+public interface Configs {
+
+ void putConfig(Map config) throws Exception;
+
+ Map getConfig() throws Exception;
+
+}
diff --git a/src/main/java/io/github/protocol/bookkeeper/ConfigsImpl.java b/src/main/java/io/github/protocol/bookkeeper/ConfigsImpl.java
new file mode 100644
index 0000000..1b2ebae
--- /dev/null
+++ b/src/main/java/io/github/protocol/bookkeeper/ConfigsImpl.java
@@ -0,0 +1,24 @@
+package io.github.protocol.bookkeeper;
+
+
+import java.net.http.HttpResponse;
+import java.util.Map;
+
+public class ConfigsImpl implements Configs {
+
+ private final InnerHttpClient innerHttpClient;
+
+ public ConfigsImpl(InnerHttpClient innerHttpClient) {
+ this.innerHttpClient = innerHttpClient;
+ }
+ @Override
+ public void putConfig(Map config) throws Exception {
+ innerHttpClient.put(UrlConst.CONFIG_SERVER_CONFIG, JacksonService.toJson(config));
+ }
+
+ @Override
+ public Map getConfig() throws Exception {
+ HttpResponse resp = innerHttpClient.get(UrlConst.CONFIG_SERVER_CONFIG);
+ return JacksonService.toObject(resp.body(), Map.class);
+ }
+}
diff --git a/src/test/java/io/github/protocol/bookkeeper/ConfigsImplTest.java b/src/test/java/io/github/protocol/bookkeeper/ConfigsImplTest.java
new file mode 100644
index 0000000..38c273e
--- /dev/null
+++ b/src/test/java/io/github/protocol/bookkeeper/ConfigsImplTest.java
@@ -0,0 +1,48 @@
+package io.github.protocol.bookkeeper;
+
+import io.github.embedded.bookkeeper.core.EmbeddedBookkeeperServer;
+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 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.setHost("localhost");
+ conf.setPort(SERVER.getBkWebPort());
+ configsImpl = new ConfigsImpl(new InnerHttpClient(conf));
+ }
+
+ @Test
+ public void testPutConfig() throws Exception {
+ HashMap config = new HashMap<>();
+ config.put("allowEphemeralPorts", "false");
+ configsImpl.putConfig(config);
+ Map resp = configsImpl.getConfig();
+ Assertions.assertEquals("false", resp.get("allowEphemeralPorts"));
+
+ }
+
+ @Test
+ public void testGetConfig() throws Exception {
+ Map config = configsImpl.getConfig();
+ Assertions.assertTrue(config.size() != 0);
+ }
+
+ @AfterAll
+ public static void teardown() throws Exception {
+ SERVER.close();
+ }
+}