Package org.jgroups.tests

Source Code of org.jgroups.tests.NAKACK_REBROADCAST_Test$MessageInterceptor

package org.jgroups.tests;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.jgroups.Event;
import org.jgroups.Message;
import org.jgroups.View;
import org.jgroups.debug.Simulator;
import org.jgroups.stack.IpAddress;
import org.jgroups.Address;
import org.jgroups.stack.Protocol;
import org.jgroups.protocols.pbcast.NAKACK;
import org.jgroups.protocols.pbcast.NakAckHeader;
import org.jgroups.util.Digest;
import org.jgroups.util.Range;

import java.util.Properties;
import java.util.Vector;

/**
* Tests the NAKACK protocol's REBROADCAST behavior
* @author Dennis Reed
*/
public class NAKACK_REBROADCAST_Test extends TestCase {
    IpAddress a1, a2;
    NAKACK nak;
    MessageInterceptor interceptor;
    Simulator s;

    public NAKACK_REBROADCAST_Test(String name) {
        super(name);
    }

    public void setUp() throws Exception {
        super.setUp();
        a1=new IpAddress(1111); // own address
        a2=new IpAddress(2222);
        Vector members=new Vector();
        members.add(a1);
        members.add(a2);
        View v=new View(a1, 1, members);
        s=new Simulator();
        s.setLocalAddress(a1);
        s.setView(v);
        s.addMember(a1);
        NAKACK nak=new NAKACK();
        interceptor = new MessageInterceptor();
        Protocol[] stack=new Protocol[]{nak, interceptor};
        s.setProtocolStack(stack);
        s.start();
    }

    public void tearDown() throws Exception {
        super.tearDown();
        s.stop();
    }

    public void testRebroadcast() throws InterruptedException {
        Digest digest=new Digest(a2, 0, 2, 2);
        Event evt=new Event(Event.REBROADCAST, digest);
        s.send(evt);

        Range range = interceptor.getRange();
        interceptor.reset();
        assertNotNull(range);
        assertEquals(1, range.low);
        assertEquals(2, range.high);
    }

    public void testRebroadcastSingle() throws InterruptedException {
        Digest digest=new Digest(a2, 0, 1, 1);
        Event evt=new Event(Event.REBROADCAST, digest);
        s.send(evt);

        Range range = interceptor.getRange();
        interceptor.reset();
        assertNotNull(range);
        assertEquals(1, range.low);
        assertEquals(1, range.high);
    }

    static class MessageInterceptor extends Protocol {
        private Range range;

        public MessageInterceptor () {
        }

        public String getName () {
            return "MessageInterceptor";
        }

        public Object down(Event evt) {
            if(evt.getType() == Event.MSG) {
                Message msg=(Message)evt.getArg();
                NakAckHeader hdr=(NakAckHeader)msg.getHeader("NAKACK");
                if(hdr != null && hdr.type == NakAckHeader.XMIT_REQ) {
                    this.range=hdr.range;
                }
            }

            return super.down(evt);
        }

        public Range getRange ()
        {
            return this.range;
        }

        public void reset ()
        {
            this.range = null;
        }
    }

    public static Test suite() {
        return new TestSuite(NAKACK_REBROADCAST_Test.class);
    }

    public static void main(String[] args) {
        junit.textui.TestRunner.run(suite());
    }
}
TOP

Related Classes of org.jgroups.tests.NAKACK_REBROADCAST_Test$MessageInterceptor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.