package com.alibaba.doris.dataserver.store.log.serialize.impl;
import java.nio.ByteBuffer;
import java.util.Iterator;
import junit.framework.TestCase;
import com.alibaba.doris.common.data.Key;
import com.alibaba.doris.common.data.Value;
import com.alibaba.doris.common.data.impl.KeyImpl;
import com.alibaba.doris.common.data.impl.ValueImpl;
import com.alibaba.doris.common.data.util.ByteUtils;
import com.alibaba.doris.dataserver.store.log.entry.ClumpHeadEntry;
import com.alibaba.doris.dataserver.store.log.entry.SetLogEntry;
/**
* @author ajun Email:jack.yuj@alibaba-inc.com
*/
public class DefaultLogSerializerTest extends TestCase {
public void testReadAndWriteLogEntry() {
DefaultLogSerializer serializer = new DefaultLogSerializer();
String valueString = "test value";
Key key = new KeyImpl(100, "key", 1);
Value value = new ValueImpl(ByteUtils.stringToByte(valueString), System.currentTimeMillis());
value.setFlag((short) 10);
SetLogEntry logEntry = new SetLogEntry(key, value);
ByteBuffer buffer = ByteBuffer.allocate(1024);
serializer.writeLogEntry(buffer, logEntry);
assertTrue(buffer.position() > 0);
buffer.flip();
SetLogEntry newEntry = (SetLogEntry) serializer.readLogEntry(buffer);
assertNotNull(newEntry);
Key newKey = newEntry.getKey();
assertNotNull(newKey);
assertEquals(key.getPhysicalKey(), newKey.getPhysicalKey());
Value newValue = newEntry.getValue();
assertNotNull(newValue);
assertEquals(valueString, ByteUtils.byteToString(newValue.getValueBytes()));
assertEquals(value.getFlag(), newValue.getFlag());
assertEquals(value.getTimestamp(), newValue.getTimestamp());
}
public void testReadAndWriteHead() {
DefaultLogSerializer serializer = new DefaultLogSerializer();
ClumpHeadEntry head = new ClumpHeadEntry();
head.setLogFileVersion(10);
int vnodeNum = 10;
for (int i = 0; i < vnodeNum; i++) {
head.addVnode(i);
}
ByteBuffer buffer = ByteBuffer.allocate(64);
serializer.writeHead(buffer, head);
assertTrue(buffer.position() > 0);
buffer.flip();
ClumpHeadEntry newHead = serializer.readHead(buffer);
assertNotNull(newHead);
assertEquals(vnodeNum, newHead.getVnodeNum());
for (int i = 0; i < vnodeNum; i++) {
boolean isContains = false;
Iterator<Integer> vnodeItr = newHead.getVnodes();
while (vnodeItr.hasNext()) {
if (i == vnodeItr.next().intValue()) {
isContains = true;
}
}
assertTrue(isContains);
}
}
}