package com.bizosys.hsearch.util; import junit.framework.TestCase; import junit.framework.TestFerrari; import com.bizosys.hsearch.filter.Access; import com.bizosys.hsearch.filter.MergedBlocks; import com.bizosys.hsearch.filter.Storable; import com.bizosys.hsearch.index.DocAcl; import com.bizosys.hsearch.index.DocMeta; import com.bizosys.hsearch.index.DocTeaser; public class MergedBlocksTest extends TestCase { public static void main(String[] args) throws Exception { MergedBlocksTest t = new MergedBlocksTest(); TestFerrari.testRandom(t); } public void testAdd(Short position) throws Exception{ if ( position < 0) position = (short) (position + Short.MIN_VALUE); if ( position == 0 ) return; DocMeta meta = new DocMeta(); meta.docType = "Abinash"; MergedBlocks.Block block = MergedBlocks.add(position, meta.toBytes()); DocMeta deMeta = new DocMeta(); MergedBlocks.get(deMeta, block, position); assertEquals(meta.docType, deMeta.docType); } public void testAdd(Short position1, Short position2, Short position3, Short position4) throws Exception{ int[] positions = new int[]{position1,position2,position3,position4}; for (int i=0; i<4; i++) { positions[i] = positions[i] + (-1 * Short.MIN_VALUE) + 1; } String[] names = new String[]{"Abinash", "Jyoti", "Niru", "Birakishore"}; MergedBlocks.Block block = null; for (int i=0; i<4; i++) { DocMeta meta = new DocMeta(); meta.docType = names[i]; block = MergedBlocks.add(block, positions[i], meta.toBytes()); } for (int i=0; i<4; i++) { DocMeta deMeta = new DocMeta(); MergedBlocks.get(deMeta, block, positions[i]); assertEquals(names[i], deMeta.docType); } for (int i=0; i<4; i++) System.out.print(positions[i] + "/"); } public void testDelete(Short position1, Short position2, Short position3, Short position4) throws Exception{ int[] positions = new int[]{position1,position2,position3,position4}; for (int i=0; i<4; i++) { positions[i] = positions[i] + (-1 * Short.MIN_VALUE) + 1; } String[] names = new String[]{"Abinash", "Jyoti", "Niru", "Birakishore"}; MergedBlocks.Block block = null; for (int i=0; i<4; i++) { DocMeta meta = new DocMeta(); meta.docType = names[i]; block = MergedBlocks.add(block, positions[i], meta.toBytes()); } for ( int i=0; i<4; i++) { assertNotNull(MergedBlocks.get(new DocMeta(), block, positions[i])); block = MergedBlocks.delete(block, positions[i]); assertNull(MergedBlocks.get(new DocMeta(), block, positions[i])); for ( int j=i+1; j<4; j++) { DocMeta deMeta = new DocMeta(); MergedBlocks.get(deMeta, block, positions[j]); assertEquals(names[j], deMeta.docType); } } } public void testUpdatedBigger(Short position1, Short position2, Short position3, Short position4, String type1, String type2, String type3, String type4 ) throws Exception{ int[] positions = new int[]{position1,position2,position3,position4}; String[] types = new String[]{type1,type2,type3,type4}; for (int i=0; i<4; i++) { positions[i] = positions[i] + (-1 * Short.MIN_VALUE) + 1; } String[] names = new String[]{"Abinash", "Jyoti", "Niru", "Birakishore"}; MergedBlocks.Block block = null; for (int i=0; i<4; i++) { DocMeta meta = new DocMeta(); meta.docType = names[i]; block = MergedBlocks.add(block, positions[i], meta.toBytes()); } System.out.println("Pass1"); for ( int i=0; i<4; i++) { DocMeta updated = new DocMeta(); MergedBlocks.get(updated, block, positions[i]); updated.docType = types[i]; block = MergedBlocks.update(block, new DocMeta(), updated, positions[i]); DocMeta de = new DocMeta(); MergedBlocks.get(de, block, positions[i]); assertEquals(updated.docType, de.docType); for ( int j=i+1; j<4; j++) { DocMeta deMeta = new DocMeta(); MergedBlocks.get(deMeta, block, positions[j]); assertEquals(names[j], deMeta.docType); } } } public void testDeleteAndUpdate(Short position1, Short position2, String type1, String type2) throws Exception{ int[] positions = new int[]{position1,position2}; String[] types = new String[]{type1,type2}; for (int i=0; i<2; i++) { positions[i] = positions[i] + (-1 * Short.MIN_VALUE) + 1; } MergedBlocks.Block block = null; for (int i=0; i<2; i++) { DocMeta meta = new DocMeta(); meta.docType = types[i]; block = MergedBlocks.add(block, positions[i], meta.toBytes()); } block = MergedBlocks.delete(block, positions[0]); DocMeta updated = new DocMeta(); MergedBlocks.get(updated, block, positions[1]); updated.docType = types[1]; block = MergedBlocks.update(block, new DocMeta(), updated, positions[1]); DocMeta deMeta = new DocMeta(); MergedBlocks.get(deMeta, block, positions[1]); assertEquals(updated.docType, deMeta.docType); } public void testMetaCompact(Short position1, Short position2, String type1, String type2) throws Exception{ int[] positions = new int[]{position1,position2}; String[] types = new String[]{type1,type2}; for (int i=0; i<2; i++) { positions[i] = positions[i] + (-1 * Short.MIN_VALUE) + 1; } MergedBlocks.Block block = null; for (int i=0; i<2; i++) { DocMeta meta = new DocMeta(); meta.docType = types[i]; block = MergedBlocks.add(block, positions[i], meta.toBytes()); } block = MergedBlocks.delete(block, positions[0]); DocMeta updated = new DocMeta(); MergedBlocks.get(updated, block, positions[1]); updated.docType = types[1]; block = MergedBlocks.update(block, new DocMeta(), updated, positions[1]); DocMeta deMeta = new DocMeta(); MergedBlocks.get(deMeta, block, positions[1]); assertEquals(updated.docType, deMeta.docType); int dataLenO = block.data.length; block = MergedBlocks.compact(block, deMeta); int dataLenN = block.data.length; assertTrue ( dataLenO > dataLenN); MergedBlocks.get(deMeta, block, positions[1]); assertEquals(updated.docType, deMeta.docType); } public void testTeaserCompact(Short position1, Short position2, String type1, String type2) throws Exception{ int[] positions = new int[]{position1,position2}; String[] types = new String[]{type1,type2}; for (int i=0; i<2; i++) { positions[i] = positions[i] + (-1 * Short.MIN_VALUE) + 1; } MergedBlocks.Block block = null; for (int i=0; i<2; i++) { DocTeaser meta = new DocTeaser(); meta.id = types[i]; block = MergedBlocks.add(block, positions[i], meta.toBytes()); } block = MergedBlocks.delete(block, positions[0]); DocTeaser updated = new DocTeaser(); MergedBlocks.get(updated, block, positions[1]); updated.id = types[1]; block = MergedBlocks.update(block, new DocTeaser(), updated, positions[1]); DocTeaser deMeta = new DocTeaser(); MergedBlocks.get(deMeta, block, positions[1]); assertEquals(updated.id, deMeta.id); int dataLenO = block.data.length; block = MergedBlocks.compact(block, deMeta); int dataLenN = block.data.length; assertTrue ( dataLenO > dataLenN); MergedBlocks.get(deMeta, block, positions[1]); assertEquals(updated.id, deMeta.id); } public void testAclCompact(Short position1, Short position2, String type1, String type2) throws Exception{ int[] positions = new int[]{position1,position2}; String[] types = new String[]{type1,type2}; for (int i=0; i<2; i++) { positions[i] = positions[i] + (-1 * Short.MIN_VALUE) + 1; } MergedBlocks.Block block = null; for (int i=0; i<2; i++) { DocAcl meta = new DocAcl(); Access access = new Access(); access.addUid(types[i]); meta.editPermission = access; block = MergedBlocks.add(block, positions[i], meta.toBytes()); } block = MergedBlocks.delete(block, positions[0]); DocAcl updated = new DocAcl(); MergedBlocks.get(updated, block, positions[1]); Access access = new Access(); access.addUid(types[1]); updated.editPermission = access; block = MergedBlocks.update(block, new DocAcl(), updated, positions[1]); DocAcl deMeta = new DocAcl(); MergedBlocks.get(deMeta, block, positions[1]); assertTrue( Storable.compareBytes(updated.editPermission.toStorable().toBytes(), deMeta.editPermission.toStorable().toBytes())); int dataLenO = block.data.length; block = MergedBlocks.compact(block, deMeta); int dataLenN = block.data.length; assertTrue ( dataLenO > dataLenN); MergedBlocks.get(deMeta, block, positions[1]); assertTrue( Storable.compareBytes(updated.editPermission.toStorable().toBytes(), deMeta.editPermission.toStorable().toBytes())); } }