/**
* Copyright (C) 2009-2013 Barchart, Inc. <http://www.barchart.com/>
*
* All rights reserved. Licensed under the OSI BSD License.
*
* http://www.opensource.org/licenses/bsd-license.php
*/
package com.barchart.udt.net;
import static org.junit.Assert.*;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.Arrays;
import java.util.Random;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import util.StopWatch;
import util.TestAny;
import util.UnitHelp;
import com.barchart.udt.SocketUDT;
import com.barchart.udt.TypeUDT;
public class TestStreamBase extends TestAny {
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
final ServiceFactory factory1 = new ServiceFactory() {
@Override
public StreamService newService(final SocketUDT connectorSocket)
throws Exception {
return new StreamService(connectorSocket) {
@Override
public void run() {
while (true) {
try {
final int value = streamIn.read();
streamOut.write(value);
} catch (final IOException e) {
log.error("server; {}", e.getMessage());
break;
}
}
}
};
}
};
@Test
public void testStream11() throws Exception {
final InetSocketAddress serverAddress = UnitHelp.localSocketAddress();
final StreamServer server = new StreamServer(TypeUDT.DATAGRAM,
serverAddress, factory1);
final StreamClient client = new StreamClient(TypeUDT.DATAGRAM,
serverAddress) {
@Override
public void run() {
try {
final int loop = 100;
final StopWatch timer = new StopWatch();
timer.start();
for (int k = 0; k < loop; k++) {
for (int index = Byte.MIN_VALUE; index <= Byte.MAX_VALUE; index++) {
streamOut.write(index);
}
for (int index = Byte.MIN_VALUE; index <= Byte.MAX_VALUE; index++) {
final int value = streamIn.read();
assertEquals(value, index);
}
}
timer.stop();
log.info("timer : {}", timer.nanoString());
synchronized (this) {
this.notifyAll();
}
} catch (final Exception e) {
log.error("client; {}", e.getMessage());
}
}
};
server.showtime();
client.showtime();
synchronized (client) {
client.wait();
}
client.shutdown();
server.shutdown();
}
// #########################################################
final ServiceFactory factory2 = new ServiceFactory() {
@Override
public StreamService newService(final SocketUDT connectorSocket)
throws Exception {
return new StreamService(connectorSocket) {
@Override
public void run() {
final int size = 1234;
final byte[] array = new byte[size];
while (true) {
try {
final int count = streamIn.read(array);
streamOut.write(array, 0, count);
} catch (final IOException e) {
log.error("server; {}", e.getMessage());
break;
}
}
}
};
}
};
@Test
public void testStream22() throws Exception {
final InetSocketAddress serverAddress = UnitHelp.localSocketAddress();
final StreamServer server = new StreamServer(TypeUDT.DATAGRAM,
serverAddress, factory2);
final StreamClient client = new StreamClient(TypeUDT.DATAGRAM,
serverAddress) {
@Override
public void run() {
final Random random = new Random();
final int loop = 10000;
final int size = 1000;
final byte[] arrayOut = new byte[size];
final byte[] arrayIn = new byte[size];
try {
final StopWatch timer = new StopWatch();
timer.start();
for (int k = 0; k < loop; k++) {
random.nextBytes(arrayOut);
streamOut.write(arrayOut);
final int count = streamIn.read(arrayIn);
assertEquals(count, size);
assertTrue(Arrays.equals(arrayIn, arrayOut));
}
timer.stop();
log.info("timer : {}", timer.nanoString());
synchronized (this) {
this.notifyAll();
}
} catch (final Exception e) {
log.error("client; {}", e.getMessage());
}
}
};
server.showtime();
client.showtime();
synchronized (client) {
client.wait();
}
client.shutdown();
server.shutdown();
}
// #########################################################
// @Test
public void testStream12() throws Exception {
final InetSocketAddress serverAddress = UnitHelp.localSocketAddress();
final StreamServer server = new StreamServer(TypeUDT.STREAM,
serverAddress, factory1);
final StreamClient client = new StreamClient(TypeUDT.STREAM,
serverAddress) {
@Override
public void run() {
final Random random = new Random();
final int loop = 3;
final int size = 100;
final byte[] arrayOut = new byte[size];
final byte[] arrayIn = new byte[size];
try {
final StopWatch timer = new StopWatch();
timer.start();
for (int k = 0; k < loop; k++) {
random.nextBytes(arrayOut);
streamOut.write(arrayOut);
final int count = streamIn.read(arrayIn);
assertEquals(count, size);
assertTrue(Arrays.equals(arrayIn, arrayOut));
}
timer.stop();
log.info("timer : {}", timer.nanoString());
synchronized (this) {
this.notifyAll();
}
} catch (final Exception e) {
log.error("client; {}", e.getMessage());
}
}
};
server.showtime();
client.showtime();
synchronized (client) {
client.wait();
}
client.shutdown();
server.shutdown();
}
}