forked from valkey-io/valkey-glide
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Refactored shared commands in to a shared tests file.
- Loading branch information
1 parent
cb3389c
commit 0793cfb
Showing
4 changed files
with
132 additions
and
152 deletions.
There are no files selected for viewing
113 changes: 113 additions & 0 deletions
113
java/integTest/src/test/java/glide/SharedClientTests.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
/** Copyright GLIDE-for-Redis Project Contributors - SPDX Identifier: Apache-2.0 */ | ||
package glide; | ||
|
||
import static glide.TestUtilities.commonClientConfig; | ||
import static glide.TestUtilities.commonClusterClientConfig; | ||
import static glide.TestUtilities.getRandomString; | ||
import static glide.api.BaseClient.OK; | ||
import static org.junit.jupiter.api.Assertions.assertEquals; | ||
|
||
import glide.api.BaseClient; | ||
import glide.api.RedisClient; | ||
import glide.api.RedisClusterClient; | ||
import java.util.List; | ||
import java.util.concurrent.CompletableFuture; | ||
import java.util.concurrent.ExecutionException; | ||
import java.util.concurrent.ExecutorService; | ||
import java.util.concurrent.Executors; | ||
import java.util.stream.Stream; | ||
import lombok.Getter; | ||
import lombok.SneakyThrows; | ||
import org.junit.jupiter.api.AfterAll; | ||
import org.junit.jupiter.api.BeforeAll; | ||
import org.junit.jupiter.api.Timeout; | ||
import org.junit.jupiter.params.ParameterizedTest; | ||
import org.junit.jupiter.params.provider.Arguments; | ||
import org.junit.jupiter.params.provider.MethodSource; | ||
|
||
@Timeout(25) | ||
public class SharedClientTests { | ||
|
||
private static RedisClient standaloneClient = null; | ||
private static RedisClusterClient clusterClient = null; | ||
|
||
@Getter private static List<Arguments> clients; | ||
|
||
@BeforeAll | ||
@SneakyThrows | ||
public static void init() { | ||
standaloneClient = RedisClient.CreateClient(commonClientConfig().build()).get(); | ||
clusterClient = | ||
RedisClusterClient.CreateClient(commonClusterClientConfig().requestTimeout(5000).build()) | ||
.get(); | ||
|
||
clients = List.of(Arguments.of(standaloneClient), Arguments.of(clusterClient)); | ||
} | ||
|
||
@AfterAll | ||
@SneakyThrows | ||
public static void teardown() { | ||
standaloneClient.close(); | ||
clusterClient.close(); | ||
} | ||
|
||
@SneakyThrows | ||
@ParameterizedTest | ||
@MethodSource("getClients") | ||
public void send_and_receive_large_values(BaseClient client) { | ||
int length = 1 << 16; | ||
String key = getRandomString(length); | ||
String value = getRandomString(length); | ||
|
||
assertEquals(length, key.length()); | ||
assertEquals(length, value.length()); | ||
assertEquals(OK, client.set(key, value).get()); | ||
assertEquals(value, client.get(key).get()); | ||
} | ||
|
||
@SneakyThrows | ||
@ParameterizedTest | ||
@MethodSource("getClients") | ||
public void send_and_receive_non_ascii_unicode(BaseClient client) { | ||
String key = "foo"; | ||
String value = "שלום hello 汉字"; | ||
|
||
assertEquals(OK, client.set(key, value).get()); | ||
assertEquals(value, client.get(key).get()); | ||
} | ||
|
||
private static Stream<Arguments> clientAndDataSize() { | ||
return Stream.of( | ||
Arguments.of(standaloneClient, 100), | ||
Arguments.of(standaloneClient, 1 << 16), | ||
Arguments.of(clusterClient, 100), | ||
Arguments.of(clusterClient, 1 << 16)); | ||
} | ||
|
||
@ParameterizedTest | ||
@MethodSource("clientAndDataSize") | ||
public void client_can_handle_concurrent_workload(BaseClient client, int valueSize) { | ||
ExecutorService executorService = Executors.newCachedThreadPool(); | ||
CompletableFuture[] futures = new CompletableFuture[100]; | ||
|
||
for (int i = 0; i < 100; i++) { | ||
futures[i] = | ||
CompletableFuture.runAsync( | ||
() -> { | ||
String key = getRandomString(valueSize); | ||
String value = getRandomString(valueSize); | ||
try { | ||
assertEquals(OK, client.set(key, value).get()); | ||
assertEquals(value, client.get(key).get()); | ||
} catch (InterruptedException | ExecutionException e) { | ||
throw new RuntimeException(e); | ||
} | ||
}, | ||
executorService); | ||
} | ||
|
||
CompletableFuture.allOf(futures).join(); | ||
|
||
executorService.shutdown(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters