2010-04-02 Atsushi Enomoto <atsushi@ximian.com>
authorAtsushi Eno <atsushieno@gmail.com>
Fri, 2 Apr 2010 09:09:26 +0000 (09:09 -0000)
committerAtsushi Eno <atsushieno@gmail.com>
Fri, 2 Apr 2010 09:09:26 +0000 (09:09 -0000)
* DispatchOperationTest.cs : added not-working FaultContractInfo test.

svn path=/trunk/mcs/; revision=154697

mcs/class/System.ServiceModel/Test/System.ServiceModel.Dispatcher/ChangeLog
mcs/class/System.ServiceModel/Test/System.ServiceModel.Dispatcher/DispatchOperationTest.cs

index cc0c804cafc5b3bc1aa91b4b6dec2549734dd538..ae830b168b57857283bea772a219e3e83b6edcd2 100644 (file)
@@ -1,3 +1,7 @@
+2010-04-02  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * DispatchOperationTest.cs : added not-working FaultContractInfo test.
+
 2010-03-18  Atsushi Enomoto  <atsushi@ximian.com>
 
        * XPathMessageContextTest.cs : new.
index 5b3eadec131a24f75f95478c4030aaae2406613d..ca68e0495f82f15f41c838eafbbf33bac107234c 100644 (file)
@@ -67,8 +67,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher
                        Assert.IsTrue (o.DeserializeRequest, "#1");
                        Assert.IsTrue (o.SerializeReply, "#2");
                        Assert.IsNull (o.Formatter, "#3");
-                       // FIXME: FaultDetailTypes -> FaultContractInfos
-                       //Assert.AreEqual (0, o.FaultDetailTypes.Count, "#4");
+                       Assert.AreEqual (0, o.FaultContractInfos.Count, "#4");
                        Assert.IsNull (o.Invoker, "#5");
                        Assert.IsFalse (o.IsOneWay, "#6");
                        Assert.IsFalse (o.IsTerminating, "#7");
@@ -84,5 +83,60 @@ namespace MonoTests.System.ServiceModel.Dispatcher
                        return new EndpointDispatcher (
                                new EndpointAddress ("http://localhost:8080"), "IFoo", "urn:foo").DispatchRuntime;
                }
+
+               [Test]
+               [Category ("NotWorking")]
+               public void FaultContractInfos ()
+               {
+                       var host = new ServiceHost (typeof (TestFaultContract));
+                       host.Description.Behaviors.Find<ServiceDebugBehavior> ().IncludeExceptionDetailInFaults = true;
+                       host.AddServiceEndpoint (typeof (ITestFaultContract), new BasicHttpBinding (), new Uri ("http://localhost:37564"));
+                       host.Open ();
+                       try {
+                               var cf = new ChannelFactory<ITestFaultContract> (new BasicHttpBinding (), new EndpointAddress ("http://localhost:37564"));
+                               var cli = cf.CreateChannel ();
+                               cli.Run ("test");
+                       } catch (FaultException<PrivateAffairError> ex) {
+                               var p  = ex.Detail;
+                               Assert.AreEqual (5, p.ErrorCode, "#1");
+                               Assert.AreEqual ("foobarerror", p.Text, "#2");
+                       } finally {
+                               host.Close ();
+                       }
+               }
+
+               [ServiceContract]
+               public interface ITestFaultContract
+               {
+                       [OperationContract]
+                       [FaultContract (typeof (PrivateAffairError), Action = "urn:myfault")]
+                       string Run (string input);
+               }
+
+               class TestFaultContract : ITestFaultContract
+               {
+                       public string Run (string input)
+                       {
+                               Assert.AreEqual (1, ContractDescription.GetContract (typeof (TestFaultContract)).Operations [0].Faults.Count, "s#0");
+
+                               var dr = OperationContext.Current.EndpointDispatcher.DispatchRuntime;
+                               Assert.AreEqual (1, dr.Operations.Count);
+                               var dop = dr.Operations [0];
+                               Assert.AreEqual ("Run", dop.Name, "s#1");
+                               Assert.AreEqual (1, dop.FaultContractInfos.Count, "s#2");
+                               var fci = dop.FaultContractInfos [0];
+                               Assert.AreEqual (typeof (PrivateAffairError), fci.Detail, "s#3");
+                               throw new FaultException<PrivateAffairError> (new PrivateAffairError () { ErrorCode = 5, Text = "foobarerror" });
+                       }
+               }
+
+               [DataContract]
+               class PrivateAffairError
+               {
+                       [DataMember]
+                       public int ErrorCode { get; set; }
+                       [DataMember]
+                       public string Text { get; set; }
+               }
        }
 }
\ No newline at end of file