コード例 #1
0
        private void WriteAndReadTestData(
            ISocketWrapper socket,
            ITestCallbackHandler callbackHandler,
            int inputToHandler)
        {
            Stream inputStream  = socket.InputStream;
            Stream outputStream = socket.OutputStream;

            SerDe.Write(outputStream, (int)CallbackFlags.CALLBACK);
            SerDe.Write(outputStream, callbackHandler.Id);
            SerDe.Write(outputStream, sizeof(int));
            SerDe.Write(outputStream, inputToHandler);
            SerDe.Write(outputStream, (int)CallbackFlags.END_OF_STREAM);
            outputStream.Flush();

            int callbackFlag = SerDe.ReadInt32(inputStream);

            if (callbackFlag == (int)CallbackFlags.DOTNET_EXCEPTION_THROWN)
            {
                string exceptionMessage = SerDe.ReadString(inputStream);
                Assert.False(string.IsNullOrEmpty(exceptionMessage));
                Assert.Contains(callbackHandler.ExceptionMessage, exceptionMessage);
            }
            else
            {
                Assert.Equal((int)CallbackFlags.END_OF_STREAM, callbackFlag);
            }
        }
コード例 #2
0
        private void TestCallbackConnection(
            ConcurrentDictionary <int, ICallbackHandler> callbackHandlersDict,
            ITestCallbackHandler callbackHandler,
            int inputToHandler,
            CancellationToken token)
        {
            using ISocketWrapper serverListener = SocketFactory.CreateSocket();
            serverListener.Listen();

            var ipEndpoint = (IPEndPoint)serverListener.LocalEndPoint;

            using ISocketWrapper clientSocket = SocketFactory.CreateSocket();
            clientSocket.Connect(ipEndpoint.Address, ipEndpoint.Port);

            // Don't use "using" here. The CallbackConnection will dispose the socket.
            ISocketWrapper serverSocket       = serverListener.Accept();
            var            callbackConnection = new CallbackConnection(0, serverSocket, callbackHandlersDict);
            Task           task = Task.Run(() => callbackConnection.Run(token));

            if (token.IsCancellationRequested)
            {
                task.Wait();
                Assert.False(callbackConnection.IsRunning);
            }
            else
            {
                WriteAndReadTestData(clientSocket, callbackHandler, inputToHandler);

                if (callbackHandler.Throws)
                {
                    task.Wait();
                    Assert.False(callbackConnection.IsRunning);
                }
                else
                {
                    Assert.True(callbackConnection.IsRunning);

                    // Clean up CallbackConnection
                    Stream outputStream = clientSocket.OutputStream;
                    SerDe.Write(outputStream, (int)CallbackConnection.ConnectionStatus.REQUEST_CLOSE);
                    outputStream.Flush();
                    task.Wait();
                    Assert.False(callbackConnection.IsRunning);
                }
            }
        }
コード例 #3
0
ファイル: CallbackTests.cs プロジェクト: rapoth/spark-2
        private void TestCallbackConnection(
            ConcurrentDictionary <int, ICallbackHandler> callbackHandlersDict,
            ITestCallbackHandler callbackHandler,
            int inputToHandler,
            CancellationToken token)
        {
            using ISocketWrapper serverListener = SocketFactory.CreateSocket();
            serverListener.Listen();

            var            ipEndpoint   = (IPEndPoint)serverListener.LocalEndPoint;
            ISocketWrapper clientSocket = SocketFactory.CreateSocket();

            clientSocket.Connect(ipEndpoint.Address, ipEndpoint.Port);

            var callbackConnection = new CallbackConnection(0, clientSocket, callbackHandlersDict);

            Task.Run(() => callbackConnection.Run(token));

            using ISocketWrapper serverSocket = serverListener.Accept();
            WriteAndReadTestData(serverSocket, callbackHandler, inputToHandler, token);
        }