package org.seqcode.data.readdb.unittests; import java.util.*; import java.io.IOException; import org.junit.*; import org.seqcode.data.readdb.ACLChangeEntry; import org.seqcode.data.readdb.Client; import org.seqcode.data.readdb.ClientException; import org.seqcode.data.readdb.PairedHit; import org.seqcode.data.readdb.PairedHitLeftComparator; import org.seqcode.data.readdb.PairedHitRightComparator; import org.seqcode.data.readdb.SingleHit; import static org.junit.Assert.*; /** * Regression tests for readb. Uses the Client class to communicate with a server * (should be newly initialized) * You need to have a server setup with two accounts. */ public class TestReadDB { private static String hostname, user, passwd, user2, passwd2; private static int portnum; @Test public void connect() throws IOException, ClientException { Client c = new Client(hostname, portnum, user, passwd); c.close(); } @Test(expected=ClientException.class) public void badPassword() throws IOException, ClientException { Client c = new Client(hostname, portnum, user, "foo"); c.close(); } @Test(expected=ClientException.class) public void badUser() throws IOException, ClientException { Client c = new Client(hostname, portnum, "foo", passwd); c.close(); } @Test(expected=IOException.class) public void badPort() throws IOException, ClientException { Client c = new Client(hostname, portnum+1, user, passwd); c.close(); } @Test(expected=ClientException.class) public void badAlignGetChromsPaired() throws IOException, ClientException { Client c = new Client(hostname, portnum, "foo", passwd); c.getChroms("badAlignGetChroms",false,true,true); c.close(); } @Test(expected=ClientException.class) public void badAlignGetChromsSingle() throws IOException, ClientException { Client c = new Client(hostname, portnum, "foo", passwd); c.getChroms("badAlignGetChroms",false,false,true); c.close(); } @Test(expected=ClientException.class) public void badAlignGetCountSingle() throws IOException, ClientException { Client c = new Client(hostname, portnum, "foo", passwd); c.getCount("badAlignGetCount",false,false,true,true); c.close(); } @Test(expected=ClientException.class) public void badAlignGetCountPaired() throws IOException, ClientException { Client c = new Client(hostname, portnum, "foo", passwd); c.getCount("badAlignGetCount",false,true,true,true); c.close(); } @Test public void storeSortedSingle() throws IOException, ClientException { Client c = new Client(hostname, portnum, user, passwd); String name = "storeSortedSingle"; ArrayList<SingleHit> hits = new ArrayList<SingleHit>(); hits.add(new SingleHit(1, 1, 1.0F, true, 10)); hits.add(new SingleHit(1, 2, 2.0F, true, 20)); hits.add(new SingleHit(1, 3, 3.0F, true, 30)); hits.add(new SingleHit(1, 1000, 4.0F, true, 10)); hits.add(new SingleHit(10, 10, 4.0F, true, 10)); hits.add(new SingleHit(10, 20, 4.0F, true, 10)); hits.add(new SingleHit(10, 40, 4.0F, false, 10)); c.storeSingle(name,hits,false); assertTrue(name + " exists",c.exists(name)); assertTrue(name + " has chrom 1",c.getChroms(name,false,false,false).contains(1)); assertTrue(name + " has chrom 10",c.getChroms(name,false,false,false).contains(10)); assertEquals(name + " has two chroms",c.getChroms(name,false,false,false).size(), 2); assertEquals(name + " chrom 1 has 4 hits (either strand)", c.getCount(name, 1,false, false,null,null,null,null,null), 4); assertEquals(name + " chrom 10 has 4 hits (either strand)", c.getCount(name, 10,false, false,null,null,null,null,null), 3); assertEquals(name + " chrom 1 has 4 hits (+ strand)", c.getCount(name, 1,false, false,null,null,null,null,true), 4); assertEquals(name + " chrom 10 has 4 hits (+ strand)", c.getCount(name, 10,false, false,null,null,null,null,true), 2); assertEquals(name + " chrom 1 has 0 hits (- strand)", c.getCount(name, 1,false, false,null,null,null,null,false), 0); assertEquals(name + " chrom 10 has 1 hits (- strand)", c.getCount(name, 10,false, false,null,null,null,null,false), 1); List<SingleHit> retrieved = c.getSingleHits(name,1,false,null,null,null,null); assertEquals(name + " get chr 1 hits", retrieved.size(), 4); for (int i = 0; i < 4; i++) { assertTrue(name + " get chr 1 hits pos " + i + ": " + retrieved.get(i) + " vs " + hits.get(i), retrieved.get(i).equals(hits.get(i))); } retrieved = c.getSingleHits(name,1,false,null,null,null,true); assertEquals(name + " get chr 1 hits +", retrieved.size(), 4); for (int i = 0; i < 4; i++) { assertTrue(name + " get chr 1 hits + pos " + i + ": " + retrieved.get(i) + " vs " + hits.get(i), retrieved.get(i).equals(hits.get(i))); } retrieved = c.getSingleHits(name,1,false,null,null,null,false); assertEquals(name + " get chr 1 hits -", retrieved.size(), 0); retrieved = c.getSingleHits(name,10,false,null,null,null,null); assertEquals(name + " get chr 10 hits", retrieved.size(), 3); for (int i = 0; i < 3; i++) { assertTrue(name + " get chr 10 hits pos " + i + ": " + retrieved.get(i) + " vs " + hits.get(i), retrieved.get(i).equals(hits.get(i+4))); } retrieved = c.getSingleHits(name,10,false,null,null,null,true); assertEquals(name + " get chr 10 hits +", retrieved.size(), 2); for (int i = 0; i < 2; i++) { assertTrue(name + " get chr 10 hits + pos " + i + ": " + retrieved.get(i) + " vs " + hits.get(i), retrieved.get(i).equals(hits.get(i+4))); } retrieved = c.getSingleHits(name,10,false,null,null,null,false); assertEquals(name + " get chr 10 hits -", retrieved.size(), 1); for (int i = 0; i < 1; i++) { assertTrue(name + " get chr 10 hits - pos " + i + ": " + retrieved.get(i) + " vs " + hits.get(i), retrieved.get(i).equals(hits.get(i+6))); } c.close(); } @Test public void storeTwiceSingle() throws IOException, ClientException { Client c = new Client(hostname, portnum, user, passwd); String name = "storeTwiceSingle"; ArrayList<SingleHit> hitsOne = new ArrayList<SingleHit>(); ArrayList<SingleHit> hitsTen = new ArrayList<SingleHit>(); hitsOne.add(new SingleHit(1, 1, 1.0F, true, 10)); hitsOne.add(new SingleHit(1, 1000, 4.0F, true, 10)); hitsOne.add(new SingleHit(1, 3, 3.0F, true, 30)); hitsOne.add(new SingleHit(1, 2, 2.0F, true, 20)); hitsTen.add(new SingleHit(10, 20, 4.0F, true, 10)); hitsTen.add(new SingleHit(10, 10, 4.0F, true, 10)); hitsTen.add(new SingleHit(10, 40, 4.0F, false, 10)); c.storeSingle(name,hitsOne,false); assertTrue(name + " exists",c.exists(name)); assertTrue(name + " has chrom 1",c.getChroms(name,false, false,false).contains(1)); assertFalse(name + " has chrom 10",c.getChroms(name,false, false,false).contains(10)); assertEquals(name + " has two chroms",c.getChroms(name,false,false,false).size(), 1); c.storeSingle(name,hitsTen,false); assertTrue(name + " exists",c.exists(name)); assertTrue(name + " has chrom 1",c.getChroms(name,false, false,false).contains(1)); assertTrue(name + " has chrom 10",c.getChroms(name,false, false,false).contains(10)); assertEquals(name + " has two chroms",c.getChroms(name,false,false,false).size(),2); List<SingleHit> hits = new ArrayList<SingleHit>(); hits.addAll(hitsOne); hits.addAll(hitsTen); Collections.sort(hits); assertEquals(name + " chrom 1 has 4 hits (either strand)", c.getCount(name, 1,false, false,null,null,null,null,null), 4); assertEquals(name + " chrom 10 has 4 hits (either strand)", c.getCount(name, 10,false, false,null,null,null,null,null),3); assertEquals(name + " chrom 1 has 4 hits (+ strand)", c.getCount(name, 1, false,false,null,null,null,null,true),4); assertEquals(name + " chrom 10 has 4 hits (+ strand)", c.getCount(name, 10,false, false,null,null,null,null,true),2); assertEquals(name + " chrom 1 has 0 hits (- strand)", c.getCount(name, 1,false, false,null,null,null,null,false), 0); assertEquals(name + " chrom 10 has 1 hits (- strand)", c.getCount(name, 10,false, false,null,null,null,null,false), 1); List<SingleHit> retrieved = c.getSingleHits(name,1,false,null,null,null,null); assertEquals(name + " get chr 1 hits", retrieved.size(),4); for (int i = 0; i < 4; i++) { assertTrue(name + " get chr 1 hits pos " + i + ": " + retrieved.get(i) + " vs " + hits.get(i), retrieved.get(i).equals(hits.get(i))); } retrieved = c.getSingleHits(name,1,false,null,null,null,true); assertEquals(name + " get chr 1 hits +", retrieved.size(),4); for (int i = 0; i < 4; i++) { assertTrue(name + " get chr 1 hits + pos " + i + i + ": " + retrieved.get(i) + " vs " + hits.get(i), retrieved.get(i).equals(hits.get(i))); } retrieved = c.getSingleHits(name,1,false,null,null,null,false); assertEquals(name + " get chr 1 hits -", retrieved.size(),0); retrieved = c.getSingleHits(name,10,false,null,null,null,null); assertEquals(name + " get chr 10 hits", retrieved.size(),3); for (int i = 0; i < 3; i++) { assertTrue(name + " get chr 10 hits pos " + i+ retrieved.get(i) + " vs " + hits.get(i), retrieved.get(i).equals(hits.get(i+4))); } retrieved = c.getSingleHits(name,10,false,null,null,null,true); assertEquals(name + " get chr 10 hits +", retrieved.size(),2); for (int i = 0; i < 2; i++) { assertTrue(name + " get chr 10 hits + pos " + i+ retrieved.get(i) + " vs " + hits.get(i), retrieved.get(i).equals(hits.get(i+4))); } retrieved = c.getSingleHits(name,10,false,null,null,null,false); assertEquals(name + " get chr 10 hits -", retrieved.size(),1); for (int i = 0; i < 1; i++) { assertTrue(name + " get chr 10 hits - pos " + i+ retrieved.get(i) + " vs " + hits.get(i), retrieved.get(i).equals(hits.get(i+6))); } c.close(); } @Test public void storeUnsortedSingle() throws IOException, ClientException { Client c = new Client(hostname, portnum, user, passwd); String name = "storeUnsortedSingle"; ArrayList<SingleHit> hits = new ArrayList<SingleHit>(); hits.add(new SingleHit(10, 10, 4.0F, true, 10)); hits.add(new SingleHit(1, 2, 2.0F, true, 20)); hits.add(new SingleHit(10, 40, 4.0F, false, 10)); hits.add(new SingleHit(10, 20, 4.0F, true, 10)); hits.add(new SingleHit(1, 1000, 4.0F, true, 10)); hits.add(new SingleHit(1, 3, 3.0F, true, 30)); hits.add(new SingleHit(1, 1, 1.0F, true, 10)); c.storeSingle(name,hits,false); assertTrue(name + " exists",c.exists(name)); assertTrue(name + " has chrom 1",c.getChroms(name,false, false,false).contains(1)); assertTrue(name + " has chrom 10",c.getChroms(name,false, false,false).contains(10)); assertEquals(name + " has two chroms",c.getChroms(name,false,false,false).size(), 2); Collections.sort(hits); assertEquals(name + " chrom 1 has 4 hits (either strand)", c.getCount(name, 1,false, false,null,null,null,null,null), 4); assertEquals(name + " chrom 10 has 4 hits (either strand)", c.getCount(name, 10,false, false,null,null,null,null,null), 3); assertEquals(name + " chrom 1 has 4 hits (+ strand)", c.getCount(name, 1,false, false,null,null,null,null,true), 4); assertEquals(name + " chrom 10 has 4 hits (+ strand)", c.getCount(name, 10,false, false,null,null,null,null,true), 2); assertEquals(name + " chrom 1 has 0 hits (- strand)", c.getCount(name, 1,false, false,null,null,null,null,false), 0); assertEquals(name + " chrom 10 has 1 hits (- strand)", c.getCount(name, 10,false, false,null,null,null,null,false), 1); List<SingleHit> retrieved = c.getSingleHits(name,1,false,null,null,null,null); assertEquals(name + " get chr 1 hits", retrieved.size(), 4); for (int i = 0; i < 4; i++) { assertTrue(name + " get chr 1 hits pos " + i+ retrieved.get(i) + " vs " + hits.get(i), retrieved.get(i).equals(hits.get(i))); } retrieved = c.getSingleHits(name,1,false,null,null,null,true); assertEquals(name + " get chr 1 hits +", retrieved.size(), 4); for (int i = 0; i < 4; i++) { assertTrue(name + " get chr 1 hits + pos " + i+ retrieved.get(i) + " vs " + hits.get(i), retrieved.get(i).equals(hits.get(i))); } retrieved = c.getSingleHits(name,1,false,null,null,null,false); assertEquals(name + " get chr 1 hits -", retrieved.size(), 0); retrieved = c.getSingleHits(name,10,false,null,null,null,null); assertEquals(name + " get chr 10 hits", retrieved.size(), 3); for (int i = 0; i < 3; i++) { assertTrue(name + " get chr 10 hits pos " + i+ retrieved.get(i) + " vs " + hits.get(i), retrieved.get(i).equals(hits.get(i+4))); } retrieved = c.getSingleHits(name,10,false,null,null,null,true); assertEquals(name + " get chr 10 hits +", retrieved.size(), 2); for (int i = 0; i < 2; i++) { assertTrue(name + " get chr 10 hits + pos " + i+ retrieved.get(i) + " vs " + hits.get(i), retrieved.get(i).equals(hits.get(i+4))); } retrieved = c.getSingleHits(name,10,false,null,null,null,false); assertEquals(name + " get chr 10 hits -", retrieved.size(), 1); for (int i = 0; i < 1; i++) { assertTrue(name + " get chr 10 hits - pos " + i+ retrieved.get(i) + " vs " + hits.get(i), retrieved.get(i).equals(hits.get(i+6))); } c.close(); } @Test public void storeDouble() throws IOException, ClientException { Client c = new Client(hostname, portnum, user, passwd); String name = "storeDouble"; ArrayList<SingleHit> hits = new ArrayList<SingleHit>(); hits.add(new SingleHit(10, 10, 4.0F, true, 10)); hits.add(new SingleHit(10, 40, 4.0F, false, 10)); hits.add(new SingleHit(10, 20, 4.0F, true, 10)); hits.add(new SingleHit(1, 1000, 4.0F, true, 10)); hits.add(new SingleHit(1, 3, 3.0F, true, 30)); hits.add(new SingleHit(1, 1, 1.0F, true, 10)); hits.add(new SingleHit(1, 2, 2.0F, true, 20)); c.storeSingle(name,hits,false); assertTrue(name + " exists",c.exists(name)); assertTrue(name + " has chrom 1",c.getChroms(name,false, false,false).contains(1)); assertTrue(name + " has chrom 10",c.getChroms(name,false, false,false).contains(10)); assertEquals(name + " has two chroms",c.getChroms(name,false,false,false).size(), 2); assertEquals(name + " chrom 1 has 8 hits (either strand)", c.getCount(name, 1,false, false,null,null,null,null,null), 4); assertEquals(name + " chrom 10 has 6 hits (either strand)", c.getCount(name, 10,false, false,null,null,null,null,null), 3); assertEquals(name + " chrom 1 has 8 hits (+ strand)", c.getCount(name, 1,false, false,null,null,null,null,true), 4); assertEquals(name + " chrom 10 has 4 hits (+ strand)", c.getCount(name, 10,false, false,null,null,null,null,true), 2); assertEquals(name + " chrom 1 has 0 hits (- strand)", c.getCount(name, 1,false, false,null,null,null,null,false), 0); assertEquals(name + " chrom 10 has 2 hits (- strand)", c.getCount(name, 10,false, false,null,null,null,null,false), 1); c.storeSingle(name,hits,false); assertTrue(name + " exists",c.exists(name)); assertTrue(name + " has chrom 1",c.getChroms(name,false, false,false).contains(1)); assertTrue(name + " has chrom 10",c.getChroms(name,false, false,false).contains(10)); assertEquals(name + " has two chroms",c.getChroms(name,false,false,false).size(), 2); hits.addAll(hits); Collections.sort(hits); assertEquals(name + " chrom 1 has 8 hits (either strand)", c.getCount(name, 1,false, false,null,null,null,null,null), 8); assertEquals(name + " chrom 10 has 6 hits (either strand)", c.getCount(name, 10,false, false,null,null,null,null,null), 6); assertEquals(name + " chrom 1 has 8 hits (+ strand)", c.getCount(name, 1,false, false,null,null,null,null,true), 8); assertEquals(name + " chrom 10 has 4 hits (+ strand)", c.getCount(name, 10,false, false,null,null,null,null,true), 4); assertEquals(name + " chrom 1 has 0 hits (- strand)", c.getCount(name, 1,false, false,null,null,null,null,false), 0); assertEquals(name + " chrom 10 has 2 hits (- strand)", c.getCount(name, 10,false, false,null,null,null,null,false), 2); List<SingleHit> retrieved = c.getSingleHits(name,1,false,null,null,null,null); assertEquals(name + " get chr 1 hits", retrieved.size(), 8); for (int i = 0; i < 8; i++) { assertTrue(name + " get chr 1 hits pos " + i+ retrieved.get(i) + " vs " + hits.get(i), retrieved.get(i).equals(hits.get(i))); } retrieved = c.getSingleHits(name,1,false,null,null,null,true); assertEquals(name + " get chr 1 hits +", retrieved.size(), 8); for (int i = 0; i < 8; i++) { assertTrue(name + " get chr 1 hits + pos " + i+ retrieved.get(i) + " vs " + hits.get(i), retrieved.get(i).equals(hits.get(i))); } retrieved = c.getSingleHits(name,1,false,null,null,null,false); assertEquals(name + " get chr 1 hits -", retrieved.size(), 0); retrieved = c.getSingleHits(name,10,false,null,null,null,null); assertEquals(name + " get chr 10 hits", retrieved.size(), 6); for (int i = 0; i < 6; i++) { assertTrue(name + " get chr 10 hits pos " + i+ retrieved.get(i) + " vs " + hits.get(i), retrieved.get(i).equals(hits.get(i+8))); } retrieved = c.getSingleHits(name,10,false,null,null,null,true); assertEquals(name + " get chr 10 hits +", retrieved.size(), 4); for (int i = 0; i < 4; i++) { assertTrue(name + " get chr 10 hits + pos " + i+ retrieved.get(i) + " vs " + hits.get(i), retrieved.get(i).equals(hits.get(i+8))); } retrieved = c.getSingleHits(name,10,false,null,null,null,false); assertEquals(name + " get chr 10 hits -", retrieved.size(), 2); for (int i = 0; i < 1; i++) { assertTrue(name + " get chr 10 hits - pos " + i+ retrieved.get(i) + " vs " + hits.get(i), retrieved.get(i).equals(hits.get(i+12))); } c.close(); } @Test public void storeUnsortedSingleType2() throws IOException, ClientException { Client c = new Client(hostname, portnum, user, passwd); String name = "storeUnsortedSingleType2"; ArrayList<SingleHit> hits = new ArrayList<SingleHit>(); hits.add(new SingleHit(10, 10, 4.0F, true, 10)); hits.add(new SingleHit(1, 2, 2.0F, true, 20)); hits.add(new SingleHit(10, 40, 4.0F, false, 10)); hits.add(new SingleHit(10, 20, 4.0F, true, 10)); hits.add(new SingleHit(1, 1000, 4.0F, true, 10)); hits.add(new SingleHit(1, 3, 3.0F, true, 30)); hits.add(new SingleHit(1, 1, 1.0F, true, 10)); c.storeSingle(name,hits,true); assertTrue(name + " exists",c.exists(name)); assertTrue(name + " has chrom 1",c.getChroms(name,true, false,false).contains(1)); assertTrue(name + " has chrom 10",c.getChroms(name,true, false,false).contains(10)); assertEquals(name + " has two chroms",c.getChroms(name,true,false,false).size(), 2); Collections.sort(hits); assertEquals(name + " chrom 1 has 4 hits (either strand)", c.getCount(name, 1,true, false,null,null,null,null,null), 4); assertEquals(name + " chrom 10 has 4 hits (either strand)", c.getCount(name, 10,true, false,null,null,null,null,null), 3); assertEquals(name + " chrom 1 has 4 hits (+ strand)", c.getCount(name, 1,true, false,null,null,null,null,true), 4); assertEquals(name + " chrom 10 has 4 hits (+ strand)", c.getCount(name, 10,true, false,null,null,null,null,true), 2); assertEquals(name + " chrom 1 has 0 hits (- strand)", c.getCount(name, 1,true, false,null,null,null,null,false), 0); assertEquals(name + " chrom 10 has 1 hits (- strand)", c.getCount(name, 10,true, false,null,null,null,null,false), 1); List<SingleHit> retrieved = c.getSingleHits(name,1,true,null,null,null,null); assertEquals(name + " get chr 1 hits", retrieved.size(), 4); for (int i = 0; i < 4; i++) { assertTrue(name + " get chr 1 hits pos " + i+ retrieved.get(i) + " vs " + hits.get(i), retrieved.get(i).equals(hits.get(i))); } retrieved = c.getSingleHits(name,1,true,null,null,null,true); assertEquals(name + " get chr 1 hits +", retrieved.size(), 4); for (int i = 0; i < 4; i++) { assertTrue(name + " get chr 1 hits + pos " + i+ retrieved.get(i) + " vs " + hits.get(i), retrieved.get(i).equals(hits.get(i))); } retrieved = c.getSingleHits(name,1,true,null,null,null,false); assertEquals(name + " get chr 1 hits -", retrieved.size(), 0); retrieved = c.getSingleHits(name,10,true,null,null,null,null); assertEquals(name + " get chr 10 hits", retrieved.size(), 3); for (int i = 0; i < 3; i++) { assertTrue(name + " get chr 10 hits pos " + i+ retrieved.get(i) + " vs " + hits.get(i), retrieved.get(i).equals(hits.get(i+4))); } retrieved = c.getSingleHits(name,10,true,null,null,null,true); assertEquals(name + " get chr 10 hits +", retrieved.size(), 2); for (int i = 0; i < 2; i++) { assertTrue(name + " get chr 10 hits + pos " + i+ retrieved.get(i) + " vs " + hits.get(i), retrieved.get(i).equals(hits.get(i+4))); } retrieved = c.getSingleHits(name,10,true,null,null,null,false); assertEquals(name + " get chr 10 hits -", retrieved.size(), 1); for (int i = 0; i < 1; i++) { assertTrue(name + " get chr 10 hits - pos " + i+ retrieved.get(i) + " vs " + hits.get(i), retrieved.get(i).equals(hits.get(i+6))); } c.close(); } @Test public void testACL() throws IOException, ClientException { Client c = new Client(hostname, portnum, user, passwd); String name = "testACL"; int chrom = 60; ArrayList<SingleHit> hits = new ArrayList<SingleHit>(); hits.add(new SingleHit(chrom, 1, 1.0F, true, 10)); c.storeSingle(name,hits,false); Map<String,Set<String>> acl = c.getACL(name); assertTrue(acl.size() == 3); assertTrue(acl.get("READ").size() == 1); assertTrue(acl.get("WRITE").size() == 1); assertTrue(acl.get("ADMIN").size() == 1); assertTrue(acl.get("READ").contains(user)); assertTrue(acl.get("WRITE").contains(user)); assertTrue(acl.get("ADMIN").contains(user)); boolean caught = false; Client other = null; try { other = new Client(hostname,portnum,user2,passwd2); other.getChroms(name,false,false,false); } catch (ClientException e) { caught = true; other.close(); } assertTrue(caught); Set<ACLChangeEntry> changes = new HashSet<ACLChangeEntry>(); changes.add(new ACLChangeEntry("add","read",user2)); c.setACL(name, changes); acl = c.getACL(name); assertTrue(acl.size() == 3); assertTrue(acl.get("READ").size() == 2); assertTrue(acl.get("WRITE").size() == 1); assertTrue(acl.get("ADMIN").size() == 1); assertTrue(acl.get("READ").contains(user)); assertTrue(acl.get("READ").contains(user2)); assertTrue(acl.get("WRITE").contains(user)); assertTrue(acl.get("ADMIN").contains(user)); other = new Client(hostname,portnum,user2,passwd2); other.getChroms(name,false,false,false); other.close(); changes.clear(); changes.add(new ACLChangeEntry("delete","read",user2)); c.setACL(name, changes); acl = c.getACL(name); assertTrue(acl.size() == 3); assertTrue(acl.get("READ").size() == 1); assertTrue(acl.get("WRITE").size() == 1); assertTrue(acl.get("ADMIN").size() == 1); assertTrue(acl.get("READ").contains(user)); assertTrue(acl.get("WRITE").contains(user)); assertTrue(acl.get("ADMIN").contains(user)); c.close(); } @Test public void testRangeQuery() throws IOException, ClientException { Client c = new Client(hostname, portnum, user, passwd); String name = "testRangeQuery"; int chrom = 10101010; int n = 10000; List<SingleHit> hits = new ArrayList<SingleHit>(); for (int i = 0; i < n; i++) { hits.add(new SingleHit(chrom, (int)Math.round(Math.random() * Integer.MAX_VALUE), 1.0F, true, 20)); } c.storeSingle(name,hits,false); Collections.sort(hits); for (int q = 0; q < 30; q++) { int start = (int)Math.round(Math.random() * Integer.MAX_VALUE); int end = start + (int)(Math.round(Math.random() * Integer.MAX_VALUE) % (Integer.MAX_VALUE - start)); int count = 0; for (int i = 0; i < hits.size(); i++) { if (hits.get(i).pos >= start && hits.get(i).pos <= end) { count++; } } assertTrue(String.format("%s %d != %d", name, count, c.getCount(name,chrom,false,false,start,end,null,null,null)), count == c.getCount(name,chrom,false,false,start,end,null,null,null)); int back[] = c.getPositions(name,chrom,false,false,start,end,null,null,null); int j = 0; int k = 0; while (j < hits.size() && hits.get(j).pos < start) { j++;} while (j < hits.size() && hits.get(j).pos <= end) { assertTrue(hits.get(j++).pos == back[k++]); } } assertTrue(c.getCount(name,chrom,false,false,0, Integer.MAX_VALUE - 1,null,null,null) == n); System.err.println("Done with testRangeQuery"); c.close(); } @Test public void testHistogram() throws IOException, ClientException { Client c = new Client(hostname, portnum, user, passwd); String name = "testHistogram"; int chrom = 60; ArrayList<SingleHit> hits = new ArrayList<SingleHit>(); hits.add(new SingleHit(chrom, 1, 10.0F, true, 10)); hits.add(new SingleHit(chrom, 1, 10.0F, false, 10)); hits.add(new SingleHit(chrom, 1, 10.0F, true, 10)); hits.add(new SingleHit(chrom, 10, 10.0F, false, 10)); hits.add(new SingleHit(chrom, 10, 20.0F, true, 20)); hits.add(new SingleHit(chrom, 11, 20.0F, false, 20)); hits.add(new SingleHit(chrom, 12, 20.0F, true, 20)); hits.add(new SingleHit(chrom, 25, 20.0F, false, 20)); c.storeSingle(name,hits,false); TreeMap<Integer,Integer> map = c.getHistogram(name,chrom,false,false,0,10,0,100,null,null); System.out.println(name + " MAP1 IS " + map); assertEquals(name + " basic size",map.size(),3); assertEquals(name + " basic 5",(int)map.get(5),3); assertEquals(name + " basic 15",(int)map.get(15),4); assertEquals(name + " basic 25",(int)map.get(25),1); map = c.getHistogram(name,chrom,false,false,0,10,0,100,15F,null); System.out.println(name + " MAP2 IS " + map); assertEquals(name + " minweight size",map.size(),2); assertEquals(name + " minweight 15",(int)map.get(15),3); assertEquals(name + " minweight 25",(int)map.get(25),1); map = c.getHistogram(name,chrom,false,false,0,10,0,100,null,true); System.out.println(name + " MAP3 IS " + map); assertEquals(name + " basic size",map.size(),2); assertEquals(name + " basic 5",(int)map.get(5),2); assertEquals(name + " basic 15",(int)map.get(15),2); c.close(); } @Test public void testHistogram2() throws IOException, ClientException { int MAXVALUE = 10000; float MAXWEIGHT = 4f; Client c = new Client(hostname, portnum, user, passwd); String name = "testHistogram2"; for (int q = 0; q < 10; q++) { int chrom = q; ArrayList<SingleHit> hits = new ArrayList<SingleHit>(); for (int i = 0; i < MAXVALUE; i++) { hits.add(new SingleHit(chrom, (int)Math.round(Math.random() * MAXVALUE), (float)(Math.random() * MAXWEIGHT), false, 10)); } c.storeSingle(name,hits,false); Collections.sort(hits); for (int q2 = 0; q2 < 10; q2++) { int start = (int)Math.round(Math.random() * MAXVALUE); int end = start + (int)(Math.round(Math.random() * MAXVALUE) % (MAXVALUE - start)); float weight = (float)Math.random() * MAXWEIGHT; int binsize = 10 + (int)Math.round(Math.random() * 40); if (end < start) { throw new RuntimeException("end < start"); } Map<Integer,Integer> plainhist = c.getHistogram(name,chrom,false,false,0,binsize,start,end,null,null); Map<Integer,Integer> minweighthist = c.getHistogram(name,chrom,false,false,0,binsize,start,end,weight,null); Map<Integer,Float> weighthist = c.getWeightHistogram(name,chrom,false,false,0,binsize,start,end,null,null); Map<Integer,Float> minwwhist = c.getWeightHistogram(name,chrom,false,false,0,binsize,start,end,weight,null); Map<Integer,Integer> myplain = new HashMap<Integer,Integer>(); Map<Integer,Integer> myminw = new HashMap<Integer,Integer>(); Map<Integer,Float> myw = new HashMap<Integer,Float>(); Map<Integer,Float> myww = new HashMap<Integer,Float>(); for (int i = 0; i < hits.size(); i++) { int bin = ((hits.get(i).pos - start) / binsize) * binsize + binsize / 2 + start; if (hits.get(i).pos >= start && hits.get(i).pos <= end) { if (myplain.containsKey(bin)) { myplain.put(bin,1 + myplain.get(bin)); } else { myplain.put(bin,1); } if (myw.containsKey(bin)) { myw.put(bin,hits.get(i).weight + myw.get(bin)); } else { myw.put(bin,hits.get(i).weight); } if (hits.get(i).weight >= weight) { if (myminw.containsKey(bin)) { myminw.put(bin,1 + myminw.get(bin)); } else { myminw.put(bin,1); } if (myww.containsKey(bin)) { myww.put(bin,hits.get(i).weight + myww.get(bin)); } else { myww.put(bin,hits.get(i).weight); } } } } assertEquals(myplain.size(),plainhist.size()); assertEquals(myminw.size(),minweighthist.size()); assertEquals(myw.size(),weighthist.size()); assertEquals(myww.size(),minwwhist.size()); for (int bin : myplain.keySet()) { assertEquals(String.format("plain bin %d : %d != %d", bin, myplain.get(bin), plainhist.get(bin)), myplain.get(bin),plainhist.get(bin)); } for (int bin : myminw.keySet()) { assertEquals(String.format("minw bin %d : %d != %d", bin, myminw.get(bin), minweighthist.get(bin)), myminw.get(bin),minweighthist.get(bin)); } for (int bin : myw.keySet()) { assertEquals(String.format("weight bin %d : %f != %f", bin, myw.get(bin), weighthist.get(bin)), myw.get(bin),weighthist.get(bin), .0001); } for (int bin : myww.keySet()) { assertEquals(String.format("ww bin %d : %f != %f", bin, myww.get(bin), minwwhist.get(bin)), myww.get(bin) , minwwhist.get(bin), .0001); } } } c.close(); } @Test public void testHistogramType2() throws IOException, ClientException { Client c = new Client(hostname, portnum, user, passwd); String name = "testHistogramType2"; int chrom = 60; ArrayList<SingleHit> hits = new ArrayList<SingleHit>(); hits.add(new SingleHit(chrom, 1, 10.0F, true, 10)); hits.add(new SingleHit(chrom, 1, 10.0F, false, 10)); hits.add(new SingleHit(chrom, 1, 10.0F, true, 10)); hits.add(new SingleHit(chrom, 10, 10.0F, false, 10)); hits.add(new SingleHit(chrom, 10, 20.0F, true, 20)); hits.add(new SingleHit(chrom, 11, 20.0F, false, 20)); hits.add(new SingleHit(chrom, 12, 20.0F, true, 20)); hits.add(new SingleHit(chrom, 25, 20.0F, false, 20)); c.storeSingle(name,hits,true); TreeMap<Integer,Integer> map = c.getHistogram(name,chrom,true,false,0,10,0,100,null,null); System.out.println(name + " MAP1 IS " + map); assertEquals(name + " basic size",map.size(),3); assertEquals(name + " basic 5",(int)map.get(5),3); assertEquals(name + " basic 15",(int)map.get(15),4); assertEquals(name + " basic 25",(int)map.get(25),1); map = c.getHistogram(name,chrom,true,false,0,10,0,100,15F,null); System.out.println(name + " MAP2 IS " + map); assertEquals(name + " minweight size",map.size(),2); assertEquals(name + " minweight 15",(int)map.get(15),3); assertEquals(name + " minweight 25",(int)map.get(25),1); map = c.getHistogram(name,chrom,true,false,0,10,0,100,null,true); System.out.println(name + " MAP3 IS " + map); assertEquals(name + " basic size",map.size(),2); assertEquals(name + " basic 5",(int)map.get(5),2); assertEquals(name + " basic 15",(int)map.get(15),2); c.close(); } @Test public void testMaximumStore() throws IOException, ClientException { Client c = new Client(hostname, portnum, user, passwd); for (int n = 100000; n <= 50000000; n *= 2) { String name = "storeMaximum" + n; ArrayList<SingleHit> hits = new ArrayList<SingleHit>(); for (int i = 0; i < n; i++) { hits.add(new SingleHit(50, i, 1.0F, true, 10)); } c.storeSingle(name,hits,false); assertEquals(name + " numhits unstranded", c.getCount(name,50,false,false,null,null,null,false,null), n); assertEquals(name + " numhits +", c.getCount(name,50,false,false,null,null,null,false,true), n); assertEquals(name + " numhits -", c.getCount(name,50,false,false,null,null,null,false,false), 0); } c.close(); } @Test public void testPairedReads() throws IOException, ClientException { List<PairedHit> hits = new ArrayList<PairedHit>(); for (int i = 0; i < 1000; i++) { hits.add(new PairedHit(i % 4, i, i % 3 != 1, (short)(Math.random()*100+1), (i % 4) + 255, i + 0xffff, i % 3 == 1, (short)(Math.random()*100+1), (float)Math.random() * 10, i % 3)); } Client c = new Client(hostname, portnum, user, passwd); String name = "testPairedReads"; c.storePaired(name, hits); // System.err.println("Storing hits " + hits); // left side first Map<Integer,List<PairedHit>> map = new HashMap<Integer,List<PairedHit>>(); for (PairedHit p : hits) { if (!map.containsKey(p.leftChrom)) { map.put(p.leftChrom, new ArrayList<PairedHit>()); } map.get(p.leftChrom).add(p); } for (int chrom : map.keySet()) { List<PairedHit> list = map.get(chrom); Collections.sort(list, new PairedHitLeftComparator()); assertEquals(String.format("chrom %d, %d ?= %d", chrom, list.size(), c.getCount(name,chrom,false,true,null,null,null,true,null)), list.size(), c.getCount(name,chrom,false,true,null,null,null,true,null)); List<PairedHit> fromdb = c.getPairedHits(name, chrom, true, null, null, null, null); assertEquals(fromdb.size(), list.size()); for (int i = 0; i < fromdb.size(); i++) { assertEquals(fromdb.get(i), list.get(i)); } } map.clear(); for (PairedHit p : hits) { if (!map.containsKey(p.rightChrom)) { map.put(p.rightChrom, new ArrayList<PairedHit>()); } map.get(p.rightChrom).add(p); } for (int chrom : map.keySet()) { List<PairedHit> list = map.get(chrom); Collections.sort(list, new PairedHitRightComparator()); assertEquals(list.size(), c.getCount(name,chrom,false,true,null,null,null,false,null)); List<PairedHit> fromdb = c.getPairedHits(name, chrom, false, null, null, null, null); assertEquals(fromdb.size(), list.size()); for (int i = 0; i < fromdb.size(); i++) { assertEquals(String.format("at %d: %d vs %d", i, fromdb.get(i).rightPos, list.get(i).rightPos), fromdb.get(i).rightPos, list.get(i).rightPos); assertEquals(String.format("at %d: %d vs %d", i, fromdb.get(i).rightChrom, list.get(i).rightChrom), fromdb.get(i).rightChrom, list.get(i).rightChrom); assertEquals(String.format("at %d: %d vs %d", i, fromdb.get(i).leftPos, list.get(i).leftPos), fromdb.get(i).leftPos, list.get(i).leftPos); assertEquals(String.format("at %d: %d vs %d", i, fromdb.get(i).leftChrom, list.get(i).leftChrom), fromdb.get(i).leftChrom, list.get(i).leftChrom); } } c.close(); } @Test public void testSecondStorePairedReads() throws IOException, ClientException { List<PairedHit> hits = new ArrayList<PairedHit>(); for (int i = 0; i < 1000; i++) { hits.add(new PairedHit(i % 4, i, i % 3 != 1, (short)10, (i % 4) + 255, i + 0xffff, i % 3 == 1, (short)20, (float)Math.random(), i % 3)); } Client c = new Client(hostname, portnum, user, passwd); String name = "testSecondStorePairedReads"; c.storePaired(name, hits); List<PairedHit> newhits = new ArrayList<PairedHit>(); for (int i = 500; i <2000; i++) { newhits.add(new PairedHit(i % 4, i, i % 3 != 1, (short)30, (i % 4) + 255, i + 0xffff, i % 3 == 1, (short)40, (float)Math.random(), i % 3)); } c.storePaired(name, newhits); hits.addAll(newhits); // left side first Map<Integer,List<PairedHit>> map = new HashMap<Integer,List<PairedHit>>(); for (PairedHit p : hits) { if (!map.containsKey(p.leftChrom)) { map.put(p.leftChrom, new ArrayList<PairedHit>()); } map.get(p.leftChrom).add(p); } for (int chrom : map.keySet()) { List<PairedHit> list = map.get(chrom); Collections.sort(list, new PairedHitLeftComparator()); assertEquals(String.format("chrom %d, %d ?= %d", chrom, list.size(), c.getCount(name,chrom,false,true,null,null,null,true,null)), list.size(), c.getCount(name,chrom,false,true,null,null,null,true,null)); List<PairedHit> fromdb = c.getPairedHits(name, chrom, true, null, null, null, null); assertEquals(fromdb.size(), list.size()); for (int i = 0; i < fromdb.size(); i++) { assertEquals(fromdb.get(i), list.get(i)); } } map.clear(); for (PairedHit p : hits) { if (!map.containsKey(p.rightChrom)) { map.put(p.rightChrom, new ArrayList<PairedHit>()); } map.get(p.rightChrom).add(p); } for (int chrom : map.keySet()) { List<PairedHit> list = map.get(chrom); Collections.sort(list, new PairedHitRightComparator()); // System.err.println("List for " + chrom + " is " + list); assertEquals(list.size(), c.getCount(name,chrom,false,true,null,null,null,false,null)); List<PairedHit> fromdb = c.getPairedHits(name, chrom, false, null, null, null, null); // System.err.println("fromdb " + chrom + " is " + fromdb); assertEquals(fromdb.size(), list.size()); for (int i = 0; i < fromdb.size(); i++) { assertEquals(String.format("at %d: %d vs %d", i, fromdb.get(i).rightPos, list.get(i).rightPos), fromdb.get(i).rightPos, list.get(i).rightPos); assertEquals(String.format("at %d: %d vs %d", i, fromdb.get(i).rightChrom, list.get(i).rightChrom), fromdb.get(i).rightChrom, list.get(i).rightChrom); assertEquals(String.format("at %d: %d vs %d", i, fromdb.get(i).leftPos, list.get(i).leftPos), fromdb.get(i).leftPos, list.get(i).leftPos); assertEquals(String.format("at %d: %d vs %d", i, fromdb.get(i).leftChrom, list.get(i).leftChrom), fromdb.get(i).leftChrom, list.get(i).leftChrom); } } c.close(); } @Test public void testDelete() throws IOException, ClientException { Client c = new Client(hostname, portnum, user, passwd); String name = "testDelete"; int chrom = 60; ArrayList<SingleHit> hits = new ArrayList<SingleHit>(); hits.add(new SingleHit(chrom, 1, 10.0F, true, 10)); hits.add(new SingleHit(chrom, 1, 10.0F, false, 10)); hits.add(new SingleHit(chrom, 1, 10.0F, true, 10)); hits.add(new SingleHit(chrom, 10, 10.0F, false, 10)); hits.add(new SingleHit(chrom+1, 10, 20.0F, true, 20)); hits.add(new SingleHit(chrom+1, 11, 20.0F, false, 20)); hits.add(new SingleHit(chrom+1, 12, 20.0F, true, 20)); hits.add(new SingleHit(chrom+1, 25, 20.0F, false, 20)); c.storeSingle(name,hits,false); int count = c.getCount(name,false, false, false, true) + c.getCount(name,false,false,false,false); assertEquals(hits.size(),count); c.deleteAlignment(name, false); boolean ex = false; try { // if the delete worked, then this'll throw an exception count = c.getCount(name,false, false, false, true); } catch (ClientException e) { ex = true; } assertTrue(ex); c.close(); } @Test public void testDelete2() throws IOException, ClientException { Client c = new Client(hostname, portnum, user, passwd); String name = "testDelete2"; int chrom = 60; ArrayList<SingleHit> hits = new ArrayList<SingleHit>(); hits.add(new SingleHit(chrom, 1, 10.0F, true, 10)); hits.add(new SingleHit(chrom, 1, 10.0F, false, 10)); hits.add(new SingleHit(chrom, 1, 10.0F, true, 10)); hits.add(new SingleHit(chrom, 10, 10.0F, false, 10)); hits.add(new SingleHit(chrom+1, 10, 20.0F, true, 20)); hits.add(new SingleHit(chrom+1, 11, 20.0F, false, 20)); hits.add(new SingleHit(chrom+1, 12, 20.0F, true, 20)); hits.add(new SingleHit(chrom+1, 25, 20.0F, false, 20)); c.storeSingle(name,hits,false); int count = c.getCount(name,false, false, false, true) + c.getCount(name,false,false,false,false); assertEquals(hits.size(),count); c.deleteAlignment(name, false); boolean ex = false; try { // if the delete worked, then this'll throw an exception count = c.getCount(name,false, false, false, true); } catch (ClientException e) { ex = true; } assertTrue(ex || count == 0); c.close(); c = new Client(hostname, portnum, user, passwd); c.storeSingle(name,hits,false); count = c.getCount(name,false, false, false, true) + c.getCount(name,false,false,false,false); assertEquals(hits.size(),count); c.close(); } @Test public void testDelete3() throws IOException, ClientException { Client c = new Client(hostname, portnum, user, passwd); String name = "testDelete3"; int chrom = 60; ArrayList<SingleHit> hits = new ArrayList<SingleHit>(); hits.add(new SingleHit(chrom, 1, 10.0F, true, 10)); hits.add(new SingleHit(chrom, 1, 10.0F, false, 10)); hits.add(new SingleHit(chrom, 1, 10.0F, true, 10)); hits.add(new SingleHit(chrom, 10, 10.0F, false, 10)); hits.add(new SingleHit(chrom+1, 10, 20.0F, true, 20)); hits.add(new SingleHit(chrom+1, 11, 20.0F, false, 20)); hits.add(new SingleHit(chrom+1, 12, 20.0F, true, 20)); hits.add(new SingleHit(chrom+1, 25, 20.0F, false, 20)); c.storeSingle(name,hits,false); int count = c.getCount(name,false, false, false, true) + c.getCount(name,false,false,false,false); assertEquals(hits.size(),count); List<PairedHit> phits = new ArrayList<PairedHit>(); for (int i = 0; i < 1000; i++) { phits.add(new PairedHit(i % 4, i, i % 3 != 1, (short)(Math.random()*100+1), (i % 4) + 255, i + 0xffff, i % 3 == 1, (short)(Math.random()*100+1), (float)Math.random() * 10, i % 3)); } c.storePaired(name, phits); count = c.getCount(name,false, false, false, true) + c.getCount(name,false,false,false,false); assertEquals(hits.size(),count); count = c.getCount(name,false, true, false, true) + c.getCount(name,false,true,false,false); assertEquals(phits.size(),count); c.deleteAlignment(name, false); count = c.getCount(name,false, true, false, true) + c.getCount(name,false,true,false,false); assertEquals(phits.size(),count); boolean ex = false; try { // if the delete worked, then this'll throw an exception count = c.getCount(name,false, false, false, true); } catch (ClientException e) { ex = true; } assertTrue(ex || count == 0); c.close(); } public static void main(String args[]) { hostname = args[0]; portnum = Integer.parseInt(args[1]); user = args[2]; passwd = args[3]; user2 = args[4]; passwd2 = args[5]; org.junit.runner.JUnitCore.main("org.seqcode.data.readdb.TestReadDB"); } }