Ejemplo n.º 1
0
        public virtual PipeStream GetConnectedPipeStream(PipeToken pipeToken)
        {
            NamedPipeClientStream pipe = new NamedPipeClientStream(LocalPipeUrl, pipeToken.Token, PipeDirection.InOut);

            pipe.Connect();
            pipe.ReadMode = PipeTransmissionMode.Message;

            return(pipe);
        }
Ejemplo n.º 2
0
        public virtual PipeStream GetConnectedPipeStream(PipeToken pipeToken)
        {
            NamedPipeClientStream pipe = new NamedPipeClientStream(LocalPipeUrl, pipeToken.Token, PipeDirection.InOut, PipeOptions.Asynchronous);

            pipe.Connect();
            pipe.ReadMode = PipeTransmissionMode.Byte;

            return(pipe);
        }
        public void TestCreatesGuid()
        {
            ITokenGenerator generator = new GuidTokenGenerator();

            PipeToken token = generator.GenerateToken();

            Guid result = Guid.Parse(token.Token);

            Assert.AreEqual(token.Token, result.ToString());
        }
Ejemplo n.º 4
0
        public PipeServer(IFormatter formatter, PipeToken pipeToken)
        {
            Raise.ArgumentNullException.IfIsNull(formatter);
            Raise.ArgumentNullException.IfIsNull(pipeToken, nameof(pipeToken));

            _formatter = formatter;
            _pipeToken = pipeToken;

            OpenPipeServer();
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Creates a new WrapperProcessStarter instance.
        /// </summary>
        /// <param name="wrapperExecutableNameProvider">Provides the name for the wrapper executable to start.</param>
        /// <param name="pipeToken">PipeToken instance for creating pipe connections.</param>
        /// <param name="processFactory">IProcessFactory instance for creating a new wrapper process</param>
        public WrapperProcessStarter(IWrapperExecutableNameProvider wrapperExecutableNameProvider, PipeToken pipeToken, IProcessFactory processFactory)
        {
            Raise.ArgumentNullException.IfIsNull(wrapperExecutableNameProvider, nameof(wrapperExecutableNameProvider));
            Raise.ArgumentNullException.IfIsNull(pipeToken, nameof(pipeToken));
            Raise.ArgumentNullException.IfIsNull(processFactory);

            _wrapperExecutableNameProvider = wrapperExecutableNameProvider;
            _pipeToken      = pipeToken;
            _processFactory = processFactory;
        }
        private static void ExtractTokenFromArgs(string[] args)
        {
            string errorMessage = "The number of arguments passed to this executable has to be exactly 1.";

            Raise.ArgumentNullException.IfIsNull(args, nameof(args), errorMessage);
            Raise.ArgumentException.IfNot(args.Length == 1, nameof(args), errorMessage);

            PipeToken token = new PipeToken(args[0]);

            InjectionKernel.Bind <PipeToken>().ToConstant(token);
        }
Ejemplo n.º 7
0
        public virtual PipeStream GetConnectedPipeStream(PipeToken pipeToken, int timeout = System.Threading.Timeout.Infinite)
        {
            if (timeout == 0)
            {
                timeout = System.Threading.Timeout.Infinite;
            }

            NamedPipeClientStream pipe = new NamedPipeClientStream(LocalPipeUrl, pipeToken.Token, PipeDirection.InOut);

            pipe.Connect(timeout);
            pipe.ReadMode = PipeTransmissionMode.Message;

            return(pipe);
        }
Ejemplo n.º 8
0
        public void TestPipeConnectorSendsCallRequest()
        {
            Mock <IFormatter>             formatterMock             = new Mock <IFormatter>();
            Mock <IWrapperProcessStarter> wrapperProcessStarterMock = new Mock <IWrapperProcessStarter>();
            Mock <PipeStreamFactory>      pipeStreamFactoryMock     = GetPipeStreamFactoryMock();

            PipeToken      pipeToken      = new PipeToken(Guid.NewGuid().ToString());
            IPipeConnector pipeConnector  = new PipeConnector(formatterMock.Object, wrapperProcessStarterMock.Object, pipeStreamFactoryMock.Object, pipeToken);
            CallData       callDataToSend = new CallData();

            pipeConnector.SendCallRequest(callDataToSend);

            formatterMock.Verify(mock => mock.Serialize(It.IsAny <PipeStream>(), It.Is <CallData>(actual => ReferenceEquals(actual, callDataToSend))), Times.AtLeast(1));
        }
Ejemplo n.º 9
0
        public void TestPipeConnectorOpensPipe()
        {
            Mock <IFormatter>             formatterMock             = new Mock <IFormatter>();
            Mock <IWrapperProcessStarter> wrapperProcessStarterMock = new Mock <IWrapperProcessStarter>();
            Mock <PipeStreamFactory>      pipeStreamFactoryMock     = GetPipeStreamFactoryMock();

            PipeToken      pipeToken      = new PipeToken(Guid.NewGuid().ToString());
            IPipeConnector pipeConnector  = new PipeConnector(formatterMock.Object, wrapperProcessStarterMock.Object, pipeStreamFactoryMock.Object, pipeToken);
            CallData       callDataToSend = new CallData();

            pipeConnector.SendCallRequest(callDataToSend);

            pipeStreamFactoryMock.Verify(mock => mock.GetConnectedPipeStream(It.Is <PipeToken>(actual => Equals(actual, pipeToken))), Times.Once);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Creates a new WrapperClient instance.
        /// </summary>
        /// <param name="formatter">Formatter instance for data serialization to the pipe.</param>
        /// <param name="wrapperProcessStarter">WrapperProcessStarter instance for invoking the appropriate wrapper executable.</param>
        /// <param name="pipeStreamFactory">A factory instance to create a new NamedPipeClientStream.</param>
        /// <param name="pipeToken">PipeToken instance for creating pipe connections.</param>
        /// <param name="wrapperConfig">the wrapperconfig</param>
        public PipeConnector(IFormatter formatter, IWrapperProcessStarter wrapperProcessStarter, PipeStreamFactory pipeStreamFactory, PipeToken pipeToken, IWrapperConfig wrapperConfig)
        {
            Raise.ArgumentNullException.IfIsNull(formatter, nameof(formatter));
            Raise.ArgumentNullException.IfIsNull(wrapperProcessStarter, nameof(wrapperProcessStarter));
            Raise.ArgumentNullException.IfIsNull(pipeStreamFactory, nameof(pipeStreamFactory));
            Raise.ArgumentNullException.IfIsNull(pipeToken, nameof(pipeToken));

            _formatter             = formatter;
            _wrapperProcessStarter = wrapperProcessStarter;
            _pipeStreamFactory     = pipeStreamFactory;
            _pipeToken             = pipeToken;

            _wrapperProcessStarter.StartWrapperProcess();
            OpenPipe(wrapperConfig.Timeout);
        }
Ejemplo n.º 11
0
        public void TestPipeGetsClosed()
        {
            CallResult callResultToFetch = new CallResult();

            Mock <IFormatter> formatterMock = new Mock <IFormatter>();

            formatterMock
            .Setup(x => x.Deserialize(It.IsAny <Stream>()))
            .Returns(callResultToFetch);
            Mock <IWrapperProcessStarter> wrapperProcessStarterMock = new Mock <IWrapperProcessStarter>();
            Mock <PipeStreamFactory>      pipeStreamFactoryMock     = GetPipeStreamFactoryMock();

            PipeToken      pipeToken     = new PipeToken(Guid.NewGuid().ToString());
            IPipeConnector pipeConnector = new PipeConnector(formatterMock.Object, wrapperProcessStarterMock.Object, pipeStreamFactoryMock.Object, pipeToken);

            pipeConnector.Dispose();

            formatterMock.Verify(mock => mock.Serialize(It.IsAny <PipeStream>(), It.Is <CallData>(actual => actual.Status.Equals(KeepAliveStatus.Close))), Times.AtLeast(1));
        }
Ejemplo n.º 12
0
        public void TestPipeConnectorFetchesCallResponse()
        {
            CallResult callResultToFetch = new CallResult();

            Mock <IFormatter> formatterMock = new Mock <IFormatter>();

            formatterMock
            .Setup(x => x.Deserialize(It.IsAny <Stream>()))
            .Returns(callResultToFetch);
            Mock <IWrapperProcessStarter> wrapperProcessStarterMock = new Mock <IWrapperProcessStarter>();
            Mock <PipeStreamFactory>      pipeStreamFactoryMock     = GetPipeStreamFactoryMock();

            PipeToken      pipeToken     = new PipeToken(Guid.NewGuid().ToString());
            IPipeConnector pipeConnector = new PipeConnector(formatterMock.Object, wrapperProcessStarterMock.Object, pipeStreamFactoryMock.Object, pipeToken);

            CallResult actualCallResult = pipeConnector.ReceiveCallResponse();

            formatterMock.Verify(mock => mock.Deserialize(It.IsAny <PipeStream>()), Times.AtLeast(1));
            Assert.AreEqual(callResultToFetch, actualCallResult);
        }
Ejemplo n.º 13
0
        public void TestThrowsExceptionIfContainedInCallResult()
        {
            CallResult callResultToFetch = new CallResult();

            callResultToFetch.Exception = new LegacyWrapperException();

            Mock <IFormatter> formatterMock = new Mock <IFormatter>();

            formatterMock
            .Setup(x => x.Deserialize(It.IsAny <Stream>()))
            .Returns(callResultToFetch);
            Mock <IWrapperProcessStarter> wrapperProcessStarterMock = new Mock <IWrapperProcessStarter>();
            Mock <PipeStreamFactory>      pipeStreamFactoryMock     = GetPipeStreamFactoryMock();

            PipeToken      pipeToken     = new PipeToken(Guid.NewGuid().ToString());
            IPipeConnector pipeConnector = new PipeConnector(formatterMock.Object, wrapperProcessStarterMock.Object, pipeStreamFactoryMock.Object, pipeToken);

            pipeConnector.ReceiveCallResponse();

            Assert.Fail("Exception should have been thrown by PipeConnector");
        }