package org.jgroups.tests; import org.jgroups.Global; import org.jgroups.JChannel; import org.jgroups.blocks.ReplicatedHashMap; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * Test methods for ReplicatedHashMap * @author Bela Ban */ @Test(groups=Global.STACK_DEPENDENT,sequential=true) public class ReplicatedHashMapTest extends ChannelTestBase { private ReplicatedHashMap<String,String> map1; private ReplicatedHashMap<String,String> map2; private ConcurrentHashMap<String,String> wrap=new ConcurrentHashMap<String,String>(); @BeforeClass protected void setUp() throws Exception { JChannel c1=createChannel(true, 2); this.map1=new ReplicatedHashMap<String,String>(c1); map1.setBlockingUpdates(true); c1.connect("ReplicatedHashMapTest"); this.map1.start(5000); JChannel c2=createChannel(c1); this.map2=new ReplicatedHashMap<String,String>(wrap, c2); map2.setBlockingUpdates(true); c2.connect("ReplicatedHashMapTest"); this.map2.start(5000); } @AfterMethod protected void clean() { map1.clear(); map2.clear(); } @AfterClass protected void tearDown() throws Exception { this.map1.stop(); this.map2.stop(); } public void testEqualsEtc() { map1.put("key1", "value1"); assertEquals(this.map1, this.map2); Assert.assertEquals(this.map1.hashCode(), this.map2.hashCode()); Assert.assertEquals(this.map1.toString(), this.map2.toString()); assertEquals(this.wrap, this.map1); } public void testSize() { Assert.assertEquals(0, this.map1.size()); Assert.assertEquals(this.map2.size(), this.map1.size()); this.map1.put("key1", "value1"); Assert.assertEquals(1, this.map1.size()); Assert.assertEquals(this.map2.size(), this.map1.size()); this.map2.put("key2", "value2"); Assert.assertEquals(2, this.map1.size()); Assert.assertEquals(this.map2.size(), this.map1.size()); } public void testIsEmpty() { assertTrue(this.map1.isEmpty()); assertTrue(this.map2.isEmpty()); this.map1.put("key", "value"); assertFalse(this.map1.isEmpty()); assertFalse(this.map2.isEmpty()); } public void testContainsKey() { assertFalse(this.map1.containsKey("key1")); assertFalse(this.map2.containsKey("key1")); this.map1.put("key1", "value"); assertTrue(this.map1.containsKey("key1")); assertTrue(this.map2.containsKey("key1")); this.map2.put("key2", "value"); assertTrue(this.map1.containsKey("key2")); assertTrue(this.map2.containsKey("key2")); } public void testContainsValue() { assertFalse(this.map1.containsValue("value1")); assertFalse(this.map2.containsValue("value1")); this.map1.put("key1", "value1"); assertTrue(this.map1.containsValue("value1")); assertTrue(this.map2.containsValue("value1")); this.map2.put("key2", "value2"); assertTrue(this.map1.containsValue("value2")); assertTrue(this.map2.containsValue("value2")); } public void testPutAndGet() { assert this.map1.get("key1") == null; assert this.map2.get("key1") == null; this.map1.put("key1", "value1"); assertNotNull(this.map1.get("key1")); assertNotNull(this.map2.get("key1")); this.map2.put("key2", "value2"); assertNotNull(this.map1.get("key2")); assertNotNull(this.map2.get("key2")); } public void testPutIfAbsent() { String retval=map1.putIfAbsent("name", "Bela"); assert retval == null; retval=map1.putIfAbsent("name", "Michelle"); assertNotNull(retval); Assert.assertEquals("Bela", retval); Assert.assertEquals("Bela", map1.get("name")); Assert.assertEquals("Bela", map2.get("name")); } public void testRemove() { assert this.map1.get("key1") == null; assert this.map2.get("key1") == null; this.map1.put("key1", "value1"); this.map2.put("key2", "value2"); assertNotNull(this.map1.get("key1")); assertNotNull(this.map2.get("key1")); assertNotNull(this.map1.get("key2")); assertNotNull(this.map2.get("key2")); this.map1.remove("key1"); assert this.map1.get("key1") == null; assert this.map2.get("key1") == null; assertNotNull(this.map1.get("key2")); assertNotNull(this.map2.get("key2")); this.map2.remove("key2"); assert this.map1.get("key2") == null; assert this.map2.get("key2") == null; } public void testRemove2() { map1.put("name", "Bela"); map1.put("id", "322649"); System.out.println("map1: " + map1); boolean removed=map1.remove("id", "322000"); assertFalse(removed); assertTrue(map1.containsKey("id")); removed=map1.remove("id", "322649"); System.out.println("map1: " + map1); assertTrue(removed); assertFalse(map1.containsKey("id")); Assert.assertEquals(1, map2.size()); } public void testReplace() { map1.put("name", "Bela"); map1.put("id", "322649"); System.out.println("map1: " + map1); String val=map1.replace("id2", "322000"); Assert.assertEquals(2, map1.size()); assert map1.get("id2") == null; System.out.println("map1: " + map1); assert val == null; val=map1.replace("id", "322000"); System.out.println("map1: " + map1); assertNotNull(val); Assert.assertEquals("322649", val); Assert.assertEquals("322000", map1.get("id")); Assert.assertEquals("322000", map2.get("id")); } public void testReplace2() { map1.put("name", "Bela"); map1.put("id", "322649"); System.out.println("map1: " + map1); boolean replaced=map1.replace("id", "322000", "1"); assertFalse(replaced); Assert.assertEquals("322649", map1.get("id")); replaced=map1.replace("id", "322649", "1"); assertTrue(replaced); Assert.assertEquals("1", map1.get("id")); } public void testPutAll() { Map<String,String> all1=new HashMap<String,String>(); all1.put("key1", "value1"); all1.put("key2", "value2"); Map<String,String> all2=new HashMap<String,String>(); all2.put("key3", "value3"); all2.put("key4", "value4"); this.map1.putAll(all1); Assert.assertEquals(2, this.map1.size()); Assert.assertEquals(2, this.map2.size()); this.map2.putAll(all2); Assert.assertEquals(4, this.map1.size()); Assert.assertEquals(4, this.map2.size()); assertTrue(this.map1.containsKey("key1")); assertTrue(this.map1.containsKey("key2")); assertTrue(this.map1.containsKey("key3")); assertTrue(this.map1.containsKey("key4")); assertTrue(this.map2.containsKey("key1")); assertTrue(this.map2.containsKey("key2")); assertTrue(this.map2.containsKey("key3")); assertTrue(this.map2.containsKey("key4")); } public void testClear() { assertTrue(this.map1.isEmpty()); assertTrue(this.map2.isEmpty()); this.map1.put("key", "value"); assertFalse(this.map1.isEmpty()); assertFalse(this.map2.isEmpty()); this.map1.clear(); assertTrue(this.map1.isEmpty()); assertTrue(this.map2.isEmpty()); this.map2.put("key", "value"); assertFalse(this.map1.isEmpty()); assertFalse(this.map2.isEmpty()); this.map2.clear(); assertTrue(this.map1.isEmpty()); assertTrue(this.map2.isEmpty()); } public void testKeySet() { Map<String,String> all1=new HashMap<String,String>(); all1.put("key1", "value1"); all1.put("key2", "value2"); Map<String,String> all2=new HashMap<String,String>(); all2.put("key3", "value3"); all2.put("key4", "value4"); this.map1.putAll(all1); assertEquals(all1.keySet(), this.map1.keySet()); assertEquals(all1.keySet(), this.map2.keySet()); this.map2.putAll(all2); all1.putAll(all2); assertEquals(all1.keySet(), this.map1.keySet()); assertEquals(all1.keySet(), this.map2.keySet()); } public void testValues() { Map<String,String> all1=new HashMap<String,String>(); all1.put("key1", "value1"); all1.put("key2", "value2"); Map<String,String> all2=new HashMap<String,String>(); all2.put("key3", "value3"); all2.put("key4", "value4"); this.map1.putAll(all1); assertTrue(this.map1.values().containsAll(all1.values())); assertTrue(this.map2.values().containsAll(all1.values())); this.map2.putAll(all2); all1.putAll(all2); assertTrue(this.map1.values().containsAll(all1.values())); assertTrue(this.map2.values().containsAll(all1.values())); } }