Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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));
        }