Package org.apache.geronimo.remoting.transport

Source Code of org.apache.geronimo.remoting.transport.AsyncTransportTest$MockRouter

/**
*
* Copyright 2003-2004 The Apache Software Foundation
*
*  Licensed under the Apache License, Version 2.0 (the "License");
*  you may not use this file except in compliance with the License.
*  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
*  distributed under the License is distributed on an "AS IS" BASIS,
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*  See the License for the specific language governing permissions and
*  limitations under the License.
*/

package org.apache.geronimo.remoting.transport;

import java.net.URI;

import junit.framework.TestCase;

import org.apache.geronimo.remoting.MarshalledObject;
import org.apache.geronimo.remoting.router.Router;

import EDU.oswego.cs.dl.util.concurrent.Semaphore;

/**
* Unit test for the Async Remoting Transport
*
* @version $Revision: 1.3 $ $Date: 2004/03/10 09:59:21 $
*/

public class AsyncTransportTest extends TestCase {

    TransportServer server;
    TransportClient client;
    URI connectURI;
    MockRouter mockRouter;

    class MockRouter implements Router {
       
        Semaphore requestCounter=new Semaphore(0);
        Semaphore datagramCounter=new Semaphore(0);

        public Msg sendRequest(URI to, Msg request) throws TransportException {
            try {
                requestCounter.release();

                Msg response = request.createMsg();
                response.pushMarshaledObject(request.popMarshaledObject());
                return response;

            } catch (Exception e) {
                throw new TransportException(e.getMessage());
            }
        }

        /**
         * @see org.apache.geronimo.remoting.transport.Router#sendDatagram(java.net.URI, org.apache.geronimo.remoting.transport.Msg)
         */
        public void sendDatagram(URI to, Msg request) throws TransportException {
            datagramCounter.release();
        }
    }

    /**
     * @see junit.framework.TestCase#setUp()
     */
    protected void setUp() throws Exception {
        System.out.println("================================================");
        URI bindURI = new URI("async://0.0.0.0:0");
        TransportFactory tf = TransportFactory.getTransportFactory(bindURI);
        server = tf.createSever();
        mockRouter = new MockRouter();
        server.bind(bindURI,mockRouter);
        connectURI = server.getClientConnectURI();
        server.start();
        client = tf.createClient();
    }

    /**
     * @see junit.framework.TestCase#tearDown()
     */
    protected void tearDown() throws Exception {
        server.dispose();
    }

    public void testRequestMessage() throws Exception {
        String text = "Hello World";
       
        MarshalledObject object = client.createMarshalledObject();
        object.set(text);
        Msg msg = client.createMsg();
        msg.pushMarshaledObject(object);
       
        Msg response = client.sendRequest(connectURI,msg);
        Object rc = response.popMarshaledObject().get();
       
        assertEquals(rc,text);
        assertTrue(mockRouter.requestCounter.permits()==1);
        assertTrue(mockRouter.datagramCounter.permits()==0);
    }

    public void testDatagramMessage() throws Exception {

        String text = "Hello World";
       
        MarshalledObject object = client.createMarshalledObject();
        object.set(text);
        Msg msg = client.createMsg();
        msg.pushMarshaledObject(object);
       
        client.sendDatagram(connectURI,msg);       
        assertTrue(mockRouter.datagramCounter.attempt(10000));
    }
}
TOP

Related Classes of org.apache.geronimo.remoting.transport.AsyncTransportTest$MockRouter

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.