/** * */ package edu.washington.escience.myria.operator; import static org.junit.Assert.assertEquals; import java.io.ByteArrayOutputStream; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import org.junit.Test; import edu.washington.escience.myria.CsvTupleReader; import edu.washington.escience.myria.CsvTupleWriter; import edu.washington.escience.myria.Schema; import edu.washington.escience.myria.Type; import edu.washington.escience.myria.io.ByteArraySource; import edu.washington.escience.myria.io.ByteSink; import edu.washington.escience.myria.io.FileSink; import edu.washington.escience.myria.io.DataSource; import edu.washington.escience.myria.storage.TupleBatch; import edu.washington.escience.myria.util.TestEnvVars; /** * */ public class DataSinkTest { @Test public void testDataSink() throws Exception { /* Read a CSV and construct the query */ String dataSrc = "x,y\r\n1,2\r\n3,4\r\n5,6\r\n7,8\r\n"; byte[] srcBytes = dataSrc.getBytes(Charset.forName("UTF-8")); Schema relationSchema = Schema.ofFields("x", Type.INT_TYPE, "y", Type.INT_TYPE); DataSource byteSource = new ByteArraySource(srcBytes); TupleSource dataInput = new TupleSource(new CsvTupleReader(relationSchema, ',', null, null, 1), byteSource); ByteSink byteSink = new ByteSink(); TupleSink dataOutput = new TupleSink(dataInput, new CsvTupleWriter(), byteSink); dataOutput.open(TestEnvVars.get()); while (!dataOutput.eos()) { TupleBatch tb = dataOutput.nextReady(); } dataOutput.close(); byte[] responseBytes = ((ByteArrayOutputStream) byteSink.getOutputStream()).toByteArray(); String dataDst = new String(responseBytes, Charset.forName("UTF-8")); assertEquals(dataSrc, dataDst); } @Test public void testDataSinkToFile() throws Exception { /* Read a CSV and construct the query */ String dataSrc = "x,y\r\n1,2\r\n3,4\r\n5,6\r\n7,8\r\n"; byte[] srcBytes = dataSrc.getBytes(Charset.forName("UTF-8")); Schema relationSchema = Schema.ofFields("x", Type.INT_TYPE, "y", Type.INT_TYPE); DataSource byteSource = new ByteArraySource(srcBytes); FileScan fileScan = new FileScan(byteSource, relationSchema, ',', null, null, 1); Path tempFile = Files.createTempFile(this.getClass().getName(), ".tmp"); FileSink sink = new FileSink(tempFile.toString()); TupleSink dataOutput = new TupleSink(fileScan, new CsvTupleWriter(), sink); dataOutput.open(TestEnvVars.get()); while (!dataOutput.eos()) { dataOutput.nextReady(); } dataOutput.close(); byte[] responseBytes = Files.readAllBytes(tempFile); String dataDst = new String(responseBytes, Charset.forName("UTF-8")); assertEquals(dataSrc, dataDst); } }