Package reactor.net.tcp

Source Code of reactor.net.tcp.ZeroMQClientServerTests

package reactor.net.tcp;

import com.esotericsoftware.kryo.Kryo;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import reactor.core.Environment;
import reactor.io.Buffer;
import reactor.io.encoding.json.JacksonJsonCodec;
import reactor.io.encoding.kryo.KryoCodec;
import reactor.net.AbstractNetClientServerTest;
import reactor.net.zmq.tcp.ZeroMQ;
import reactor.net.zmq.tcp.ZeroMQTcpClient;
import reactor.net.zmq.tcp.ZeroMQTcpServer;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

import static org.junit.Assert.assertTrue;

/**
* @author Jon Brisbin
*/
@Ignore
public class ZeroMQClientServerTests extends AbstractNetClientServerTest {

  static Kryo                  KRYO;
  static KryoCodec<Data, Data> KRYO_CODEC;
  static ZeroMQ<Data>          ZMQ;

  CountDownLatch latch;

  @BeforeClass
  public static void classSetup() {
    KRYO = new Kryo();
    KRYO_CODEC = new KryoCodec<>(KRYO, false);
    ZMQ = new ZeroMQ<Data>(new Environment()).codec(KRYO_CODEC);
  }

  @AfterClass
  public static void classCleanup() {
    ZMQ.shutdown();
  }

  @Override
  public void setup() {
    super.setup();
    latch = new CountDownLatch(1);
  }

  @Test(timeout = 60000)
  public void clientSendsDataToServerUsingKryo() throws InterruptedException {
    assertTcpClientServerExchangedData(ZeroMQTcpServer.class,
                                       ZeroMQTcpClient.class,
                                       KRYO_CODEC,
                                       data,
                                       d -> d.equals(data));
  }

  @Test(timeout = 60000)
  public void clientSendsDataToServerUsingJson() throws InterruptedException {
    assertTcpClientServerExchangedData(ZeroMQTcpServer.class,
                                       ZeroMQTcpClient.class,
                                       new JacksonJsonCodec<>(),
                                       data,
                                       d -> d.equals(data));
  }

  @Test(timeout = 60000)
  public void clientSendsDataToServerUsingBuffers() throws InterruptedException {
    assertTcpClientServerExchangedData(ZeroMQTcpServer.class,
                                       ZeroMQTcpClient.class,
                                       Buffer.wrap("Hello World!"));
  }

  @Test(timeout = 60000)
  public void zmqRequestReply() throws InterruptedException {
    ZMQ.reply("tcp://*:" + getPort())
       .onSuccess(ch -> ch.consume(ch::send));

    ZMQ.request("tcp://127.0.0.1:" + getPort())
       .onSuccess(ch -> {
         ch.sendAndReceive(data)
             .onSuccess(data -> latch.countDown());
       });

    assertTrue("REQ/REP socket exchanged data", latch.await(60, TimeUnit.SECONDS));
  }

  @Test(timeout = 60000)
  public void zmqPushPull() throws InterruptedException {
    ZMQ.pull("tcp://*:" + getPort())
       .onSuccess(ch -> latch.countDown());

    ZMQ.push("tcp://127.0.0.1:" + getPort())
       .onSuccess(ch -> ch.send(data));

    assertTrue("PULL socket received data", latch.await(1, TimeUnit.SECONDS));
  }

  @Test(timeout = 60000)
  public void zmqRouterDealer() throws InterruptedException {
    ZMQ.router("tcp://*:" + getPort())
       .onSuccess(ch -> latch.countDown());

    ZMQ.dealer("tcp://127.0.0.1:" + getPort())
       .onSuccess(ch -> ch.send(data));

    assertTrue("ROUTER socket received data", latch.await(1, TimeUnit.SECONDS));
  }

  @Test(timeout = 60000)
  public void zmqInprocRouterDealer() throws InterruptedException {
    ZMQ.router("inproc://queue" + getPort())
       .onSuccess(ch -> {
         ch.consume(data -> {
           latch.countDown();
         });
       });

    // we have to sleep a couple cycles to let ZeroMQ get set up on inproc
    Thread.sleep(500);

    ZMQ.dealer("inproc://queue" + getPort())
       .onSuccess(ch -> {
         ch.sendAndForget(data);
       });

    assertTrue("ROUTER socket received inproc data", latch.await(1, TimeUnit.SECONDS));
  }

}
TOP

Related Classes of reactor.net.tcp.ZeroMQClientServerTests

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.