public virtual PipeStream GetConnectedPipeStream(PipeToken pipeToken) { NamedPipeClientStream pipe = new NamedPipeClientStream(LocalPipeUrl, pipeToken.Token, PipeDirection.InOut); pipe.Connect(); pipe.ReadMode = PipeTransmissionMode.Message; return(pipe); }
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()); }
public PipeServer(IFormatter formatter, PipeToken pipeToken) { Raise.ArgumentNullException.IfIsNull(formatter); Raise.ArgumentNullException.IfIsNull(pipeToken, nameof(pipeToken)); _formatter = formatter; _pipeToken = pipeToken; OpenPipeServer(); }
/// <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); }
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); }
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)); }
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); }
/// <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); }
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)); }
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); }
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"); }