Home | History | Annotate | Download | only in echo
      1 package fi.iki.elonen.samples.echo;
      2 
      3 /*
      4  * #%L
      5  * NanoHttpd-Websocket
      6  * %%
      7  * Copyright (C) 2012 - 2015 nanohttpd
      8  * %%
      9  * Redistribution and use in source and binary forms, with or without modification,
     10  * are permitted provided that the following conditions are met:
     11  *
     12  * 1. Redistributions of source code must retain the above copyright notice, this
     13  *    list of conditions and the following disclaimer.
     14  *
     15  * 2. Redistributions in binary form must reproduce the above copyright notice,
     16  *    this list of conditions and the following disclaimer in the documentation
     17  *    and/or other materials provided with the distribution.
     18  *
     19  * 3. Neither the name of the nanohttpd nor the names of its contributors
     20  *    may be used to endorse or promote products derived from this software without
     21  *    specific prior written permission.
     22  *
     23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
     24  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     25  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     26  * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
     27  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
     28  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     29  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
     30  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
     31  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
     32  * OF THE POSSIBILITY OF SUCH DAMAGE.
     33  * #L%
     34  */
     35 
     36 import java.net.URI;
     37 import java.util.concurrent.TimeUnit;
     38 
     39 import org.eclipse.jetty.websocket.client.ClientUpgradeRequest;
     40 import org.eclipse.jetty.websocket.client.WebSocketClient;
     41 import org.junit.AfterClass;
     42 import org.junit.Assert;
     43 import org.junit.BeforeClass;
     44 import org.junit.Test;
     45 
     46 import fi.iki.elonen.NanoWSD;
     47 
     48 public class EchoWebSocketsTest {
     49 
     50     private static NanoWSD server;
     51 
     52     @BeforeClass
     53     public static void setUp() throws Exception {
     54         EchoWebSocketsTest.server = new DebugWebSocketServer(9191, true);
     55         EchoWebSocketsTest.server.start();
     56     }
     57 
     58     @AfterClass
     59     public static void tearDown() throws Exception {
     60         EchoWebSocketsTest.server.stop();
     61     }
     62 
     63     @Test
     64     public void testWebsocketClient() throws Exception {
     65         String destUri = "ws://localhost:9191";
     66 
     67         WebSocketClient client = new WebSocketClient();
     68         SimpleEchoSocket socket = new SimpleEchoSocket();
     69         socket.getToSendMessages().add("Hello");
     70         socket.getToSendMessages().add("Thanks for the conversation.");
     71         socket.getToSendMessages().add(createString(31000));
     72         socket.getToSendMessages().add(createString(65400));
     73         try {
     74             client.start();
     75             URI echoUri = new URI(destUri);
     76             ClientUpgradeRequest request = new ClientUpgradeRequest();
     77             client.connect(socket, echoUri, request);
     78             System.out.printf("Connecting to : %s%n", echoUri);
     79             socket.awaitClose(5, TimeUnit.SECONDS);
     80         } catch (Throwable t) {
     81             t.printStackTrace();
     82         } finally {
     83             try {
     84                 client.stop();
     85             } catch (Exception e) {
     86                 e.printStackTrace();
     87             }
     88         }
     89         Assert.assertEquals(4, socket.getReceivedMessages().size());
     90         Assert.assertEquals("Hello", socket.getReceivedMessages().get(0));
     91         Assert.assertEquals("Thanks for the conversation.", socket.getReceivedMessages().get(1));
     92 
     93     }
     94 
     95     private String createString(int i) {
     96         StringBuilder builder = new StringBuilder();
     97         while (builder.length() < i) {
     98             builder.append("A very long text.");
     99         }
    100         return builder.toString();
    101     }
    102 }
    103