package org.jboss.test.capedwarf.cluster.test; import java.util.Arrays; import java.util.List; import java.util.Map; import com.google.appengine.api.memcache.Expiration; import com.google.appengine.api.memcache.MemcacheService; import com.google.appengine.api.memcache.MemcacheServiceFactory; import org.jboss.arquillian.container.test.api.OperateOnDeployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.junit.InSequence; import org.jboss.test.capedwarf.common.support.JBoss; import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; /** * @author Matej Lazar * @author Ales Justin */ @RunWith(Arquillian.class) @Category(JBoss.class) public class MemcacheTest extends ClusteredTestBase { protected MemcacheService service; @Before public void setUp() { service = MemcacheServiceFactory.getMemcacheService(); } @InSequence(10) @Test @OperateOnDeployment("dep1") public void testClearAllOnDepA() { service.put("key01", "value1"); service.put("key02", "value2"); service.put("key03", "value3"); service.clearAll(); assertFalse(service.contains("key01")); assertFalse(service.contains("key02")); assertFalse(service.contains("key03")); } @InSequence(20) @Test @OperateOnDeployment("dep2") public void testClearAllOnDepB() { sync(); service.put("key01", "value1"); service.put("key02", "value2"); service.put("key03", "value3"); service.clearAll(); assertFalse(service.contains("key01")); assertFalse(service.contains("key02")); assertFalse(service.contains("key03")); } @Test @InSequence(30) @OperateOnDeployment("dep1") public void testPutOnDepA() { service.put("key", "value"); assertTrue(service.contains("key")); assertEquals("value", service.get("key")); } @Test @InSequence(40) @OperateOnDeployment("dep2") public void testGetOnDepB() { sync(); try { assertTrue(service.contains("key")); assertEquals("value", service.get("key")); } finally { assertTrue(service.delete("key")); } } @Test @InSequence(50) @OperateOnDeployment("dep1") public void testPutReplaceOnlyIfPresentOnDepA() { service.clearAll(); assertFalse(service.contains("key-replace-only")); service.put("key-replace-only", "value", null, MemcacheService.SetPolicy.REPLACE_ONLY_IF_PRESENT); assertFalse(service.contains("key-replace-only")); service.put("key-replace-only", "value"); service.put("key-replace-only", "value2", null, MemcacheService.SetPolicy.REPLACE_ONLY_IF_PRESENT); assertEquals("value2", service.get("key-replace-only")); } @Test @InSequence(60) @OperateOnDeployment("dep2") public void testPutReplaceOnlyIfPresentOnDepB() { sync(); try { assertEquals("value2", service.get("key-replace-only")); service.put("key-replace-only", "value3", null, MemcacheService.SetPolicy.REPLACE_ONLY_IF_PRESENT); assertEquals("value3", service.get("key-replace-only")); } finally { assertTrue(service.delete("key-replace-only")); } } @Test @InSequence(70) @OperateOnDeployment("dep1") public void testPutAddOnlyIfNotPresentOnDepA() { service.put("key-only-present", "firstValue"); service.put("key-only-present", "secondValue", null, MemcacheService.SetPolicy.ADD_ONLY_IF_NOT_PRESENT); assertEquals("firstValue", service.get("key-only-present")); } @Test @InSequence(80) @OperateOnDeployment("dep2") public void testPutAddOnlyIfNotPresentOnDepB() { sync(); try { service.put("key-only-present", "thirdValue", null, MemcacheService.SetPolicy.ADD_ONLY_IF_NOT_PRESENT); assertEquals("firstValue", service.get("key-only-present")); } finally { assertTrue(service.delete("key-only-present")); } } @Test @InSequence(90) @OperateOnDeployment("dep1") public void testGetIdentifiableOnDepA() { service.put("key-identifiable", "value"); MemcacheService.IdentifiableValue identifiable = service.getIdentifiable("key-identifiable"); assertEquals("value", identifiable.getValue()); } @Test @InSequence(100) @OperateOnDeployment("dep2") public void testGetIdentifiableOnDepB() { sync(); try { MemcacheService.IdentifiableValue identifiable = service.getIdentifiable("key-identifiable"); assertEquals("value", identifiable.getValue()); } finally { assertTrue(service.delete("key-identifiable")); } } // @Test // TODO // @InSequence(110) // @OperateOnDeployment("dep1") public void testPutIfUntouchedOnDepA() { service.put("key-untouched", "value"); MemcacheService.IdentifiableValue identifiable = service.getIdentifiable("key-untouched"); boolean valueWasStored = service.putIfUntouched("key-untouched", identifiable, "newValue"); assertTrue(valueWasStored); assertEquals("newValue", service.get("key-untouched")); boolean valueWasStored2 = service.putIfUntouched("key-untouched", identifiable, "newestValue"); assertFalse(valueWasStored2); assertEquals("newValue", service.get("key-untouched")); } // @Test // TODO // @InSequence(120) // @OperateOnDeployment("dep2") public void testPutIfUntouchedOnDepB() { sync(); MemcacheService.IdentifiableValue identifiable = service.getIdentifiable("key-untouched"); boolean valueWasStored2 = service.putIfUntouched("key-untouched", identifiable, "newestValue"); assertFalse(valueWasStored2); assertEquals("newValue", service.get("key-untouched")); } @Test @InSequence(130) @OperateOnDeployment("dep1") public void testGetAllOnDepA() { service.put("key11", "value1"); service.put("key12", "value2"); service.put("key13", "value3"); Map<String, Object> map = service.getAll(Arrays.asList("key11", "key12")); assertEquals(2, map.size()); assertEquals("value1", map.get("key11")); assertEquals("value2", map.get("key12")); } @Test @InSequence(140) @OperateOnDeployment("dep2") public void testGetAllOnDepB() { sync(); List<String> keys = Arrays.asList("key11", "key12"); try { Map<String, Object> map = service.getAll(keys); assertEquals(2, map.size()); assertEquals("value1", map.get("key11")); assertEquals("value2", map.get("key12")); } finally { service.deleteAll(keys); } } @Test @InSequence(150) @OperateOnDeployment("dep1") public void testDeleteOnDepA() { service.put("key21", "value"); service.put("key22", "value"); assertTrue(service.delete("key21")); assertFalse(service.contains("key21")); } @Test @InSequence(160) @OperateOnDeployment("dep2") public void testDeleteOnDepB() { sync(); assertFalse(service.contains("key21")); assertTrue(service.contains("key22")); assertTrue(service.delete("key22")); assertFalse(service.contains("key22")); } @Test @InSequence(170) @OperateOnDeployment("dep1") public void testDeleteAllOnDepA() { service.put("key31", "value1"); service.put("key32", "value2"); service.put("key33", "value3"); service.put("key34", "value4"); service.put("key35", "value5"); service.deleteAll(Arrays.asList("key31", "key32")); assertFalse(service.contains("key31")); assertFalse(service.contains("key32")); assertTrue(service.contains("key33")); assertTrue(service.contains("key34")); } @Test @InSequence(180) @OperateOnDeployment("dep2") public void testDeleteAllOnDepB() { sync(); try { assertTrue(service.contains("key33")); assertTrue(service.contains("key34")); assertTrue(service.contains("key35")); service.deleteAll(Arrays.asList("key33", "key34")); assertFalse(service.contains("key33")); assertFalse(service.contains("key34")); assertTrue(service.contains("key35")); } finally { assertTrue(service.delete("key35")); } } @Test @InSequence(190) @OperateOnDeployment("dep1") public void testPutExpirationOnDepA() { service.put("key44", "value", Expiration.byDeltaMillis(4500)); assertTrue(service.contains("key44")); } @Test @InSequence(200) @OperateOnDeployment("dep2") public void testPutExpirationOnDepB() { sync(); assertTrue(service.contains("key44")); sync(); assertFalse(service.contains("key44")); } @Test @InSequence(200) @OperateOnDeployment("dep1") public void testIncrementOnDepA() { long x = service.increment("increment-key", 5, 0L); assertEquals(5L, x); x = service.increment("increment-key", 15); assertEquals(20L, x); x = service.increment("increment-key", 6); assertEquals(26L, x); } @Test @InSequence(210) @OperateOnDeployment("dep2") public void testIncrementOnDepB() { sync(); try { long x = service.increment("increment-key", 4); assertEquals(30L, x); } finally { assertTrue(service.delete("increment-key")); } } @Test @InSequence(1000) @OperateOnDeployment("dep1") public void tearDownDepA() { tearDown(); } @Test @InSequence(1000) @OperateOnDeployment("dep2") public void tearDownDepB() { tearDown(); } private void tearDown() { sync(5000L); service.clearAll(); } }