package com.xiaomi.infra.galaxy.api.io;
import com.xiaomi.infra.galaxy.io.thrift.Compression;
import com.xiaomi.infra.galaxy.io.thrift.RSFileHeader;
import org.junit.Test;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import static org.junit.Assert.assertEquals;
public class ByteArrayRecordReaderWriterTest {
@Test
public void testSerialization() throws Exception {
Compression[] compressions = { Compression.NONE, Compression.SNAPPY };
int[] counts = { 0, 1, 10, 100, 1000 };
for (Compression compression : compressions) {
for (int count : counts) {
List<String> expected = new ArrayList<String>();
for (int i = 0; i < count; i++) {
expected.add("message #" + i);
}
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
RecordWriter<byte[]> recordWriter = new ByteArrayRecordWriter(outputStream,
new RSFileHeader().setCompression(compression).setCount(count));
for (String item : expected) {
recordWriter.append(item.getBytes("UTF-8"));
}
recordWriter.seal();
recordWriter.close();
InputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
RecordReader<byte[]> recordReader = new ByteArrayRecordReader(inputStream);
List<String> actual = new ArrayList<String>();
while (recordReader.hasNext()) {
actual.add(new String(recordReader.next(), "UTF-8"));
}
recordReader.close();
assertEquals(expected, actual);
}
}
}
}