/** * */ package smartkv.client.tables; import static org.junit.Assert.*; import java.io.Serializable; import java.util.Arrays; import java.util.Map; import java.util.Map.Entry; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import smartkv.client.ColumnProxy; import smartkv.client.util.JavaSerializer; import smartkv.client.util.UnsafeJavaSerializer; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; /** * @author fabiim * */ public class ColumnTableTest { ValueObject value_1 = new ValueObject(1); KeyObject key_1 = new KeyObject(1); ValueObject value_2 = new ValueObject(2); KeyObject key_2 = new KeyObject(2); ValueObject value_3 = new ValueObject(3); KeyObject key_3 = new KeyObject(3); public static class KeyObject implements Serializable{ public final int id; public KeyObject(int id){ this.id = id; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + id; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; KeyObject other = (KeyObject) obj; if (id != other.id) return false; return true; } } private ColumnTable<KeyObject, ValueObject> ds; public static int id=0; public ColumnTableTest(){ ds =ColumnTable_.<KeyObject, ValueObject>getTable(new ColumnProxy(id++), "ttestTable", JavaSerializer.<KeyObject>getJavaSerializer(), AnnotatedColumnObject.newAnnotatedColumnObject(ValueObject.class)); } /** * @throws java.lang.Exception */ @BeforeClass public static void setUpBeforeClass() throws Exception { } @Before public void initTest(){ ds.clear(); } /** * Test method for {@link smartkv.client.tables.ColumnTable#getColumn(java.lang.Object, java.lang.String)}. */ @Test public void testGetColumn(){ ds.put(key_1, value_1); assertEquals(ds.getColumn(key_1, "getCenas"), "1"); ds.setColumn(key_1, "getCenas", "2"); assertEquals(ds.getColumn(key_1, "getCenas"),"2"); } /** * Test method for {@link smartkv.client.tables.ColumnTable#setColumn(java.lang.Object, java.lang.String, java.lang.Object)}. */ @Test public void testSetColumn(){ assertFalse(ds.setColumn( key_2, "whatever", new byte[1])); //key does not exist ds.put( key_1, value_1); assertTrue(ds.setColumn(key_1, "getId", 2)); assertFalse(ds.setColumn( key_1, "whatever", new byte[1])); //key (column) does not exist assertEquals(ds.get(key_1).getId(), 2); } /** * Test method for {@link smartkv.client.tables.KeyValueTable#remove(java.lang.Object, java.lang.Object)}. */ @Test public void testRemoveKV() { ds.put(key_1, value_1); ValueObject val=ds.remove(key_1); assertNotNull(val); assertEquals(val, value_1); } /** * Test method for {@link smartkv.client.tables.KeyValueTable#putIfAbsent(java.lang.Object, java.lang.Object)}. */ @Test public void testPutIfAbsent() { assertNull(ds.putIfAbsent( key_1, value_1)); assertTrue(ds.containsKey( key_1)); assertEquals(ds.get( key_1), value_1); assertEquals(ds.putIfAbsent( key_1, value_2), value_1); assertEquals(ds.putIfAbsent( key_1, value_2), value_1); } /** * Test method for {@link smartkv.client.tables.KeyValueTable#remove(java.lang.Object)}. */ @Test public void testRemoveK() { ds.put( key_1, value_1); ValueObject val =ds.remove(key_1); assertNotNull(val); assertEquals(val, value_1); } /** * Test method for {@link smartkv.client.tables.KeyValueTable#put(java.lang.Object, java.lang.Object)}. */ @Test public void testPut() { ValueObject val = ds.put(key_1, value_1); assertNull(val); // previous value was null. val = ds.put(key_1, value_2); //replace value, and get previous value. assertNotNull(val); //previous value is not null (should be value_1) assertEquals(val,value_1); assertEquals(ds.get( key_1), value_2); } /** * Test method for {@link smartkv.client.tables.KeyValueTable#get(java.lang.Object)}. */ @Test public void testGet() { ValueObject val = ds.get( key_1); assertNull(val); // there is no key_1 yet. ds.put(key_1, value_1); val = ds.get( key_1); assertNull(ds.remove( key_2)); //entry does not exists. assertEquals(val, value_1); } /** * Test method for {@link smartkv.client.tables.Table#clear()}. */ @Test public void testClear() { ds.put(key_1, value_1); ds.clear(); assertEquals(ds.size(),0); } /** * Test method for {@link smartkv.client.tables.Table#containsKey(java.lang.Object)}. */ @Test public void testContainsKey() { assertFalse(ds.containsKey( key_1)); ds.put(key_1, value_1); assertTrue(ds.containsKey(key_1)); } /** * Test method for {@link smartkv.client.tables.Table#isEmpty()}. */ @Test public void testIsEmpty() { ds.put(key_1, value_1); assertFalse(ds.isEmpty()); ds.clear(); assertTrue(ds.isEmpty()); } /** * Test method for {@link smartkv.client.tables.Table#size()}. */ @Test public void testSize() { ds.put(key_1, value_1); assertEquals(ds.size(), 1); ds.clear(); assertEquals(ds.size(), 0); } /** * Test method for {@link smartkv.client.tables.Table#getAndIncrement(java.lang.String)}. */ @Test public void testGetAndIncrement() { int i = ds.getAndIncrement( "1"); assertEquals(i,0); i = ds.getAndIncrement("1"); assertEquals(i,1); } }