EMMA Coverage Report (generated Sat Sep 03 11:42:34 KST 2005)
[all classes][org.apache.mina.examples.echoserver]

COVERAGE SUMMARY FOR SOURCE FILE [ConnectorTest.java]

nameclass, %method, %block, %line, %
ConnectorTest.java67%  (2/3)85%  (11/13)86%  (287/332)86%  (74.6/87)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class ConnectorTest100% (1/1)89%  (8/9)86%  (249/291)86%  (63.6/74)
main (String []): void 0%   (0/1)0%   (0/10)0%   (0/2)
testConnector (IoConnector): void 100% (1/1)52%  (30/58)53%  (8/15)
testConnector (IoConnector, SocketAddress): void 100% (1/1)97%  (124/128)95%  (29.6/31)
ConnectorTest (): void 100% (1/1)100% (3/3)100% (2/2)
fillWriteBuffer (ByteBuffer, int): void 100% (1/1)100% (11/11)100% (4/4)
setUp (): void 100% (1/1)100% (27/27)100% (5/5)
testTCP (): void 100% (1/1)100% (8/8)100% (3/3)
testTCPWithSSL (): void 100% (1/1)100% (38/38)100% (9/9)
testUDP (): void 100% (1/1)100% (8/8)100% (3/3)
     
class ConnectorTest$10%   (0/1)100% (0/0)100% (0/0)100% (0/0)
     
class ConnectorTest$EchoConnectorHandler100% (1/1)75%  (3/4)93%  (38/41)85%  (11/13)
exceptionCaught (IoSession, Throwable): void 0%   (0/1)0%   (0/3)0%   (0/2)
ConnectorTest$EchoConnectorHandler (): void 100% (1/1)100% (10/10)100% (3/3)
dataRead (IoSession, ByteBuffer): void 100% (1/1)100% (6/6)100% (2/2)
dataWritten (IoSession, Object): void 100% (1/1)100% (22/22)100% (6/6)

1/*
2 *   @(#) $Id: ConnectorTest.java 264677 2005-08-30 02:44:35Z trustin $
3 *
4 *   Copyright 2004 The Apache Software Foundation
5 *
6 *   Licensed under the Apache License, Version 2.0 (the "License");
7 *   you may not use this file except in compliance with the License.
8 *   You may obtain a copy of the License at
9 *
10 *       http://www.apache.org/licenses/LICENSE-2.0
11 *
12 *   Unless required by applicable law or agreed to in writing, software
13 *   distributed under the License is distributed on an "AS IS" BASIS,
14 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 *   See the License for the specific language governing permissions and
16 *   limitations under the License.
17 *
18 */
19package org.apache.mina.examples.echoserver;
20 
21import java.net.InetAddress;
22import java.net.InetSocketAddress;
23import java.net.SocketAddress;
24 
25import junit.framework.Assert;
26 
27import org.apache.mina.common.ByteBuffer;
28import org.apache.mina.common.TransportType;
29import org.apache.mina.examples.echoserver.ssl.BogusSSLContextFactory;
30import org.apache.mina.io.IoAcceptor;
31import org.apache.mina.io.IoConnector;
32import org.apache.mina.io.IoHandlerAdapter;
33import org.apache.mina.io.IoSession;
34import org.apache.mina.io.datagram.DatagramConnector;
35import org.apache.mina.io.filter.SSLFilter;
36import org.apache.mina.io.socket.SocketConnector;
37import org.apache.mina.util.AvailablePortFinder;
38 
39/**
40 * Tests echo server example.
41 * 
42 * @author Trustin Lee (trustin@apache.org)
43 * @version $Rev: 264677 $, $Date: 2005-08-30 11:44:35 +0900 $
44 */
45public class ConnectorTest extends AbstractTest
46{
47    private int clientPort;
48    
49    public ConnectorTest()
50    {
51    }
52 
53    public void setUp() throws Exception
54    {
55        super.setUp();
56        clientPort = port;
57        clientPort = AvailablePortFinder.getNextAvailable( clientPort + 1 );
58        System.out.println( "Using port " + clientPort + " as local address" );
59    }
60    
61    public void testTCP() throws Exception
62    {
63        IoConnector connector = new SocketConnector();
64        testConnector( connector );
65    }
66    
67    /**
68     * Client-side SSL doesn't work for now.
69     */
70    public void testTCPWithSSL() throws Exception
71    {
72        // Add an SSL filter to acceptor
73        SSLFilter acceptorSSLFilter =
74            new SSLFilter( BogusSSLContextFactory.getInstance( true ) );
75        IoAcceptor acceptor = registry.getIoAcceptor( TransportType.SOCKET );
76        acceptor.getFilterChain().addLast( "SSL", acceptorSSLFilter );
77 
78        // Create a connector
79        IoConnector connector = new SocketConnector();
80        
81        // Add an SSL filter to connector
82        SSLFilter connectorSSLFilter =
83            new SSLFilter( BogusSSLContextFactory.getInstance( false ) );
84        connectorSSLFilter.setUseClientMode( true ); // set client mode
85        connector.getFilterChain().addLast( "SSL", connectorSSLFilter );
86 
87        testConnector( connector );
88    }
89    
90    public void testUDP() throws Exception
91    {
92        IoConnector connector = new DatagramConnector();
93        testConnector( connector );
94    }
95    
96    private void testConnector( IoConnector connector ) throws Exception
97    {
98        InetSocketAddress localAddress = new InetSocketAddress( clientPort );
99 
100        System.out.println("* Without localAddress and initializer");
101        testConnector( connector, null );
102        
103        System.out.println("* Without localAddress and with initializer");
104        testConnector( connector, null );
105 
106        // Tests below fail in Windows platform.
107        if( System.getProperty("os.name").toLowerCase().indexOf( "windows" ) >= 0 )
108        {
109            // skip further tests
110            System.out.println( "** Skipping some tests that fails in Windows platform." );
111            return;
112        }
113        
114        System.out.println("* With localAddress and without initializer");
115        testConnector( connector, localAddress );
116        
117        // It takes some time for local address to be cleared by OS,
118        // so let's just get a new one rather than waiting for it.
119        clientPort = AvailablePortFinder.getNextAvailable( clientPort + 1 );
120        localAddress = new InetSocketAddress( clientPort );
121 
122        System.out.println("* With localAddress and initializer");
123        testConnector( connector, localAddress );
124    }
125    
126    private void testConnector( IoConnector connector, SocketAddress localAddress ) throws Exception
127    {
128        EchoConnectorHandler handler = new EchoConnectorHandler();
129        ByteBuffer readBuf = handler.readBuf;
130        IoSession session = connector.connect(
131                new InetSocketAddress( InetAddress.getLocalHost(), port ),
132                localAddress,
133                handler );
134        
135        for( int i = 0; i < 10; i ++ )
136        {
137            ByteBuffer buf = ByteBuffer.allocate( 16 );
138            buf.limit( 16 );
139            fillWriteBuffer( buf, i );
140            buf.flip();
141 
142            Object marker;
143            if( ( i & 1 ) == 0 )
144            {
145                marker = new Integer( i );
146            }
147            else
148            {
149                marker = null;
150            }
151 
152            session.write( buf, marker );
153 
154            // This will align message arrival order in UDP
155            for( int j = 0; j < 30; j ++ )
156            {
157                if( readBuf.position() == ( i + 1 ) * 16 )
158                {
159                    break;
160                }
161                Thread.sleep( 10 );
162            }
163        }
164        
165        for( int i = 0; i < 30; i++ ) {
166            if( readBuf.position() == 160 )
167            {
168                break;
169            }
170            else
171            {
172                Thread.sleep( 100 );
173            }
174        }
175 
176        session.close( true );
177        
178        Assert.assertEquals( 160, readBuf.position() );
179        readBuf.flip();
180        
181        ByteBuffer expectedBuf = ByteBuffer.allocate( 160 );
182        for( int i = 0; i < 10; i ++ ) {
183            expectedBuf.limit( ( i + 1 ) * 16 );
184            fillWriteBuffer( expectedBuf, i );
185        }
186        expectedBuf.position( 0 );
187        assertEquals(expectedBuf, readBuf);
188    }
189 
190    private void fillWriteBuffer( ByteBuffer writeBuf, int i )
191    {
192        while( writeBuf.remaining() > 0 )
193        {
194            writeBuf.put( ( byte ) ( i ++ ) );
195        }
196    }
197 
198    public static void main( String[] args )
199    {
200        junit.textui.TestRunner.run( ConnectorTest.class );
201    }
202    
203    private static class EchoConnectorHandler extends IoHandlerAdapter
204    {
205        private ByteBuffer readBuf = ByteBuffer.allocate( 1024 );
206        private int counter = 0;
207 
208        public void dataRead( IoSession session, ByteBuffer buf )
209        {
210            readBuf.put( buf );
211        }
212        
213        public void dataWritten( IoSession session, Object marker )
214        {
215            if( ( counter & 1 ) == 0 )
216            {
217                Assert.assertEquals( new Integer( counter ), marker );
218            }
219            else
220            {
221                Assert.assertNull( marker );
222            }
223            
224            counter ++;
225        }
226 
227        public void exceptionCaught( IoSession session, Throwable cause )
228        {
229            cause.printStackTrace();
230        }
231    }
232}

[all classes][org.apache.mina.examples.echoserver]
EMMA 2.0.4217 (C) Vladimir Roubtsov