package org.infinispan.it.compatibility; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertTrue; import java.io.IOException; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.ByteArrayRequestEntity; import org.apache.commons.httpclient.methods.DeleteMethod; import org.apache.commons.httpclient.methods.EntityEnclosingMethod; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PutMethod; import org.infinispan.Cache; import org.infinispan.configuration.cache.CacheMode; import org.infinispan.test.AbstractInfinispanTest; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; /** * Test cache listeners bound to embedded cache and operation over REST cache. * * @author Jiri Holusa [jholusa@redhat.com] */ @Test(groups = "functional", testName = "it.compatibility.EmbeddedRestCacheListenerTest") public class EmbeddedRestCacheListenerTest extends AbstractInfinispanTest { CompatibilityCacheFactory<String, String> cacheFactory; @BeforeMethod protected void setup() throws Exception { cacheFactory = new CompatibilityCacheFactory<String, String>(CacheMode.LOCAL).setup(); } @AfterMethod protected void teardown() { CompatibilityCacheFactory.killCacheFactories(cacheFactory); } public void testLoadingAndStoringEventsRest() throws IOException { Cache<String, String> embedded = cacheFactory.getEmbeddedCache(); HttpClient remote = cacheFactory.getRestClient(); String restUrl = cacheFactory.getRestUrl(); TestCacheListener l = new TestCacheListener(); embedded.addListener(l); assertTrue(l.created.isEmpty()); assertTrue(l.removed.isEmpty()); assertTrue(l.modified.isEmpty()); assertTrue(l.visited.isEmpty()); EntityEnclosingMethod put = new PutMethod(restUrl + "/k"); put.setRequestEntity(new ByteArrayRequestEntity( "v".getBytes(), "application/octet-stream")); remote.executeMethod(put); assertEquals(1, l.createdCounter); assertEquals("v".getBytes(), (byte[]) l.created.get("k")); assertTrue(l.removed.isEmpty()); assertEquals(0, l.modifiedCounter); assertTrue(l.visited.isEmpty()); EntityEnclosingMethod put2 = new PutMethod(restUrl + "/key"); put2.setRequestEntity(new ByteArrayRequestEntity( "value".getBytes(), "application/octet-stream")); remote.executeMethod(put2); assertEquals(2, l.createdCounter); assertTrue(l.removed.isEmpty()); assertEquals(0, l.modifiedCounter); assertTrue(l.visited.isEmpty()); EntityEnclosingMethod put3 = new PutMethod(restUrl + "/key"); put3.setRequestEntity(new ByteArrayRequestEntity( "modifiedValue".getBytes(), "application/octet-stream")); remote.executeMethod(put3); assertEquals(2, l.createdCounter); assertTrue(l.removed.isEmpty()); assertEquals(1, l.modifiedCounter); assertEquals("modifiedValue".getBytes(), (byte[]) l.modified.get("key")); assertTrue(l.visited.isEmpty()); EntityEnclosingMethod post = new PutMethod(restUrl + "/k"); post.setRequestEntity(new ByteArrayRequestEntity( "replacedValue".getBytes(), "application/octet-stream")); remote.executeMethod(post); assertEquals(2, l.createdCounter); assertTrue(l.removed.isEmpty()); assertEquals(2, l.modifiedCounter); assertEquals("replacedValue".getBytes(), (byte[]) l.modified.get("k")); assertTrue(l.visited.isEmpty()); //resetting so don't have to type "== 2" etc. all over again l.reset(); DeleteMethod delete = new DeleteMethod(restUrl + "/key"); remote.executeMethod(delete); assertTrue(l.created.isEmpty()); assertEquals(1, l.removedCounter); assertEquals("modifiedValue".getBytes(), (byte[]) l.removed.get("key")); assertTrue(l.modified.isEmpty()); l.reset(); GetMethod get = new GetMethod(restUrl + "/k"); remote.executeMethod(get); assertTrue(l.created.isEmpty()); assertTrue(l.removed.isEmpty()); assertTrue(l.modified.isEmpty()); assertEquals(1, l.visitedCounter); assertEquals("replacedValue".getBytes(), (byte[]) l.visited.get("k")); l.reset(); } }