Skip to content

Commit

Permalink
unit test
Browse files Browse the repository at this point in the history
  • Loading branch information
seaswalker committed Jul 6, 2020
1 parent 6e3df5d commit d78a2d2
Show file tree
Hide file tree
Showing 6 changed files with 49 additions and 43 deletions.
3 changes: 1 addition & 2 deletions src/main/java/context/HandlerContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -154,8 +154,7 @@ public void fireChannelWrite(Object message) {
* @param message {@link Object} 数据
*/
public void writeFlush(Object message) {
HandlerContext context = new HandlerContext(inBoundHandlers,
outBoundHandlers, false);
HandlerContext context = new HandlerContext(inBoundHandlers, outBoundHandlers, false);
context.setChannel(channel);
context.setWorkerManager(workerManager);
workerManager.chooseOne(channel).submit(new ChannelWriteEvent(context, message));
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/handler/decoder/StringDecoder.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -17,7 +18,7 @@
*/
public class StringDecoder extends InBoundHandlerAdapter {

private static final Charset defaultCharSet = Charset.forName("UTF-8");
private static final Charset defaultCharSet = StandardCharsets.UTF_8;
private static final Logger logger = LoggerFactory.getLogger(StringDecoder.class);
private final Charset charset;

Expand Down
3 changes: 1 addition & 2 deletions src/main/java/selector/QueuedSelector.java
Original file line number Diff line number Diff line change
Expand Up @@ -231,8 +231,7 @@ private void processInActive(SelectionKey key) {
*
* @param buffer {@link ByteBuffer} 读取的数据
*/
private void processRead(ByteBuffer buffer, SelectionKey key)
throws IOException {
private void processRead(ByteBuffer buffer, SelectionKey key) {
HandlerContext context = checkAttachment(key.attachment(), (SocketChannel) key.channel());
workerManager.chooseOne(context.getChannel()).submit(new ChannelReadEvent(context, buffer));
}
Expand Down
71 changes: 35 additions & 36 deletions src/test/java/client/ClientTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,7 @@
import handler.decoder.DelimiterBasedDecoder;
import handler.decoder.LengthFieldBasedDecoder;
import handler.decoder.StringDecoder;
import handler.encoder.StringEncoder;
import org.junit.After;
import org.junit.Before;
import org.junit.Assert;
import org.junit.Test;

import org.slf4j.Logger;
Expand All @@ -35,89 +33,90 @@ public class ClientTest {
private static final Logger log = LoggerFactory.getLogger(ClientTest.class);

@Test
public void lengthFieldBasedDecoder() throws IOException, InterruptedException {
public void testLengthFieldBasedDecoder() throws IOException, InterruptedException {
Server server = new Server();
int port = (PORT++);
server.bind(port).setHandlers(new HandlerInitializer() {
@Override
public Handler[] init() {
return new Handler[] {new LengthFieldBasedDecoder(0, 4), new StringDecoder(), new SimpleInBoundHandler()};
return new Handler[] {
new LengthFieldBasedDecoder(0, 4),
new StringDecoder(),
new SimpleInBoundHandler()
};
}
}).start();

TimeUnit.SECONDS.sleep(2);
BufferedOutputStream bos = connectServer(port).bos;
Pair pair = connectServer(port);

BufferedOutputStream bos = pair.bos;
byte[] result = new byte[35];
System.arraycopy(DataUtils.int2Bytes(31), 0, result, 0, 4);
System.arraycopy("org.apache.commons.lang.builder".getBytes(), 0, result, 4, 31);
for (int i = 0; i < 6; i++) {
for (int i = 0; i < 2; i++) {
bos.write(result);
}
bos.flush();

BufferedReader br = new BufferedReader(new InputStreamReader(pair.socket.getInputStream()));
String line = br.readLine();

// readLine会吃掉换行符
Assert.assertEquals("org.apache.commons.lang.builder", line);

line = br.readLine();
Assert.assertEquals("org.apache.commons.lang.builder", line);

TimeUnit.SECONDS.sleep(6);

bos.close();
br.close();
server.close();
}

@Test
public void delimiterBasedDecoder() throws InterruptedException, IOException {
public void testDelimiterBasedDecoder() throws InterruptedException, IOException {
Server server = new Server();
int port = (PORT++);
server.bind(port).setHandlers(new HandlerInitializer() {
@Override
public Handler[] init() {
return new Handler[] {new DelimiterBasedDecoder('a'), new StringDecoder(), new SimpleInBoundHandler()};
return new Handler[] {new DelimiterBasedDecoder('a'), new StringDecoder(), new ResponseHandler()};
}
}).start();

TimeUnit.SECONDS.sleep(2);
BufferedOutputStream bos = connectServer(port).bos;
Pair pair = connectServer(port);

byte[] data = "This is a beautiful world.\n".getBytes();
for (int i = 0; i < 12; i++) {
bos.write(data);
}
BufferedOutputStream bos = pair.bos;
byte[] data = "This isadoga".getBytes();
bos.write(data);
bos.flush();

TimeUnit.SECONDS.sleep(2);

bos.close();
server.close();
}

@Test
public void response() throws IOException, InterruptedException {
Server server = new Server();
int port = (PORT++);
server.bind(port).setHandlers(new StringDecoder(), new ResponseHandler(), new StringEncoder()).start();

TimeUnit.SECONDS.sleep(2);

Pair pair = connectServer(port);
BufferedReader br = new BufferedReader(new InputStreamReader(pair.socket.getInputStream()));
pair.bos.write("skywalker".getBytes());
pair.bos.flush();
String line = br.readLine();
Assert.assertEquals("This is", line);

TimeUnit.SECONDS.sleep(2);
line = br.readLine();
Assert.assertEquals("dog", line);

System.out.println(br.readLine());
TimeUnit.SECONDS.sleep(2);

bos.close();
server.close();
br.close();
}

private Pair connectServer(int port) throws IOException {
Socket socket = new Socket();
log.info("尝试连接: {}端口.", port);
socket.connect(new InetSocketAddress("localhost", port));
socket.connect(new InetSocketAddress("localhost", port), 1000);
BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
return new Pair(bos, socket);
}

private class Pair {
private static class Pair {

BufferedOutputStream bos;
Socket socket;

Expand Down
9 changes: 8 additions & 1 deletion src/test/java/handler/ResponseHandler.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package handler;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import context.HandlerContext;

/**
Expand All @@ -10,9 +13,13 @@
*/
public class ResponseHandler extends InBoundHandlerAdapter {

private static final Logger log = LoggerFactory.getLogger(ResponseHandler.class);

@Override
public void channelRead(Object message, HandlerContext context) {
context.writeFlush("Hello: " + (String) message + "!\n");
String messageStr = (String) message, response = (messageStr + "\n");
log.info("收到请求详细: {}, 回复响应: {}.", message, response);
context.writeFlush(response);
}

}
3 changes: 2 additions & 1 deletion src/test/java/handler/SimpleInBoundHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ public void channelInActive(HandlerContext context) {

@Override
public void channelRead(Object message, HandlerContext context) {
System.out.println(message.toString());
// 去掉前面的4字节
context.writeFlush(((String) message).substring(4) + "\n");
}

}

0 comments on commit d78a2d2

Please sign in to comment.