From 9ad9c1041da69e30a7920940fb234e444bbf594c Mon Sep 17 00:00:00 2001 From: sttk Date: Sat, 11 Apr 2026 21:50:14 +0900 Subject: [PATCH] refactor: changed constructor of RedisDataSrc --- .../github/sttk/sabi_redis/RedisDataSrc.java | 182 ++++-------------- .../sttk/sabi_redis/StandaloneTest.java | 86 ++++++--- 2 files changed, 95 insertions(+), 173 deletions(-) diff --git a/src/main/java/com/github/sttk/sabi_redis/RedisDataSrc.java b/src/main/java/com/github/sttk/sabi_redis/RedisDataSrc.java index db0784d..e834e29 100644 --- a/src/main/java/com/github/sttk/sabi_redis/RedisDataSrc.java +++ b/src/main/java/com/github/sttk/sabi_redis/RedisDataSrc.java @@ -11,6 +11,7 @@ import io.lettuce.core.RedisClient; import io.lettuce.core.RedisURI; import io.lettuce.core.resource.ClientResources; +import io.lettuce.core.resource.DefaultClientResources; import java.net.URI; /** @@ -30,57 +31,32 @@ public record NotSetupYet() {} public record AlreadySetup() {} /** - * The error reason that indicates failing to create a {@link RedisClient} from a URI string. - * - * @param uri a URI string. - */ - public record FailToCreateClientFromUriString(String uri) {} - - /** - * The error reason that indicates failing to create a {@link RedisClient} from a {@link URI} - * object. - * - * @param uri a URI object. - */ - public record FailToCreateClientFromURI(URI uri) {} - - /** - * The error reason that indicates failing to create a {@link RedisClient} from a {@link RedisURI} - * object. - * - * @param redisURI a RedisURI object. - */ - public record FailToCreateClientFromRedisURI(RedisURI redisURI) {} - - /** - * The error reason that indicates failing to create a {@link RedisClient} from a {@link + * The error reason that indicates failing to create a {@link RedisClient} with a {@link * ClientResources} object and a URI string. * * @param clientResources a ClientResources object. * @param uri a URI string. */ - public record FailToCreateClientFromClientResourcesAndUriString( - ClientResources clientResources, String uri) {} + public record FailToCreateClientWithUriString(ClientResources clientResources, String uri) {} /** - * The error reason that indicates failing to create a {@link RedisClient} from a {@link - * ClientResources} object and a {@link URI} object. + * The error reason that indicates failing to create a {@link RedisClient} with a {@link + * ClientResources} object and a {@link RedisURI} object. * * @param clientResources a ClientResources object. - * @param uri a URI object. + * @param redisURI a RedisURI object. */ - public record FailToCreateClientFromClientResourcesAndURI( - ClientResources clientResources, URI uri) {} + public record FailToCreateClientWithRedisURI( + ClientResources clientResources, RedisURI redisURI) {} /** - * The error reason that indicates failing to create a {@link RedisClient} from a {@link - * ClientResources} object and a {@link RedisURI} object. + * The error reason that indicates failing to connect to a Redis server in standalone + * configuration. * * @param clientResources a ClientResources object. * @param redisURI a RedisURI object. */ - public record FailToCreateClientFromClientResourcesAndRedisURI( - ClientResources clientResources, RedisURI redisURI) {} + public record FailToConnectToRedis(ClientResources clientResources, RedisURI redisURI) {} // Fields @@ -95,7 +71,8 @@ public record FailToCreateClientFromClientResourcesAndRedisURI( * @param uri a URI string. */ public RedisDataSrc(String uri) { - this.redisClientFactory = new RedisClientFactoryByUriString(uri); + var cr = DefaultClientResources.create(); + this.redisClientFactory = new RedisClientFactoryWithUriString(cr, uri); } /** @@ -104,7 +81,8 @@ public RedisDataSrc(String uri) { * @param uri a URI object. */ public RedisDataSrc(URI uri) { - this.redisClientFactory = new RedisClientFactoryByUriObject(uri); + var cr = DefaultClientResources.create(); + this.redisClientFactory = new RedisClientFactoryWithUriString(cr, uri.toString()); } /** @@ -113,7 +91,8 @@ public RedisDataSrc(URI uri) { * @param redisURI a RedisURI object. */ public RedisDataSrc(RedisURI redisURI) { - this.redisClientFactory = new RedisClientFactoryByRedisURI(redisURI); + var cr = DefaultClientResources.create(); + this.redisClientFactory = new RedisClientFactoryWithRedisURI(cr, redisURI); } /** @@ -123,7 +102,7 @@ public RedisDataSrc(RedisURI redisURI) { * @param uri a URI string. */ public RedisDataSrc(ClientResources cr, String uri) { - this.redisClientFactory = new RedisClientFactoryByClientResourcesAndUriString(cr, uri); + this.redisClientFactory = new RedisClientFactoryWithUriString(cr, uri); } /** @@ -134,7 +113,7 @@ public RedisDataSrc(ClientResources cr, String uri) { * @param uri a URI object. */ public RedisDataSrc(ClientResources cr, URI uri) { - this.redisClientFactory = new RedisClientFactoryByClientResourcesAndUriObject(cr, uri); + this.redisClientFactory = new RedisClientFactoryWithUriString(cr, uri.toString()); } /** @@ -145,7 +124,7 @@ public RedisDataSrc(ClientResources cr, URI uri) { * @param redisURI a RedisURI object. */ public RedisDataSrc(ClientResources cr, RedisURI redisURI) { - this.redisClientFactory = new RedisClientFactoryByClientResourcesAndRedisURI(cr, redisURI); + this.redisClientFactory = new RedisClientFactoryWithRedisURI(cr, redisURI); } // Methods @@ -198,135 +177,56 @@ private interface RedisClientFactory { RedisClient create() throws Err; } - private class RedisClientFactoryByUriString implements RedisClientFactory { + private class RedisClientFactoryWithUriString implements RedisClientFactory { + final ClientResources cr; final String uri; - RedisClientFactoryByUriString(String uri) { + RedisClientFactoryWithUriString(ClientResources cr, String uri) { + this.cr = cr; this.uri = uri; } @Override @SuppressWarnings("try") public RedisClient create() throws Err { + RedisClient client = null; try { - var client = RedisClient.create(this.uri); - try (var conn = client.connect()) {} - return client; + client = RedisClient.create(this.cr, this.uri); } catch (Exception e) { - throw new Err(new FailToCreateClientFromUriString(this.uri), e); + throw new Err(new FailToCreateClientWithUriString(this.cr, this.uri), e); } - } - } - - private class RedisClientFactoryByUriObject implements RedisClientFactory { - final URI uri; - - RedisClientFactoryByUriObject(URI uri) { - this.uri = uri; - } - - @Override - @SuppressWarnings("try") - public RedisClient create() throws Err { - try { - var client = RedisClient.create(this.uri.toString()); - try (var conn = client.connect()) {} - return client; + try (var conn = client.connect()) { } catch (Exception e) { - throw new Err(new FailToCreateClientFromURI(this.uri), e); + var redisURL = RedisURI.create(this.uri); + throw new Err(new FailToConnectToRedis(this.cr, redisURL), e); } + return client; } } - private class RedisClientFactoryByRedisURI implements RedisClientFactory { + private class RedisClientFactoryWithRedisURI implements RedisClientFactory { + final ClientResources cr; final RedisURI redisURI; - RedisClientFactoryByRedisURI(RedisURI redisURI) { + RedisClientFactoryWithRedisURI(ClientResources cr, RedisURI redisURI) { + this.cr = cr; this.redisURI = redisURI; } @Override @SuppressWarnings("try") public RedisClient create() throws Err { + RedisClient client = null; try { - var client = RedisClient.create(this.redisURI); - try (var conn = client.connect()) {} - return client; + client = RedisClient.create(this.cr, this.redisURI); } catch (Exception e) { - throw new Err(new FailToCreateClientFromRedisURI(this.redisURI), e); + throw new Err(new FailToCreateClientWithRedisURI(this.cr, this.redisURI), e); } - } - } - - private class RedisClientFactoryByClientResourcesAndUriString implements RedisClientFactory { - final ClientResources clientResources; - final String uri; - - RedisClientFactoryByClientResourcesAndUriString(ClientResources cr, String uri) { - this.clientResources = cr; - this.uri = uri; - } - - @Override - @SuppressWarnings("try") - public RedisClient create() throws Err { - try { - var client = RedisClient.create(this.clientResources, this.uri); - try (var conn = client.connect()) {} - return client; - } catch (Exception e) { - throw new Err( - new FailToCreateClientFromClientResourcesAndUriString(this.clientResources, this.uri), - e); - } - } - } - - private class RedisClientFactoryByClientResourcesAndUriObject implements RedisClientFactory { - final ClientResources clientResources; - final URI uri; - - RedisClientFactoryByClientResourcesAndUriObject(ClientResources cr, URI uri) { - this.clientResources = cr; - this.uri = uri; - } - - @Override - @SuppressWarnings("try") - public RedisClient create() throws Err { - try { - var client = RedisClient.create(this.clientResources, this.uri.toString()); - try (var conn = client.connect()) {} - return client; - } catch (Exception e) { - throw new Err( - new FailToCreateClientFromClientResourcesAndURI(this.clientResources, this.uri), e); - } - } - } - - private class RedisClientFactoryByClientResourcesAndRedisURI implements RedisClientFactory { - final ClientResources clientResources; - final RedisURI redisURI; - - RedisClientFactoryByClientResourcesAndRedisURI(ClientResources cr, RedisURI redisURI) { - this.clientResources = cr; - this.redisURI = redisURI; - } - - @Override - @SuppressWarnings("try") - public RedisClient create() throws Err { - try { - var client = RedisClient.create(this.clientResources, this.redisURI); - try (var conn = client.connect()) {} - return client; + try (var conn = client.connect()) { } catch (Exception e) { - throw new Err( - new FailToCreateClientFromClientResourcesAndRedisURI( - this.clientResources, this.redisURI), - e); + throw new Err(new FailToConnectToRedis(this.cr, this.redisURI), e); } + return client; } } } diff --git a/src/test/java/com/github/sttk/sabi_redis/StandaloneTest.java b/src/test/java/com/github/sttk/sabi_redis/StandaloneTest.java index 77a8611..d923be0 100644 --- a/src/test/java/com/github/sttk/sabi_redis/StandaloneTest.java +++ b/src/test/java/com/github/sttk/sabi_redis/StandaloneTest.java @@ -39,8 +39,9 @@ void test_NewRedisDataSrcWithUriStringButInvalidAddr() { assertThat(reason.errors()).hasSize(1); var err2 = reason.errors().get("redis"); switch (err2.getReason()) { - case RedisDataSrc.FailToCreateClientFromUriString reason2 -> { + case RedisDataSrc.FailToCreateClientWithUriString reason2 -> { assertThat(reason2.uri()).isEqualTo("xxxx"); + assertThat(reason2.clientResources()).isNotNull(); assertThat(err2.getCause().toString()) .isEqualTo("java.lang.IllegalArgumentException: URI scheme must not be null"); } @@ -65,8 +66,11 @@ void test_NewRedisDataSrcWithUriStringButNotFoundAddr() { assertThat(reason.errors()).hasSize(1); var err2 = reason.errors().get("redis"); switch (err2.getReason()) { - case RedisDataSrc.FailToCreateClientFromUriString reason2 -> { - assertThat(reason2.uri()).isEqualTo("redis://127.0.0.1:9999/0"); + case RedisDataSrc.FailToConnectToRedis reason2 -> { + assertThat(reason2.redisURI().getHost()).isEqualTo("127.0.0.1"); + assertThat(reason2.redisURI().getPort()).isEqualTo(9999); + assertThat(reason2.redisURI().getDatabase()).isEqualTo(0); + assertThat(reason2.clientResources()).isNotNull(); assertThat(err2.getCause().toString()) .isEqualTo( "io.lettuce.core.RedisConnectionException: Unable to connect to 127.0.0.1/:9999"); @@ -111,8 +115,9 @@ void test_NewRedisDataSrcWithURIButInvalidAddr() { assertThat(reason.errors()).hasSize(1); var err2 = reason.errors().get("redis"); switch (err2.getReason()) { - case RedisDataSrc.FailToCreateClientFromURI reason2 -> { + case RedisDataSrc.FailToCreateClientWithUriString reason2 -> { assertThat(reason2.uri().toString()).isEqualTo("xxxx"); + assertThat(reason2.clientResources()).isNotNull(); assertThat(err2.getCause().toString()) .isEqualTo("java.lang.IllegalArgumentException: URI scheme must not be null"); } @@ -141,8 +146,11 @@ void test_NewRedisDataSrcWithURIButNotFoundAddr() { assertThat(reason.errors()).hasSize(1); var err2 = reason.errors().get("redis"); switch (err2.getReason()) { - case RedisDataSrc.FailToCreateClientFromURI reason2 -> { - assertThat(reason2.uri().toString()).isEqualTo("redis://127.0.0.1:9999/0"); + case RedisDataSrc.FailToConnectToRedis reason2 -> { + assertThat(reason2.redisURI().getHost()).isEqualTo("127.0.0.1"); + assertThat(reason2.redisURI().getPort()).isEqualTo(9999); + assertThat(reason2.redisURI().getDatabase()).isEqualTo(0); + assertThat(reason2.clientResources()).isNotNull(); assertThat(err2.getCause().toString()) .isEqualTo( "io.lettuce.core.RedisConnectionException: Unable to connect to 127.0.0.1/:9999"); @@ -179,8 +187,11 @@ void test_NewRedisDataSrcWithRedisURIButInvalidAddr() { assertThat(reason.errors()).hasSize(1); var err2 = reason.errors().get("redis"); switch (err2.getReason()) { - case RedisDataSrc.FailToCreateClientFromRedisURI reason2 -> { - assertThat(reason2.redisURI().toString()).isEqualTo("redis://127.0.0.1:9999/1"); + case RedisDataSrc.FailToConnectToRedis reason2 -> { + assertThat(reason2.redisURI().getHost()).isEqualTo("127.0.0.1"); + assertThat(reason2.redisURI().getPort()).isEqualTo(9999); + assertThat(reason2.redisURI().getDatabase()).isEqualTo(1); + assertThat(reason2.clientResources()).isNotNull(); assertThat(err2.getCause().toString()) .isEqualTo( "io.lettuce.core.RedisConnectionException: Unable to connect to 127.0.0.1/:9999"); @@ -195,9 +206,9 @@ void test_NewRedisDataSrcWithRedisURIButInvalidAddr() { @Test void test_NewRedisDataSrcWithClientResourcesAndUriString() { - var res = DefaultClientResources.create(); + var cr = DefaultClientResources.create(); var data = new DataHub(); - data.uses("redis", new RedisDataSrc(res, "redis://127.0.0.1:6379/0")); + data.uses("redis", new RedisDataSrc(cr, "redis://127.0.0.1:6379/0")); try { data.run(d -> {}); } catch (Err e) { @@ -207,9 +218,9 @@ void test_NewRedisDataSrcWithClientResourcesAndUriString() { @Test void test_NewRedisDataSrcWithClientResourcesAndUriStringButInvalidAddr() { - var res = DefaultClientResources.create(); + var cr = DefaultClientResources.create(); var data = new DataHub(); - data.uses("redis", new RedisDataSrc(res, "xxxx")); + data.uses("redis", new RedisDataSrc(cr, "xxxx")); try { data.run(d -> {}); fail(); @@ -219,8 +230,9 @@ void test_NewRedisDataSrcWithClientResourcesAndUriStringButInvalidAddr() { assertThat(reason.errors()).hasSize(1); var err2 = reason.errors().get("redis"); switch (err2.getReason()) { - case RedisDataSrc.FailToCreateClientFromClientResourcesAndUriString reason2 -> { + case RedisDataSrc.FailToCreateClientWithUriString reason2 -> { assertThat(reason2.uri()).isEqualTo("xxxx"); + assertThat(reason2.clientResources()).isEqualTo(cr); assertThat(err2.getCause().toString()) .isEqualTo("java.lang.IllegalArgumentException: URI scheme must not be null"); } @@ -234,9 +246,9 @@ void test_NewRedisDataSrcWithClientResourcesAndUriStringButInvalidAddr() { @Test void test_NewRedisDataSrcWithClientResourcesAndUriStringButNotFoundAddr() { - var res = DefaultClientResources.create(); + var cr = DefaultClientResources.create(); var data = new DataHub(); - data.uses("redis", new RedisDataSrc(res, "redis://127.0.0.1:9999/0")); + data.uses("redis", new RedisDataSrc(cr, "redis://127.0.0.1:9999/0")); try { data.run(d -> {}); fail(); @@ -246,8 +258,11 @@ void test_NewRedisDataSrcWithClientResourcesAndUriStringButNotFoundAddr() { assertThat(reason.errors()).hasSize(1); var err2 = reason.errors().get("redis"); switch (err2.getReason()) { - case RedisDataSrc.FailToCreateClientFromClientResourcesAndUriString reason2 -> { - assertThat(reason2.uri()).isEqualTo("redis://127.0.0.1:9999/0"); + case RedisDataSrc.FailToConnectToRedis reason2 -> { + assertThat(reason2.redisURI().getHost()).isEqualTo("127.0.0.1"); + assertThat(reason2.redisURI().getPort()).isEqualTo(9999); + assertThat(reason2.redisURI().getDatabase()).isEqualTo(0); + assertThat(reason2.clientResources()).isEqualTo(cr); assertThat(err2.getCause().toString()) .isEqualTo( "io.lettuce.core.RedisConnectionException: Unable to connect to 127.0.0.1/:9999"); @@ -262,10 +277,10 @@ void test_NewRedisDataSrcWithClientResourcesAndUriStringButNotFoundAddr() { @Test void test_NewRedisDataSrcWithClientResourcesAndURI() { - var res = DefaultClientResources.create(); + var cr = DefaultClientResources.create(); var data = new DataHub(); try { - data.uses("redis", new RedisDataSrc(res, new URI("redis://127.0.0.1:6379/0"))); + data.uses("redis", new RedisDataSrc(cr, new URI("redis://127.0.0.1:6379/0"))); } catch (URISyntaxException e) { fail(e); } @@ -278,10 +293,10 @@ void test_NewRedisDataSrcWithClientResourcesAndURI() { @Test void test_NewRedisDataSrcWithClientResourcesAndURIButInvalidAddr() { - var res = DefaultClientResources.create(); + var cr = DefaultClientResources.create(); var data = new DataHub(); try { - data.uses("redis", new RedisDataSrc(res, new URI("xxxx"))); + data.uses("redis", new RedisDataSrc(cr, new URI("xxxx"))); } catch (URISyntaxException e) { fail(e); } @@ -294,8 +309,9 @@ void test_NewRedisDataSrcWithClientResourcesAndURIButInvalidAddr() { assertThat(reason.errors()).hasSize(1); var err2 = reason.errors().get("redis"); switch (err2.getReason()) { - case RedisDataSrc.FailToCreateClientFromClientResourcesAndURI reason2 -> { + case RedisDataSrc.FailToCreateClientWithUriString reason2 -> { assertThat(reason2.uri().toString()).isEqualTo("xxxx"); + assertThat(reason2.clientResources()).isEqualTo(cr); assertThat(err2.getCause().toString()) .isEqualTo("java.lang.IllegalArgumentException: URI scheme must not be null"); } @@ -309,10 +325,10 @@ void test_NewRedisDataSrcWithClientResourcesAndURIButInvalidAddr() { @Test void test_NewRedisDataSrcWithClientResourcesAndURIButNotFoundAddr() { - var res = DefaultClientResources.create(); + var cr = DefaultClientResources.create(); var data = new DataHub(); try { - data.uses("redis", new RedisDataSrc(res, new URI("redis://127.0.0.1:9999/0"))); + data.uses("redis", new RedisDataSrc(cr, new URI("redis://127.0.0.1:9999/0"))); } catch (URISyntaxException e) { fail(e); } @@ -325,8 +341,11 @@ void test_NewRedisDataSrcWithClientResourcesAndURIButNotFoundAddr() { assertThat(reason.errors()).hasSize(1); var err2 = reason.errors().get("redis"); switch (err2.getReason()) { - case RedisDataSrc.FailToCreateClientFromClientResourcesAndURI reason2 -> { - assertThat(reason2.uri().toString()).isEqualTo("redis://127.0.0.1:9999/0"); + case RedisDataSrc.FailToConnectToRedis reason2 -> { + assertThat(reason2.redisURI().getHost()).isEqualTo("127.0.0.1"); + assertThat(reason2.redisURI().getPort()).isEqualTo(9999); + assertThat(reason2.redisURI().getDatabase()).isEqualTo(0); + assertThat(reason2.clientResources()).isEqualTo(cr); assertThat(err2.getCause().toString()) .isEqualTo( "io.lettuce.core.RedisConnectionException: Unable to connect to 127.0.0.1/:9999"); @@ -341,9 +360,9 @@ void test_NewRedisDataSrcWithClientResourcesAndURIButNotFoundAddr() { @Test void test_NewRedisDataSrcWithClientResourcesAndRedisURI() { - var res = DefaultClientResources.create(); + var cr = DefaultClientResources.create(); var data = new DataHub(); - data.uses("redis", new RedisDataSrc(res, RedisURI.create("redis://127.0.0.1:6379/0"))); + data.uses("redis", new RedisDataSrc(cr, RedisURI.create("redis://127.0.0.1:6379/0"))); try { data.run(d -> {}); } catch (Err e) { @@ -353,9 +372,9 @@ void test_NewRedisDataSrcWithClientResourcesAndRedisURI() { @Test void test_NewRedisDataSrcWithClientResourcesAndRedisURIButInvalidAddr() { - var res = DefaultClientResources.create(); + var cr = DefaultClientResources.create(); var data = new DataHub(); - data.uses("redis", new RedisDataSrc(res, RedisURI.create("redis://127.0.0.1:9999/1"))); + data.uses("redis", new RedisDataSrc(cr, RedisURI.create("redis://127.0.0.1:9999/1"))); try { data.run(d -> {}); fail(); @@ -365,8 +384,11 @@ void test_NewRedisDataSrcWithClientResourcesAndRedisURIButInvalidAddr() { assertThat(reason.errors()).hasSize(1); var err2 = reason.errors().get("redis"); switch (err2.getReason()) { - case RedisDataSrc.FailToCreateClientFromClientResourcesAndRedisURI reason2 -> { - assertThat(reason2.redisURI().toString()).isEqualTo("redis://127.0.0.1:9999/1"); + case RedisDataSrc.FailToConnectToRedis reason2 -> { + assertThat(reason2.redisURI().getHost()).isEqualTo("127.0.0.1"); + assertThat(reason2.redisURI().getPort()).isEqualTo(9999); + assertThat(reason2.redisURI().getDatabase()).isEqualTo(1); + assertThat(reason2.clientResources()).isEqualTo(cr); assertThat(err2.getCause().toString()) .isEqualTo( "io.lettuce.core.RedisConnectionException: Unable to connect to 127.0.0.1/:9999");