|
31 | 31 |
|
32 | 32 | import org.junit.jupiter.api.BeforeEach;
|
33 | 33 | import org.junit.jupiter.api.Test;
|
| 34 | +import org.junit.jupiter.params.ParameterizedTest; |
| 35 | +import org.junit.jupiter.params.provider.ValueSource; |
34 | 36 |
|
35 | 37 | import io.lettuce.core.ReadFrom;
|
36 | 38 | import io.lettuce.core.RedisURI;
|
@@ -220,44 +222,135 @@ void valueOfUnknown() {
|
220 | 222 | assertThatThrownBy(() -> ReadFrom.valueOf("unknown")).isInstanceOf(IllegalArgumentException.class);
|
221 | 223 | }
|
222 | 224 |
|
223 |
| - @Test |
224 |
| - void valueOfNearest() { |
225 |
| - assertThat(ReadFrom.valueOf("nearest")).isEqualTo(ReadFrom.NEAREST); |
| 225 | + @ParameterizedTest |
| 226 | + @ValueSource(strings = { "NEAREST", "nearest", "Nearest" }) |
| 227 | + void valueOfNearest(String name) { |
| 228 | + assertThat(ReadFrom.valueOf(name)).isEqualTo(ReadFrom.NEAREST); |
226 | 229 | }
|
227 | 230 |
|
228 |
| - @Test |
229 |
| - void valueOfMaster() { |
230 |
| - assertThat(ReadFrom.valueOf("master")).isEqualTo(ReadFrom.UPSTREAM); |
| 231 | + @ParameterizedTest |
| 232 | + @ValueSource(strings = { "LOWEST-LATENCY", "lowest-latency", "lowestLatency", "lowestlatency", "LOWESTLATENCY" }) |
| 233 | + void valueOfLowestLatency(String name) { |
| 234 | + assertThat(ReadFrom.valueOf(name)).isEqualTo(ReadFrom.LOWEST_LATENCY); |
231 | 235 | }
|
232 | 236 |
|
233 |
| - @Test |
234 |
| - void valueOfMasterPreferred() { |
235 |
| - assertThat(ReadFrom.valueOf("masterPreferred")).isEqualTo(ReadFrom.UPSTREAM_PREFERRED); |
| 237 | + @ParameterizedTest |
| 238 | + @ValueSource(strings = { "MASTER", "master", "Master" }) |
| 239 | + void valueOfMaster(String name) { |
| 240 | + assertThat(ReadFrom.valueOf(name)).isEqualTo(ReadFrom.UPSTREAM); |
| 241 | + } |
| 242 | + |
| 243 | + @ParameterizedTest |
| 244 | + @ValueSource(strings = { "MASTER-PREFERRED", "master-preferred", "masterPreferred", "masterpreferred", "MASTERPREFERRED" }) |
| 245 | + void valueOfMasterPreferred(String name) { |
| 246 | + assertThat(ReadFrom.valueOf(name)).isEqualTo(ReadFrom.UPSTREAM_PREFERRED); |
| 247 | + } |
| 248 | + |
| 249 | + @ParameterizedTest |
| 250 | + @ValueSource(strings = { "slave", "SLAVE", "Slave" }) |
| 251 | + void valueOfSlave(String name) { |
| 252 | + assertThat(ReadFrom.valueOf(name)).isEqualTo(ReadFrom.REPLICA); |
| 253 | + } |
| 254 | + |
| 255 | + @ParameterizedTest |
| 256 | + @ValueSource(strings = { "SLAVE-PREFERRED", "slave-preferred", "slavePreferred", "slavepreferred", "SLAVEPREFERRED" }) |
| 257 | + void valueOfSlavePreferred(String name) { |
| 258 | + assertThat(ReadFrom.valueOf(name)).isEqualTo(ReadFrom.REPLICA_PREFERRED); |
| 259 | + } |
| 260 | + |
| 261 | + @ParameterizedTest |
| 262 | + @ValueSource(strings = { "REPLICA-PREFERRED", "replica-preferred", "replicaPreferred", "replicapreferred", |
| 263 | + "REPLICAPREFERRED" }) |
| 264 | + void valueOfReplicaPreferred(String name) { |
| 265 | + assertThat(ReadFrom.valueOf(name)).isEqualTo(ReadFrom.REPLICA_PREFERRED); |
| 266 | + } |
| 267 | + |
| 268 | + @ParameterizedTest |
| 269 | + @ValueSource(strings = { "ANY-REPLICA", "any-replica", "anyReplica", "anyreplica", "ANYREPLICA" }) |
| 270 | + void valueOfAnyReplica(String name) { |
| 271 | + assertThat(ReadFrom.valueOf(name)).isEqualTo(ReadFrom.ANY_REPLICA); |
236 | 272 | }
|
237 | 273 |
|
238 | 274 | @Test
|
239 |
| - void valueOfSlave() { |
240 |
| - assertThat(ReadFrom.valueOf("slave")).isEqualTo(ReadFrom.REPLICA); |
| 275 | + void valueOfSubnetWithEmptyCidrNotations() { |
| 276 | + assertThatThrownBy(() -> ReadFrom.valueOf("subnet")).isInstanceOf(IllegalArgumentException.class); |
| 277 | + } |
| 278 | + |
| 279 | + @ParameterizedTest |
| 280 | + @ValueSource(strings = { "subnet:192.0.2.0/24,2001:db8:abcd:0000::/52", "SUBNET:192.0.2.0/24,2001:db8:abcd:0000::/52" }) |
| 281 | + void valueOfSubnet(String name) { |
| 282 | + RedisClusterNode nodeInSubnetIpv4 = createNodeWithHost("192.0.2.1"); |
| 283 | + RedisClusterNode nodeNotInSubnetIpv4 = createNodeWithHost("198.51.100.1"); |
| 284 | + RedisClusterNode nodeInSubnetIpv6 = createNodeWithHost("2001:db8:abcd:0000::1"); |
| 285 | + RedisClusterNode nodeNotInSubnetIpv6 = createNodeWithHost("2001:db8:abcd:1000::"); |
| 286 | + ReadFrom sut = ReadFrom.valueOf(name); |
| 287 | + List<RedisNodeDescription> result = sut |
| 288 | + .select(getNodes(nodeInSubnetIpv4, nodeNotInSubnetIpv4, nodeInSubnetIpv6, nodeNotInSubnetIpv6)); |
| 289 | + assertThat(result).hasSize(2).containsExactly(nodeInSubnetIpv4, nodeInSubnetIpv6); |
241 | 290 | }
|
242 | 291 |
|
243 | 292 | @Test
|
244 |
| - void valueOfSlavePreferred() { |
245 |
| - assertThat(ReadFrom.valueOf("slavePreferred")).isEqualTo(ReadFrom.REPLICA_PREFERRED); |
| 293 | + void valueOfRegexWithEmptyRegexValue() { |
| 294 | + assertThatThrownBy(() -> ReadFrom.valueOf("regex")).isInstanceOf(IllegalArgumentException.class); |
| 295 | + } |
| 296 | + |
| 297 | + @ParameterizedTest |
| 298 | + @ValueSource(strings = { "regex:.*region-1.*", "REGEX:.*region-1.*" }) |
| 299 | + void valueOfRegex(String name) { |
| 300 | + ReadFrom sut = ReadFrom.valueOf(name); |
| 301 | + |
| 302 | + RedisClusterNode node1 = createNodeWithHost("redis-node-1.region-1.example.com"); |
| 303 | + RedisClusterNode node2 = createNodeWithHost("redis-node-2.region-1.example.com"); |
| 304 | + RedisClusterNode node3 = createNodeWithHost("redis-node-1.region-2.example.com"); |
| 305 | + RedisClusterNode node4 = createNodeWithHost("redis-node-2.region-2.example.com"); |
| 306 | + |
| 307 | + List<RedisNodeDescription> result = sut.select(getNodes(node1, node2, node3, node4)); |
| 308 | + |
| 309 | + assertThat(sut).hasFieldOrPropertyWithValue("orderSensitive", false); |
| 310 | + assertThat(result).hasSize(2).containsExactly(node1, node2); |
| 311 | + } |
| 312 | + |
| 313 | + @ParameterizedTest |
| 314 | + @ValueSource(strings = { "REPLICA", "replica", "Replica" }) |
| 315 | + void valueOfReplica(String name) { |
| 316 | + assertThat(ReadFrom.valueOf(name)).isEqualTo(ReadFrom.REPLICA); |
| 317 | + } |
| 318 | + |
| 319 | + @ParameterizedTest |
| 320 | + @ValueSource(strings = { "UPSTREAM", "upstream", "Upstream" }) |
| 321 | + void valueOfUpstream(String name) { |
| 322 | + assertThat(ReadFrom.valueOf(name)).isEqualTo(ReadFrom.UPSTREAM); |
| 323 | + } |
| 324 | + |
| 325 | + @ParameterizedTest |
| 326 | + @ValueSource(strings = { "UPSTREAM-PREFERRED", "upstream-preferred", "upstreamPreferred", "UPSTREAMPREFERRED", |
| 327 | + "UpstreamPreferred" }) |
| 328 | + void valueOfUpstreamPreferred(String name) { |
| 329 | + assertThat(ReadFrom.valueOf(name)).isEqualTo(ReadFrom.UPSTREAM_PREFERRED); |
246 | 330 | }
|
247 | 331 |
|
248 | 332 | @Test
|
249 |
| - void valueOfAnyReplica() { |
250 |
| - assertThat(ReadFrom.valueOf("anyReplica")).isEqualTo(ReadFrom.ANY_REPLICA); |
| 333 | + void valueOfWhenNameIsPresentButValueIsAbsent() { |
| 334 | + assertThatThrownBy(() -> ReadFrom.valueOf("subnet:")).isInstanceOf(IllegalArgumentException.class) |
| 335 | + .hasMessageContaining("Value must not be empty for the type 'subnet'"); |
251 | 336 | }
|
252 | 337 |
|
253 | 338 | @Test
|
254 |
| - void valueOfSubnet() { |
255 |
| - assertThatThrownBy(() -> ReadFrom.valueOf("subnet")).isInstanceOf(IllegalArgumentException.class); |
| 339 | + void valueOfWhenNameIsEmptyButValueIsPresent() { |
| 340 | + assertThatThrownBy(() -> ReadFrom.valueOf(":192.0.2.0/24")).isInstanceOf(IllegalArgumentException.class) |
| 341 | + .hasMessageContaining("ReadFrom :192.0.2.0/24 not supported"); |
256 | 342 | }
|
257 | 343 |
|
258 | 344 | @Test
|
259 |
| - void valueOfRegex() { |
260 |
| - assertThatThrownBy(() -> ReadFrom.valueOf("regex")).isInstanceOf(IllegalArgumentException.class); |
| 345 | + void valueOfRegexWithInvalidPatternShouldThrownIllegalArgumentException() { |
| 346 | + assertThatThrownBy(() -> ReadFrom.valueOf("regex:\\")).isInstanceOf(IllegalArgumentException.class) |
| 347 | + .hasMessageContaining("is not a valid regular expression"); |
| 348 | + } |
| 349 | + |
| 350 | + @ParameterizedTest |
| 351 | + @ValueSource(strings = { "ANY", "any", "Any" }) |
| 352 | + void valueOfAny(String name) { |
| 353 | + assertThat(ReadFrom.valueOf(name)).isEqualTo(ReadFrom.ANY); |
261 | 354 | }
|
262 | 355 |
|
263 | 356 | private ReadFrom.Nodes getNodes() {
|
|
0 commit comments