package org.infinispan.server.hotrod.test;
import static org.testng.AssertJUnit.assertEquals;
import org.infinispan.server.hotrod.OperationStatus;
import org.testng.annotations.Test;
@Test(testName = "server.hotrod.test.HotRodStreamingTest")
public class HotRodStreamingTest extends org.infinispan.server.hotrod.test.HotRodSingleNodeTest {
private final byte[] K1 = "K1".getBytes();
private final byte[] V1;
private final byte[] V2;
private final int V1_SIZE = 32_000;
private final int V2_SIZE = 16_000;
public HotRodStreamingTest() {
V1 = fillArray(V1_SIZE);
V2 = fillArray(V2_SIZE);
}
private byte[] fillArray(int size) {
byte[] array = new byte[size];
for(int i = 0; i < size; i++) {
array[i] = (byte)(i % 256);
}
return array;
}
public void testPutGetStream() {
TestResponse putResponse = client().putStream(K1, V1, 0, -1, -1);
assertEquals(OperationStatus.Success, putResponse.getStatus());
TestGetWithMetadataResponse getResponse = client().getStream(K1, 0);
assertEquals(-1, getResponse.lifespan);
assertEquals(-1, getResponse.maxIdle);
assertEquals(V1, getResponse.data.get());
}
public void testPutStreamIfAbsent() {
TestResponse putResponse = client().putStream(K1, V1, -1, -1, -1);
assertEquals(OperationStatus.Success, putResponse.getStatus());
TestGetWithMetadataResponse getResponse = client().getStream(K1, 0);
assertEquals(-1, getResponse.lifespan);
assertEquals(-1, getResponse.maxIdle);
assertEquals(V1, getResponse.data.get());
putResponse = client().putStream(K1, V2, -1, -1, -1);
assertEquals(OperationStatus.OperationNotExecuted, putResponse.getStatus());
getResponse = client().getStream(K1, 0);
assertEquals(-1, getResponse.lifespan);
assertEquals(-1, getResponse.maxIdle);
assertEquals(V1, getResponse.data.get());
}
public void testReplaceStream() {
TestResponse putResponse = client().putStream(K1, V1, -1, -1, -1);
assertEquals(OperationStatus.Success, putResponse.getStatus());
TestGetWithMetadataResponse getResponse = client().getStream(K1, 0);
assertEquals(-1, getResponse.lifespan);
assertEquals(-1, getResponse.maxIdle);
assertEquals(V1, getResponse.data.get());
long k1version = getResponse.dataVersion;
putResponse = client().putStream(K1, V2, k1version + 3, -1, -1); // use the wrong version
assertEquals(OperationStatus.OperationNotExecuted, putResponse.getStatus());
getResponse = client().getStream(K1, 0);
assertEquals(-1, getResponse.lifespan);
assertEquals(-1, getResponse.maxIdle);
assertEquals(V1, getResponse.data.get());
putResponse = client().putStream(K1, V2, k1version, -1, -1); // use the right version
assertEquals(OperationStatus.Success, putResponse.getStatus());
getResponse = client().getStream(K1, 0);
assertEquals(-1, getResponse.lifespan);
assertEquals(-1, getResponse.maxIdle);
assertEquals(V2, getResponse.data.get());
}
}