package com.alibaba.doris.dataserver.action.parser;
import junit.framework.TestCase;
import com.alibaba.doris.dataserver.action.data.ActionData;
import com.alibaba.doris.dataserver.action.data.BaseActionData;
import com.alibaba.doris.dataserver.action.data.BaseActionType;
import com.alibaba.doris.dataserver.action.data.CommonActionData;
import com.alibaba.doris.dataserver.net.ByteBufferWrapper;
/**
* @author ajun Email:jack.yuj@alibaba-inc.com
*/
public class BaseActionParserTest extends TestCase {
public void testParseNextField() {
BaseActionParser parser = getBaseActionParser();
byte[] header = new byte[] { 'f', 'i', 'e', 'l', 'd', '1', ' ', 'f', 'i', 'e', 'l', 'd', '2', '\r', '\n' };
int[] startPos = new int[] { 0 };
String f1 = parser.parseNextField(header, startPos);
String f2 = parser.parseNextField(header, startPos);
assertEquals("field1", f1);
assertEquals("field2", f2);
header = new byte[] { '\r', '\n' };
startPos = new int[] { 0 };
String f3 = parser.parseNextField(header, startPos);
assertNull(f3);
header = new byte[] { ' ' };
startPos = new int[] { 0 };
f3 = parser.parseNextField(header, startPos);
assertNull(f3);
header = new byte[] {};
startPos = new int[] { 0 };
String f4 = parser.parseNextField(header, startPos);
assertNull(f4);
}
public void testReadRouteVersion() {
BaseActionParser parser = getBaseActionParser();
BaseActionData command = new CommonActionData(BaseActionType.GET);
byte[] header = new byte[] { 'f', 'i', 'e', 'l', 'd', '1', ' ', ' ', ' ', '\r', '\n' };
int[] startPos = new int[] { 0 };
String f1 = parser.parseNextField(header, startPos);
assertEquals("field1", f1);
parser.readRouteVersion(command, header, startPos);
assertEquals(BaseActionData.INVALID_ROUTE_VERSION, command.getRouteVersion());
header = new byte[] { 'f', 'i', 'e', 'l', 'd', '1', '\r', '\n' };
startPos = new int[] { 0 };
f1 = parser.parseNextField(header, startPos);
assertEquals("field1", f1);
parser.readRouteVersion(command, header, startPos);
assertEquals(BaseActionData.INVALID_ROUTE_VERSION, command.getRouteVersion());
header = new byte[] { 'f', 'i', 'e', 'l', 'd', '1', ' ', '1', '\r', '\n' };
startPos = new int[] { 0 };
f1 = parser.parseNextField(header, startPos);
assertEquals("field1", f1);
parser.readRouteVersion(command, header, startPos);
assertEquals(1, command.getRouteVersion());
header = new byte[] { 'f', 'i', 'e', 'l', 'd', '1', ' ', '1', ' ', '\r', '\n' };
startPos = new int[] { 0 };
f1 = parser.parseNextField(header, startPos);
assertEquals("field1", f1);
parser.readRouteVersion(command, header, startPos);
assertEquals(1, command.getRouteVersion());
}
public void testReadBaseActionData() {
BaseActionParser parser = getBaseActionParser();
byte[] header = new byte[] { '1', '2', '3', '4', ':', 'k', 'e', 'y', '1', ' ', '1', '0', '0', '0', ' ', '1',
' ' };
int[] pos = new int[] { 0 };
CommonActionData actionData = new CommonActionData(BaseActionType.GET);
parser.readKeyBytes(actionData, header, pos);
parser.readRouteVersion(actionData, header, pos);
parser.readVnode(actionData, header, pos);
assertNotNull(actionData.getKeyBytes());
assertEquals(9, actionData.getKeyBytes().length);
assertEquals(1000, actionData.getRouteVersion());
assertEquals(1, actionData.getVnode());
}
private BaseActionParser getBaseActionParser() {
return new BaseActionParser() {
public ActionData readHead(byte[] header, int startPos) {
return null;
}
public void writeHead(ByteBufferWrapper buffer, ActionData actionData) {
}
};
}
}