package voldemort.store.compress;
import java.util.Arrays;
import java.util.Collection;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import voldemort.ServerTestUtils;
import voldemort.VoldemortTestConstants;
import voldemort.client.ClientConfig;
import voldemort.client.SocketStoreClientFactory;
import voldemort.client.StoreClient;
import voldemort.serialization.Compression;
import voldemort.server.AbstractSocketService;
import voldemort.store.AbstractByteArrayStoreTest;
import voldemort.store.Store;
import voldemort.store.memory.InMemoryStorageEngine;
import voldemort.utils.ByteArray;
@RunWith(Parameterized.class)
public class CompressingStoreTest extends AbstractByteArrayStoreTest {
private CompressingStore store;
private final boolean useNio;
private final Compression compression;
private final CompressionStrategyFactory compressionFactory = new CompressionStrategyFactory();
public CompressingStoreTest(boolean useNio, String compressionType) {
this.useNio = useNio;
this.compression = new Compression(compressionType, null);
}
@Parameters
public static Collection<Object[]> configs() {
return Arrays.asList(new Object[][] { { true, "gzip" }, { false, "gzip" }, { true, "lzf" },
{ false, "lzf" }, { true, "snappy" }, { false, "snappy" } });
}
@Override
@Before
public void setUp() throws Exception {
this.store = new CompressingStore(new InMemoryStorageEngine<ByteArray, byte[], byte[]>("test"),
compressionFactory.get(compression),
compressionFactory.get(compression));
}
@Override
public Store<ByteArray, byte[], byte[]> getStore() {
return store;
}
@Test
public void testPutGetWithSocketService() throws Exception {
int freePort = ServerTestUtils.findFreePort();
String clusterXml = VoldemortTestConstants.getOneNodeClusterXml();
clusterXml = clusterXml.replace("<socket-port>6666</socket-port>", "<socket-port>"
+ freePort
+ "</socket-port>");
AbstractSocketService socketService = ServerTestUtils.getSocketService(useNio,
clusterXml,
VoldemortTestConstants.getCompressedStoreDefinitionsXml(),
"test",
freePort);
socketService.start();
Thread.sleep(1000);
SocketStoreClientFactory storeClientFactory = new SocketStoreClientFactory(new ClientConfig().setBootstrapUrls("tcp://localhost:"
+ freePort)
.setMaxBootstrapRetries(10));
StoreClient<String, String> storeClient = storeClientFactory.getStoreClient("test");
storeClient.put("someKey", "someValue");
assertEquals(storeClient.getValue("someKey"), "someValue");
socketService.stop();
}
}