| File: FaultExceptionTests.4.0.0.cs | Web Access |
| Project: src\src\System.Private.ServiceModel\tests\Scenarios\Contract\Fault\Contract.Fault.IntegrationTests.csproj (Contract.Fault.IntegrationTests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using System.ServiceModel; using System.Text; using Infrastructure.Common; using Xunit; public static partial class FaultExceptionTests { [WcfFact] [OuterLoop] public static void FaultException_Throws_WithFaultDetail() { string faultMsg = "Test Fault Exception"; BasicHttpBinding binding = null; ChannelFactory<IWcfService> factory = null; IWcfService serviceProxy = null; EndpointAddress endpointAddress = null; FaultException<FaultDetail> exception = Assert.Throws<FaultException<FaultDetail>>(() => { // *** SETUP *** \\ binding = new BasicHttpBinding(); endpointAddress = new EndpointAddress(Endpoints.HttpBaseAddress_Basic_Text); factory = new ChannelFactory<IWcfService>(binding, new EndpointAddress(Endpoints.HttpBaseAddress_Basic_Text)); serviceProxy = factory.CreateChannel(); // *** EXECUTE *** \\ try { serviceProxy.TestFault(faultMsg); } finally { // *** ENSURE CLEANUP *** \\ ScenarioTestHelpers.CloseCommunicationObjects((ICommunicationObject)serviceProxy, factory); } }); // *** ADDITIONAL VALIDATION *** \\ Assert.True(String.Equals(exception.Detail.Message, faultMsg), String.Format("Expected Fault Message: {0}, actual: {1}", faultMsg, exception.Detail.Message)); } [WcfFact] [OuterLoop] public static void UnexpectedException_Throws_FaultException() { string faultMsg = "This is a test fault msg"; BasicHttpBinding binding = null; ChannelFactory<IWcfService> factory = null; IWcfService serviceProxy = null; EndpointAddress endpointAddress = null; FaultException<ExceptionDetail> exception = Assert.Throws<FaultException<ExceptionDetail>>(() => { // *** SETUP *** \\ binding = new BasicHttpBinding(); endpointAddress = new EndpointAddress(Endpoints.HttpBaseAddress_Basic_Text); factory = new ChannelFactory<IWcfService>(binding, endpointAddress); serviceProxy = factory.CreateChannel(); // *** EXECUTE *** \\ try { serviceProxy.ThrowInvalidOperationException(faultMsg); } finally { // *** ENSURE CLEANUP *** \\ ScenarioTestHelpers.CloseCommunicationObjects((ICommunicationObject)serviceProxy, factory); } }); // *** ADDITIONAL VALIDATION *** \\ Assert.True(String.Equals(exception.Detail.Message, faultMsg), String.Format("Expected Fault Message: {0}, actual: {1}", faultMsg, exception.Detail.Message)); } [WcfFact] [OuterLoop] public static void FaultException_Throws_With_Int() { ChannelFactory<IWcfService> factory = null; IWcfService serviceProxy = null; BasicHttpBinding binding = null; int expectedFaultCode = 5; // arbitrary integer choice FaultException<int> thrownException = null; try { // *** SETUP *** \\ binding = new BasicHttpBinding(); factory = new ChannelFactory<IWcfService>(binding, new EndpointAddress(Endpoints.HttpBaseAddress_Basic_Text)); serviceProxy = factory.CreateChannel(); // *** EXECUTE *** \\ thrownException = Assert.Throws<FaultException<int>>(() => { serviceProxy.TestFaultInt(expectedFaultCode); }); // *** VALIDATE *** \\ Assert.Equal(expectedFaultCode, thrownException.Detail); // *** CLEANUP *** \\ factory.Close(); ((ICommunicationObject)serviceProxy).Close(); } finally { // *** ENSURE CLEANUP *** \\ ScenarioTestHelpers.CloseCommunicationObjects((ICommunicationObject)serviceProxy, factory); } } [WcfFact] [OuterLoop] public static void FaultException_MultipleFaultContracts_Throws_WithFaultDetail() { string faultMsg = "Test Fault Exception"; BasicHttpBinding binding; ChannelFactory<IWcfService> factory; IWcfService serviceProxy; // *** VALIDATE *** \\ var exception = Assert.Throws<FaultException<FaultDetail>>(() => { // *** SETUP *** \\ binding = new BasicHttpBinding(); factory = new ChannelFactory<IWcfService>(binding, new EndpointAddress(Endpoints.HttpBaseAddress_Basic_Text)); serviceProxy = factory.CreateChannel(); // *** EXECUTE *** \\ try { serviceProxy.TestFaults(faultMsg, true); // *** CLEANUP *** \\ ((ICommunicationObject)serviceProxy).Close(); factory.Close(); } finally { // *** ENSURE CLEANUP *** \\ ScenarioTestHelpers.CloseCommunicationObjects((ICommunicationObject)serviceProxy, factory); } }); // *** ADDITIONAL VALIDATION *** \\ Assert.Equal(faultMsg, exception.Detail.Message); } [WcfFact] [OuterLoop] public static void FaultException_MultipleFaultContracts_Throws_WithFaultDetail2() { string faultMsg = "Test Fault Exception"; BasicHttpBinding binding; ChannelFactory<IWcfService> factory; IWcfService serviceProxy; // *** VALIDATE *** \\ var exception = Assert.Throws<FaultException<FaultDetail2>>(() => { // *** SETUP *** \\ binding = new BasicHttpBinding(); factory = new ChannelFactory<IWcfService>(binding, new EndpointAddress(Endpoints.HttpBaseAddress_Basic_Text)); serviceProxy = factory.CreateChannel(); // *** EXECUTE *** \\ try { serviceProxy.TestFaults(faultMsg, false); // *** CLEANUP *** \\ ((ICommunicationObject)serviceProxy).Close(); factory.Close(); } finally { // *** ENSURE CLEANUP *** \\ ScenarioTestHelpers.CloseCommunicationObjects((ICommunicationObject)serviceProxy, factory); } }); // *** ADDITIONAL VALIDATION *** \\ Assert.Equal(faultMsg, exception.Detail.Message); } [WcfFact] [OuterLoop] public static void FaultException_FaultContractAndKnownType_Throws_WithFaultDetail() { string faultMsg = "Test Fault Exception"; BasicHttpBinding binding; ChannelFactory<IWcfService> factory; IWcfService serviceProxy; // *** VALIDATE *** \\ var exception = Assert.Throws<FaultException<FaultDetail>>(() => { // *** SETUP *** \\ binding = new BasicHttpBinding(); factory = new ChannelFactory<IWcfService>(binding, new EndpointAddress(Endpoints.HttpBaseAddress_Basic_Text)); serviceProxy = factory.CreateChannel(); // *** EXECUTE *** \\ try { serviceProxy.TestFaultWithKnownType(faultMsg, null); // *** CLEANUP *** \\ ((ICommunicationObject)serviceProxy).Close(); factory.Close(); } finally { // *** ENSURE CLEANUP *** \\ ScenarioTestHelpers.CloseCommunicationObjects((ICommunicationObject)serviceProxy, factory); } }); // *** ADDITIONAL VALIDATION *** \\ Assert.Equal(faultMsg, exception.Detail.Message); } [WcfFact] [OuterLoop] public static void FaultException_FaultContractAndKnownType_Echo() { BasicHttpBinding binding; ChannelFactory<IWcfService> factory; IWcfService serviceProxy; // *** SETUP *** \\ binding = new BasicHttpBinding(); factory = new ChannelFactory<IWcfService>(binding, new EndpointAddress(Endpoints.HttpBaseAddress_Basic_Text)); serviceProxy = factory.CreateChannel(); // *** EXECUTE *** \\ try { var input = new object[] { new FaultDetail(), new KnownTypeA() }; var response = serviceProxy.TestFaultWithKnownType(null, input); // *** VALIDATE *** \\ Assert.True(input.Length == response.Length, String.Format("Expected {0} response items but actual was {1}", input.Length, response.Length)); Assert.True(response[0] != null, "Expected response item to be FaultDetail, but actual was null"); Assert.True(response[0].GetType() == typeof(FaultDetail), String.Format("Expected response item to be FaultDetail but actual was {0}", response[0].GetType())); Assert.True(response[1] != null, "Expected response item to be KnownTypeA, but actual was null"); Assert.True(response[1].GetType() == typeof(KnownTypeA), String.Format("Expected response item to be FaultDetail2 but actual was {0}", response[1].GetType())); // *** CLEANUP *** \\ ((ICommunicationObject)serviceProxy).Close(); factory.Close(); } finally { // *** ENSURE CLEANUP *** \\ ScenarioTestHelpers.CloseCommunicationObjects((ICommunicationObject)serviceProxy, factory); } } }