public void TestClosedStreamWithMemoryStream() { var inputStream = new MemoryStream(); // Version is not used in this scenario. var processor = new PayloadProcessor(null); // Nothing is written to the stream. Assert.Null(processor.Process(inputStream)); inputStream.Dispose(); // The stream is closed. Payload with null is expected. Assert.Null(processor.Process(inputStream)); }
public void TestClosedStreamWithSocket() { var commandPayload = new CommandPayload() { EvalType = UdfUtils.PythonEvalType.SQL_BATCHED_UDF, Commands = new Command[] { } }; PayloadWriter payloadWriter = new PayloadWriterFactory().Create(); Payload payload = TestData.GetDefaultPayload(); var serverListener = new DefaultSocketWrapper(); serverListener.Listen(); var port = (serverListener.LocalEndPoint as IPEndPoint).Port; var clientSocket = new DefaultSocketWrapper(); clientSocket.Connect(IPAddress.Loopback, port, null); using (ISocketWrapper serverSocket = serverListener.Accept()) { Stream outStream = serverSocket.OutputStream; payloadWriter.Write(outStream, payload, commandPayload); outStream.Flush(); } // At this point server socket is closed. Stream inStream = clientSocket.InputStream; // Consume bytes already written to the socket. var payloadProcessor = new PayloadProcessor(payloadWriter.Version); Payload actualPayload = payloadProcessor.Process(inStream); Assert.Equal(payload.SplitIndex, actualPayload.SplitIndex); Assert.Equal(payload.Version, actualPayload.Version); Assert.Equal(payload.TaskContext, actualPayload.TaskContext); Assert.Equal(payload.SparkFilesDir, actualPayload.SparkFilesDir); Assert.Equal(payload.IncludeItems, actualPayload.IncludeItems); Assert.Equal(payload.BroadcastVariables.Count, actualPayload.BroadcastVariables.Count); ValidateCommandPayload(commandPayload, actualPayload.Command); // Another read will detect that the socket is closed. Assert.Null(payloadProcessor.Process(inStream)); }