package org.infinispan.server.test.client.rest;
import static org.infinispan.server.test.client.rest.RESTHelper.KEY_A;
import static org.infinispan.server.test.client.rest.RESTHelper.KEY_B;
import static org.infinispan.server.test.client.rest.RESTHelper.KEY_C;
import static org.infinispan.server.test.util.ITestUtils.isReplicatedMode;
import static org.infinispan.server.test.util.ITestUtils.sleepForSecs;
import java.util.List;
import org.apache.http.HttpStatus;
import org.infinispan.arquillian.core.RemoteInfinispanServer;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* Tests for the RESTLocal client.
*
* @author <a href="mailto:jvilkola@redhat.com">Jozef Vilkolak</a>
* @author <a href="mailto:mlinhard@redhat.com">Michal Linhard</a>
* @author mgencur
*/
public abstract class AbstractRESTClusteredIT {
protected abstract int getRestPort1();
protected abstract int getRestPort2();
protected abstract List<RemoteInfinispanServer> getServers();
protected RESTHelper rest;
@Before
public void setUp() throws Exception {
rest = new RESTHelper();
if (isReplicatedMode()) {
rest.addServer(getServers().get(0).getRESTEndpoint().getInetAddress().getHostName(), getRestPort1(), getServers().get(0).getRESTEndpoint().getContextPath());
rest.addServer(getServers().get(1).getRESTEndpoint().getInetAddress().getHostName(), getRestPort2(), getServers().get(1).getRESTEndpoint().getContextPath());
} else {
rest.addServer(getServers().get(0).getRESTEndpoint().getInetAddress().getHostName(), getServers().get(0).getRESTEndpoint().getContextPath());
rest.addServer(getServers().get(1).getRESTEndpoint().getInetAddress().getHostName(), getServers().get(1).getRESTEndpoint().getContextPath());
}
rest.delete(rest.fullPathKey(KEY_A));
rest.delete(rest.fullPathKey(KEY_B));
rest.delete(rest.fullPathKey(KEY_C));
rest.head(rest.fullPathKey(KEY_A), HttpStatus.SC_NOT_FOUND);
rest.head(rest.fullPathKey(KEY_B), HttpStatus.SC_NOT_FOUND);
rest.head(rest.fullPathKey(KEY_C), HttpStatus.SC_NOT_FOUND);
}
@After
public void tearDown() throws Exception {
rest.delete(rest.fullPathKey(KEY_A));
rest.delete(rest.fullPathKey(KEY_B));
rest.delete(rest.fullPathKey(KEY_C));
rest.clearServers();
}
@Test
public void testReplicationPut() throws Exception {
rest.put(rest.fullPathKey(0, KEY_A), "data", "text/plain");
rest.get(rest.fullPathKey(1, KEY_A), "data");
}
@Test
public void testReplicationPost() throws Exception {
rest.post(rest.fullPathKey(0, KEY_A), "data", "text/plain");
rest.get(rest.fullPathKey(1, KEY_A), "data");
}
@Test
public void testReplicationDelete() throws Exception {
rest.post(rest.fullPathKey(0, KEY_A), "data", "text/plain");
rest.get(rest.fullPathKey(1, KEY_A), "data");
rest.delete(rest.fullPathKey(0, KEY_A));
rest.head(rest.fullPathKey(1, KEY_A), HttpStatus.SC_NOT_FOUND);
}
@Test
public void testReplicationWipeCache() throws Exception {
rest.post(rest.fullPathKey(0, KEY_A), "data", "text/plain");
rest.post(rest.fullPathKey(0, KEY_B), "data", "text/plain");
rest.head(rest.fullPathKey(0, KEY_A));
rest.head(rest.fullPathKey(0, KEY_B));
rest.delete(rest.fullPathKey(0, null));
rest.head(rest.fullPathKey(1, KEY_A), HttpStatus.SC_NOT_FOUND);
rest.head(rest.fullPathKey(1, KEY_B), HttpStatus.SC_NOT_FOUND);
}
@Test
public void testReplicationTTL() throws Exception {
rest.post(rest.fullPathKey(0, KEY_A), "data", "application/text", HttpStatus.SC_OK,
// headers
"Content-Type", "application/text", "timeToLiveSeconds", "2");
rest.head(rest.fullPathKey(1, KEY_A));
sleepForSecs(2.1);
// should be evicted
rest.head(rest.fullPathKey(1, KEY_A), HttpStatus.SC_NOT_FOUND);
}
}