public void DeepRowConstructorTest() { Pickler pickler = CreatePickler(); var rowschema = new StructType( new StructField[] { new StructField("id", new StringType()), }); var schema = new StructType(new StructField[] { new StructField("age", new IntegerType()), new StructField("name", new StringType()), new StructField("dataarray", new ArrayType(rowschema)), }); var row1 = new Row(new object[] { 10, "name1", new ArrayList(new Row[] { new Row(new object[] { "id1" }, rowschema), new Row(new object[] { "id2" }, rowschema), }) }, schema); var row2 = new Row(new object[] { 15, "name2", new ArrayList(new Row[] { new Row(new object[] { "id1" }, rowschema), new Row(new object[] { "id2" }, rowschema), new Row(new object[] { "id3" }, rowschema), }) }, schema); byte[] pickledBytes = pickler.dumps(new[] { row1, row2 }); // Set up the mock to return memory stream to which pickled data is written. var stream = new MemoryStream(); SerDe.Write(stream, pickledBytes.Length); SerDe.Write(stream, pickledBytes); stream.Position = 0; var socket = new Mock <ISocketWrapper>(); socket.Setup(m => m.InputStream).Returns(stream); socket.Setup(m => m.OutputStream).Returns(stream); var rowCollector = new RowCollector(); Row[] rows = rowCollector.Collect(socket.Object, true).ToArray(); Assert.Equal(2, rows.Length); Assert.Equal( JsonConvert.SerializeObject(row1), JsonConvert.SerializeObject(rows[0])); Assert.Equal( JsonConvert.SerializeObject(row2), JsonConvert.SerializeObject(rows[1])); }
public void RowCollectorTest() { var stream = new MemoryStream(); Pickler pickler = CreatePickler(); var schema = (StructType)DataType.ParseDataType(_testJsonSchema); // Pickle two rows in one batch. var row1 = new Row(new object[] { 10, "name1" }, schema); var row2 = new Row(new object[] { 15, "name2" }, schema); var batch1 = pickler.dumps(new[] { row1, row2 }); SerDe.Write(stream, batch1.Length); SerDe.Write(stream, batch1); // Pickle one row in one batch. var row3 = new Row(new object[] { 20, "name3" }, schema); var batch2 = pickler.dumps(new[] { row3 }); SerDe.Write(stream, batch2.Length); SerDe.Write(stream, batch2); // Rewind the memory stream so that the row collect can read from beginning. stream.Seek(0, SeekOrigin.Begin); // Set up the mock to return memory stream to which pickled data is written. var socket = new Mock <ISocketWrapper>(); socket.Setup(m => m.InputStream).Returns(stream); socket.Setup(m => m.OutputStream).Returns(stream); var rowCollector = new RowCollector(); Row[] rows = rowCollector.Collect(socket.Object).ToArray(); Assert.Equal(3, rows.Length); Assert.Equal(row1, rows[0]); Assert.Equal(row2, rows[1]); Assert.Equal(row3, rows[2]); }