multiplexertest.java

来自「JGRoups源码」· Java 代码 · 共 1,085 行 · 第 1/3 页

JAVA
1,085 行
字号
        System.out.println("c2: " + c2);        System.out.println("c1_repl (removed odd substate): " + c1_repl);        System.out.println("c2_repl (removed even substate): " + c2_repl);        assertEquals(5, c1_repl.size());        assertEquals(5, c2_repl.size());        _testEvenNumbersPresent(c1_repl);        _testOddNumbersPresent(c2_repl);    }    private void _testEvenNumbersPresent(Cache c) {        Integer[] evens=new Integer[]{new Integer(0), new Integer(2), new Integer(4), new Integer(6), new Integer(8)};        _testNumbersPresent(c, evens);    }    private void _testOddNumbersPresent(Cache c) {        Integer[] odds=new Integer[]{new Integer(1), new Integer(3), new Integer(5), new Integer(7), new Integer(9)};        _testNumbersPresent(c, odds);    }    private void _testNumbersPresent(Cache c, Integer[] numbers) {        int len=numbers.length;        assertEquals(len, c.size());        for(int i=0; i < numbers.length; i++) {            Integer number=numbers[i];            assertEquals(number, c.get(number));        }    }    public void testGetSubstatesMultipleTimes() throws Exception {        ch1=factory.createMultiplexerChannel(STACK_NAME, "c1");        ch1.connect("bla");        c1=new ExtendedCache(ch1, "cache-1");        assertEquals("cache has to be empty initially", 0, c1.size());        ch2=factory.createMultiplexerChannel(STACK_NAME, "c2");        ch2.connect("bla");        c2=new ExtendedCache(ch2, "cache-2");        assertEquals("cache has to be empty initially", 0, c2.size());        for(int i=0; i < 10; i++) {            c1.put(new Integer(i), new Integer(i));            c2.put(new Integer(i), new Integer(i));        }        ch1_repl=factory2.createMultiplexerChannel(STACK_NAME, "c1");        ch2_repl=factory2.createMultiplexerChannel(STACK_NAME, "c2");        ch1_repl.connect("bla");        c1_repl=new ExtendedCache(ch1_repl, "cache-1-repl");        boolean rc=ch1_repl.getState(null, "odd", 5000);        System.out.println("state transfer: " + rc);        ch2_repl.connect("bla");        c2_repl=new ExtendedCache(ch2_repl, "cache-2-repl");        rc=ch2_repl.getState(null, "even", 5000);        System.out.println("state transfer: " + rc);        Util.sleep(500);        _testOddNumbersPresent(c2_repl);        System.out.println("Caches after state transfers:");        System.out.println("c1: " + c1);        System.out.println("c2: " + c2);        System.out.println("c1_repl (removed odd substate): " + c1_repl);        System.out.println("c2_repl (removed even substate): " + c2_repl);        assertEquals(5, c2_repl.size());        rc=ch2_repl.getState(null, "odd", 5000);        Util.sleep(500);        System.out.println("c2_repl (removed odd substate): " + c2_repl);        _testEvenNumbersPresent(c2_repl);        assertEquals(5, c2_repl.size());        rc=ch2_repl.getState(null, "even", 5000);        Util.sleep(500);        System.out.println("c2_repl (removed even substate): " + c2_repl);        _testOddNumbersPresent(c2_repl);        assertEquals(5, c2_repl.size());        rc=ch2_repl.getState(null, "odd", 5000);        Util.sleep(500);        System.out.println("c2_repl (removed odd substate): " + c2_repl);        _testEvenNumbersPresent(c2_repl);    }     /* CAUTION: JDK 5 specific code */    private String dumpThreads() {        StringBuffer sb=new StringBuffer();        ThreadMXBean bean=ManagementFactory.getThreadMXBean();        long[] ids=bean.getAllThreadIds();        ThreadInfo[] threads=bean.getThreadInfo(ids, 20);        for(int i=0; i < threads.length; i++) {            ThreadInfo info=threads[i];            if(info == null)                continue;            sb.append(info.getThreadName()).append(":\n");            StackTraceElement[] stack_trace=info.getStackTrace();            for(int j=0; j < stack_trace.length; j++) {                StackTraceElement el=stack_trace[j];                sb.append("at ").append(el.getClassName()).append(".").append(el.getMethodName());                sb.append("(").append(el.getFileName()).append(":").append(el.getLineNumber()).append(")");                sb.append("\n");            }            sb.append("\n\n");        }        return sb.toString();    }    public static Test suite() {        return new TestSuite(MultiplexerTest.class);    }    public static void main(String[] args) {        junit.textui.TestRunner.run(MultiplexerTest.suite());    }    private static void log(String msg) {       System.out.println(Thread.currentThread() + " -- "+ msg);    }    private static class Cache extends ExtendedReceiverAdapter {        final Map data=new HashMap();        Channel ch;        String name;        public Cache(Channel ch, String name) {            this.ch=ch;            this.name=name;            this.ch.setReceiver(this);        }        protected Object get(Object key) {            synchronized(data) {                return data.get(key);            }        }        protected  void put(Object key, Object val) throws Exception {            Object[] buf=new Object[2];            buf[0]=key; buf[1]=val;            Message msg=new Message(null, null, buf);            ch.send(msg);        }        protected int size() {            synchronized(data) {                return data.size();            }        }        public void receive(Message msg) {            Object[] modification=(Object[])msg.getObject();            Object key=modification[0];            Object val=modification[1];            synchronized(data) {                // System.out.println("****** [" + name + "] received PUT(" + key + ", " + val + ") " + " from " + msg.getSrc() + " *******");                data.put(key,val);            }        }        public byte[] getState() {            byte[] state=null;            synchronized(data) {                try {                    state=Util.objectToByteBuffer(data);                }                catch(Exception e) {                    e.printStackTrace();                    return null;                }            }            return state;        }        public byte[] getState(String state_id) {            return getState();        }        public void setState(byte[] state) {            Map m;            try {                m=(Map)Util.objectFromByteBuffer(state);                synchronized(data) {                    data.clear();                    data.putAll(m);                }            }            catch(Exception e) {                e.printStackTrace();            }        }        public void setState(String state_id, byte[] state) {            setState(state);        }        public void getState(OutputStream ostream){            ObjectOutputStream oos = null;            try{               oos = new ObjectOutputStream(ostream);               synchronized(data){                  oos.writeObject(data);               }               oos.flush();            }            catch (IOException e){}            finally{               try{                  if(oos != null)                     oos.close();               }               catch (IOException e){                  System.err.println(e);               }            }        }        public void getState(String state_id, OutputStream ostream) {           getState(ostream);        }        public void setState(InputStream istream) {           ObjectInputStream ois = null;           try {               ois = new ObjectInputStream(istream);               Map m = (Map)ois.readObject();               synchronized (data)               {                  data.clear();                  data.putAll(m);               }           } catch (Exception e) {}           finally{               try {                   if(ois != null)                      ois.close();               } catch (IOException e) {                   System.err.println(e);               }           }        }        public void setState(String state_id, InputStream istream) {           setState(istream);        }        public void clear() {            synchronized (data){               data.clear();              }                    }        public void viewAccepted(View new_view) {            log("view is " + new_view);        }        public String toString() {            return data.toString();        }        private void log(String msg) {            System.out.println("-- [" + name + "] " + msg);        }    }    static class ExtendedCache extends Cache {        public ExtendedCache(Channel ch, String name) {            super(ch, name);        }        public byte[] getState(String state_id) {            Map copy=null;            synchronized (data){               copy=new HashMap(data);             }            for(Iterator it=copy.keySet().iterator(); it.hasNext();) {                Integer key=(Integer)it.next();                if(state_id.equals("odd") && key.intValue() % 2 != 0)                    it.remove();                else if(state_id.equals("even") && key.intValue() % 2 == 0)                    it.remove();            }            try {                return Util.objectToByteBuffer(copy);            }            catch(Exception e) {                e.printStackTrace();                return null;            }        }        public void getState(String state_id,OutputStream os) {           Map copy=null;           synchronized (data){              copy=new HashMap(data);            }                      for(Iterator it=copy.keySet().iterator(); it.hasNext();) {               Integer key=(Integer)it.next();               if(state_id.equals("odd") && key.intValue() % 2 != 0)                   it.remove();               else if(state_id.equals("even") && key.intValue() % 2 == 0)                   it.remove();           }           ObjectOutputStream oos = null;           try {               oos=new ObjectOutputStream(os);               oos.writeObject(copy);               oos.flush();           }           catch (IOException e){}           finally{              try{                 if(oos != null)                    oos.close();              }              catch (IOException e){                 System.err.println(e);              }           }        }        public void setState(String state_id, InputStream is){           setState(is);        }        public void setState(String state_id, byte[] state) {            setState(state);        }        public String toString() {            synchronized(data) {                Set keys=new TreeSet(data.keySet());                StringBuffer sb=new StringBuffer();                for(Iterator it=keys.iterator(); it.hasNext();) {                    Object o=it.next();                    sb.append(o).append("=").append(data.get(o)).append(" ");                }                return sb.toString();            }        }    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?