package hdgl.db.server; import static org.junit.Assert.*; import java.io.IOException; import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.Map.Entry; import hdgl.db.conf.GraphConf; import hdgl.db.exception.BadQueryException; import hdgl.db.protocol.ClientMasterProtocol; import hdgl.db.protocol.RegionMapWritable; import hdgl.db.protocol.RegionProtocol; import hdgl.db.protocol.Protocol; import hdgl.db.protocol.ResultPackWritable; import org.apache.hadoop.conf.Configuration; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; public class SystemTest { static HGRegion region; static HGMaster master; @BeforeClass public static void setUpBeforeClass() throws Exception { Configuration conf = GraphConf.getDefault(); master = new HGMaster(conf); master.start(); region = new HGRegion(conf); region.start(); } @AfterClass public static void tearDownAfterClass() throws Exception { region.stop(); master.stop(); } @Test public void forMaster() throws Exception { Configuration conf = GraphConf.getDefault(); ClientMasterProtocol master = Protocol.master(conf); assertEquals(1, master.getRegions().entrySet().size()); for(Entry<Integer, InetSocketAddress> v : master.getRegions().entrySet()){ System.out.println("region "+v.getKey()+" - "+v.getValue()); } } @Test public void forRegion() throws Exception { Configuration conf = GraphConf.getDefault(); ClientMasterProtocol master = Protocol.master(conf); RegionMapWritable regions = master.getRegions(); int count=0; for(InetSocketAddress region:regions.values()){ InetSocketAddress addr = region; RegionProtocol r = Protocol.region(addr, conf); assertEquals("abcde", r.echo("abcde")); count++; } assertTrue("at least one region is tested", count>0); } @Test public void queryTest() throws Exception{ Configuration conf = GraphConf.getDefault(); ClientMasterProtocol master = Protocol.master(conf); // query(".(-.)+", conf, master); // query(".", conf, master); // query(".-forward.", conf, master); // query(".-[len<0].", conf, master); query(".[id=10]-.", conf); } private void query(String query, Configuration conf) throws BadQueryException, IOException { query(query, -1, conf); } private void query(String query, int maxlen, Configuration conf) throws BadQueryException, IOException { ClientMasterProtocol master = Protocol.master(conf); int queryId = master.prepareQuery(query); System.out.println("query id: "+queryId); int[] regionIds = master.query(queryId); RegionMapWritable regions = master.getRegions(); ArrayList<RegionProtocol> executeRegionConns=new ArrayList<RegionProtocol>(); for(int regionId:regionIds){ System.out.println("execute region: "+regionId+" - "+regions.get(regionId)); executeRegionConns.add(Protocol.region(regions.get(regionId), conf)); } for(RegionProtocol r:executeRegionConns){ r.doQuery(queryId); } int len = 1; boolean hasMore = true; while(hasMore && (maxlen<0 || len <= maxlen)){ hasMore = false; for(RegionProtocol r:executeRegionConns){ ResultPackWritable result = r.fetchResult(queryId, len); hasMore = hasMore || result.isHasMore(); System.out.println("result len " + len + ": " + result); } len++; } master.completeQuery(queryId); } }