package com.alibaba.doris.client.net.protocol.text;
import junit.framework.TestCase;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBuffers;
import com.alibaba.doris.client.net.command.CheckCommand;
import com.alibaba.doris.client.net.command.CheckQueueCommand;
import com.alibaba.doris.client.net.command.result.CheckResult;
import com.alibaba.doris.client.net.protocol.ProtocolParser;
/**
* @author ajun
*/
public class CheckQueueProtocolParserTest extends TestCase {
public void testEncode() {
ChannelBuffer buffer = ChannelBuffers.buffer(1024);
CheckQueueCommand cmd = new CheckQueueCommand();
ProtocolParser parser = cmd.getProtocolParser();
parser.encode(cmd, buffer);
for (byte b : CHECK_REQUEST_BYTES) {
assertEquals(b, buffer.readByte());
}
for (byte b : CHECK_REQUEST_BYTES) {
assertEquals(b, buffer.readByte());
}
}
public void testDecode() {
ChannelBuffer buffer = ChannelBuffers.buffer(1024);
buffer.writeBytes(CHECK_RETURN_IVALID_BYTES_WITH_INVALID_FULL);
buffer.writeBytes(CHECK_RETURN_TRUE_BYTES);
buffer.writeBytes(CHECK_RETURN_TRUE_BYTES);
CheckQueueCommand cmd = new CheckQueueCommand();
ProtocolParser parser = cmd.getProtocolParser();
assertTrue(parser.decode(cmd, buffer));
CheckResult result = cmd.getResult();
assertNotNull(result);
assertTrue(result.isSuccess());
// 断言所有无效的数据全部跳过;队列中的数据清理干净;
assertTrue(buffer.readableBytes() <= 0);
}
public void testDecodeTrue() {
ChannelBuffer buffer = ChannelBuffers.buffer(1024);
buffer.writeBytes(CHECK_RETURN_TRUE_BYTES);
buffer.writeBytes(CHECK_RETURN_TRUE_BYTES);
CheckQueueCommand cmd = new CheckQueueCommand();
ProtocolParser parser = cmd.getProtocolParser();
assertTrue(parser.decode(cmd, buffer));
CheckResult result = cmd.getResult();
assertNotNull(result);
assertTrue(result.isSuccess());
}
public void testDecodeTrue2() {
ChannelBuffer buffer = ChannelBuffers.buffer(1024);
buffer.writeBytes(CHECK_RETURN_TRUE_BYTES);
buffer.writeBytes(CHECK_RETURN_TRUE_BYTES);
// 多插入一条,命令应该正常返回,并且不能多读队列中的数据;
buffer.writeBytes(CHECK_RETURN_TRUE_BYTES);
CheckQueueCommand cmd = new CheckQueueCommand();
ProtocolParser parser = cmd.getProtocolParser();
assertTrue(parser.decode(cmd, buffer));
CheckResult result = cmd.getResult();
assertNotNull(result);
assertTrue(result.isSuccess());
// 断言队列中应该还剩余一个CHECK_RETURN_TRUE_BYTES 结果;
CheckProtocolParser cp = new CheckProtocolParser();
assertTrue(cp.decode(new CheckCommand(null), buffer));
}
public void testDecodeFalse() {
ChannelBuffer buffer = ChannelBuffers.buffer(1024);
buffer.writeBytes(CHECK_RETURN_FALSE_BYTES);
buffer.writeBytes(CHECK_RETURN_FALSE_BYTES);
CheckQueueCommand cmd = new CheckQueueCommand();
ProtocolParser parser = cmd.getProtocolParser();
assertTrue(parser.decode(cmd, buffer));
CheckResult result = cmd.getResult();
assertNotNull(result);
assertTrue(result.isSuccess());
assertNotNull(result.getMessage());
}
public void testDecodeFalse2() {
ChannelBuffer buffer = ChannelBuffers.buffer(1024);
buffer.writeBytes(CHECK_RETURN_FALSE_BYTES);
CheckQueueCommand cmd = new CheckQueueCommand();
ProtocolParser parser = cmd.getProtocolParser();
assertFalse(parser.decode(cmd, buffer));
}
public void testDecodeInvalidResult() {
ChannelBuffer buffer = ChannelBuffers.buffer(1024);
buffer.writeBytes(CHECK_RETURN_FALSE_BYTES);
CheckQueueCommand cmd = new CheckQueueCommand();
ProtocolParser parser = cmd.getProtocolParser();
assertFalse(parser.decode(cmd, buffer));
}
public void testDecodeFalseTrue() {
ChannelBuffer buffer = ChannelBuffers.buffer(1024);
buffer.writeBytes(CHECK_RETURN_TRUE_BYTES, 0, CHECK_RETURN_TRUE_BYTES.length - 2);
CheckQueueCommand cmd = new CheckQueueCommand();
ProtocolParser parser = cmd.getProtocolParser();
assertFalse(parser.decode(cmd, buffer));
buffer.writeBytes(CHECK_RETURN_TRUE_BYTES, CHECK_RETURN_TRUE_BYTES.length - 2, 2);
assertFalse(parser.decode(cmd, buffer));
buffer.writeBytes(CHECK_RETURN_TRUE_BYTES, 0, CHECK_RETURN_TRUE_BYTES.length - 2);
assertFalse(parser.decode(cmd, buffer));
buffer.writeBytes(CHECK_RETURN_TRUE_BYTES, CHECK_RETURN_TRUE_BYTES.length - 2, 2);
assertTrue(parser.decode(cmd, buffer));
CheckResult result = cmd.getResult();
assertNotNull(result);
assertTrue(result.isSuccess());
}
private static byte[] CHECK_RETURN_TRUE_BYTES = new byte[] { 't', 'r', 'u', 'e', '\r', '\n' };
private static byte[] CHECK_RETURN_FALSE_BYTES = new byte[] { 'f', 'a', 'l', 's', 'e', ' ', 's',
't', 'o', 'r', 'a', 'g', 'e', '_', 'm', 'o', 'd', 'u', 'l', 'e', '_', 'e', 'r', 'r', 'o', 'r', '\r', '\n' };
private static byte[] CHECK_RETURN_IVALID_BYTES_WITH_INVALID_FULL = new byte[] { 'V', 'A', 'L', 'U', 'E', ' ', '1',
'0', '0', '0', ':', 'k', 'e', 'y', ' ', '0', ' ', '1', '0', ' ', '1', '0', '0', '0', ' ', '1', '0', '\r',
'\n', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '\r', '\n', 'E', 'N', 'D', '\r', '\n' };
private static byte[] CHECK_REQUEST_BYTES = new byte[] { 'c', 'h', 'e', 'c', 'k', '\r',
'\n' };
}