public void RelaySyncMessage() { StubServiceHost.FindDefaultService <ICalculatorService>() .Setup(s => s.Add(It.IsAny <XmlCalculatorRequest>())) .Returns(new StringStream(string.Format(CALCULATOR_RESPONSE_XML, 3))); ICalculatorService client = null; try { client = SimpleServiceClient <CalculatorService, ICalculatorService> .Create(); var calculatorResult = client.Add(new XmlCalculatorRequest(CALCULATOR_REQUEST_XML)); Assert.AreEqual(string.Format(CALCULATOR_RESPONSE_XML, 3), calculatorResult.RawXmlBody); client.Close(); } catch (Exception) { if (client != null) { client.Abort(); } throw; } }
public void RelayAsyncMessage() { StubServiceHost.FindDefaultService <ICalculatorService>() .Setup(s => s.BeginMultiply(It.IsAny <XmlCalculatorRequest>(), It.IsAny <AsyncCallback>(), It.IsAny <object>())) .Returns(new StringStream(string.Format(CALCULATOR_RESPONSE_XML, 2))); ICalculatorService client = null; try { client = SimpleServiceClient <CalculatorService, ICalculatorService> .Create(); var calculatorResult = Task <XmlCalculatorResponse> .Factory .FromAsync(client.BeginMultiply, client.EndMultiply, new XmlCalculatorRequest(CALCULATOR_REQUEST_XML), null) .Result; Assert.AreEqual(string.Format(CALCULATOR_RESPONSE_XML, 2), calculatorResult.RawXmlBody); client.Close(); } catch (Exception) { if (client != null) { client.Abort(); } throw; } }
public void RelayCompositeMessage() { const string responseXml = "<CalculatorResponse xmlns=\"urn:services.stateless.be:unit:calculator\">" + "<s0:Result xmlns:s0=\"urn:services.stateless.be:unit:calculator\">one</s0:Result>" + "<s0:Result xmlns:s0=\"urn:services.stateless.be:unit:calculator\">two</s0:Result>" + "</CalculatorResponse>"; StubServiceHost.FindDefaultService <ICalculatorService>() .Setup(s => s.Add(It.IsAny <XmlCalculatorRequest>())) .Returns(new StringStream(responseXml)); ICalculatorService client = null; try { client = SimpleServiceClient <CalculatorService, ICalculatorService> .Create(); var calculatorResult = client.Add(new XmlCalculatorRequest(CALCULATOR_REQUEST_XML)); Assert.AreEqual(responseXml, calculatorResult.RawXmlBody); client.Close(); } catch (Exception) { if (client != null) { client.Abort(); } throw; } }
public void RelaySyncInvalidMessageFails() { var client = SimpleServiceClient <CalculatorService, IValidatingCalculatorService> .Create(); Assert.That( () => client.Add(new XlangCalculatorRequest(INVALID_CALCULATOR_REQUEST_XML)), Throws.TypeOf <FaultException <ExceptionDetail> >() .With.Property("Detail") .With.InnerException.InnerException.Message.Contains( "The element 'Arguments' in namespace 'urn:services.stateless.be:unit:calculator' has invalid child element 'Operand' in namespace 'urn:services.stateless.be:unit:calculator'. " + "List of possible elements expected: 'Term' in namespace 'urn:services.stateless.be:unit:calculator'")); client.Close(); }
public void RelaySyncMessageTimesOut() { StubServiceHost.FindDefaultService <ICalculatorService>() .Setup(s => s.Subtract(It.IsAny <XmlCalculatorRequest>())) .Callback(() => Thread.Sleep(3000)) .Returns(new StringStream(string.Format(CALCULATOR_RESPONSE_XML, 1))); var client = SimpleServiceClient <CalculatorService, ICalculatorService> .Create(); Assert.That( () => client.Subtract(new XmlCalculatorRequest(CALCULATOR_REQUEST_XML)), Throws.TypeOf <FaultException <ExceptionDetail> >() .With.Message.Contains("The request channel timed out while waiting for a reply")); client.Close(); }
public void RelayAsyncInvalidMessageFails() { var client = SimpleServiceClient <CalculatorService, IValidatingCalculatorService> .Create(); Assert.That( () => Task <XlangCalculatorResponse> .Factory .FromAsync(client.BeginMultiply, client.EndMultiply, new XlangCalculatorRequest(INVALID_CALCULATOR_REQUEST_XML), null) .Result, Throws.TypeOf <AggregateException>() .With.InnerException.TypeOf <FaultException <ExceptionDetail> >() .With.InnerException.Property("Detail") .With.InnerException.InnerException.Message.Contains( "The element 'Arguments' in namespace 'urn:services.stateless.be:unit:calculator' has invalid child element 'Operand' in namespace 'urn:services.stateless.be:unit:calculator'. " + "List of possible elements expected: 'Term' in namespace 'urn:services.stateless.be:unit:calculator'")); client.Close(); }
public void RelayAsyncMessageTimesOut() { StubServiceHost.FindDefaultService <ICalculatorService>() .Setup(s => s.BeginDivide(It.IsAny <XmlCalculatorRequest>(), It.IsAny <AsyncCallback>(), It.IsAny <object>())) .Callback(() => Thread.Sleep(3000)) .Returns(new StringStream(string.Format(CALCULATOR_RESPONSE_XML, 2))); var client = SimpleServiceClient <CalculatorService, ICalculatorService> .Create(); Assert.That( () => Task <XmlCalculatorResponse> .Factory .FromAsync(client.BeginDivide, client.EndDivide, new XmlCalculatorRequest(CALCULATOR_REQUEST_XML), null) .Result, Throws.TypeOf <AggregateException>() .With.InnerException.TypeOf <FaultException <ExceptionDetail> >() .With.InnerException.Message.Contains("has exceeded the allotted timeout")); client.Close(); }
public void PerformSyncSucceeds() { StubServiceHost.FindDefaultService <IPerformService>() .Setup(s => s.Perform(It.IsAny <XlangCalculatorRequest>())); IPerformService client = null; try { var request = new XlangCalculatorRequest(CALCULATOR_REQUEST_XML); client = SimpleServiceClient <CalculatorService, IPerformService> .Create(); client.Perform(request); client.Close(); } catch (Exception) { if (client != null) { client.Abort(); } throw; } }