2 using System.Collections.Generic;
4 using System.Runtime.Serialization;
5 using System.ServiceModel;
6 using System.ServiceModel.Channels;
11 namespace MonoTests.System.ServiceModel.Channels
14 public class MessageHeaderTest
17 public void TestDefaultValues ()
19 MessageHeader h = MessageHeader.CreateHeader ("foo", "bar", 1);
20 Assert.AreEqual (String.Empty, h.Actor);
21 Assert.IsFalse (h.MustUnderstand);
22 Assert.IsFalse (h.Relay);
26 public void TestIsMessageVersionSupported ()
30 // by default, both versions are supported.
31 h = MessageHeader.CreateHeader ("foo", "bar", 1);
32 Assert.IsTrue (h.IsMessageVersionSupported (MessageVersion.Soap11WSAddressing10), "#1");
33 Assert.IsTrue (h.IsMessageVersionSupported (MessageVersion.Soap12WSAddressing10), "#2");
35 // SOAP 1.1 is not supported if Actor == Soap12.NextDestinationActorValue
36 h = MessageHeader.CreateHeader ("foo", "bar", 1, false, MessageVersion.Soap12WSAddressing10.Envelope.NextDestinationActorValue);
37 Assert.IsFalse (h.IsMessageVersionSupported (MessageVersion.Soap11WSAddressing10), "#3");
38 Assert.IsTrue (h.IsMessageVersionSupported (MessageVersion.Soap12WSAddressing10), "#4");
40 // SOAP 1.1 is not supported if Actor == Soap12's UltimateDestinationActor
41 h = MessageHeader.CreateHeader ("foo", "bar", 1, false, MessageVersion.Soap12WSAddressing10.Envelope.GetUltimateDestinationActorValues () [1]);
42 Assert.IsFalse (h.IsMessageVersionSupported (MessageVersion.Soap11WSAddressing10), "#5");
43 Assert.IsTrue (h.IsMessageVersionSupported (MessageVersion.Soap12WSAddressing10), "#6");
45 // SOAP 1.2 is not supported if Actor == Soap11.NextDestinationActorValue
46 h = MessageHeader.CreateHeader ("foo", "bar", 1, false, MessageVersion.Soap11WSAddressing10.Envelope.NextDestinationActorValue);
47 Assert.IsTrue (h.IsMessageVersionSupported (MessageVersion.Soap11WSAddressing10), "#7");
48 Assert.IsFalse (h.IsMessageVersionSupported (MessageVersion.Soap12WSAddressing10), "#8");
52 public void TestToString ()
54 MessageHeader h = MessageHeader.CreateHeader ("foo", "bar", 1);
55 StringBuilder sb = new StringBuilder ();
56 XmlWriterSettings settings = new XmlWriterSettings ();
57 settings.OmitXmlDeclaration = true;
58 settings.Indent = true;
60 XmlWriter w = XmlWriter.Create (sb, settings);
62 h.WriteHeader (w, MessageVersion.Soap12WSAddressing10);
65 // ToString is the same as WriteHeader (minus the XML declaration)
66 Assert.AreEqual (sb.ToString (), h.ToString ());
70 public void TestWriteStartHeader ()
74 MessageHeader h = MessageHeader.CreateHeader ("foo", "bar", value);
76 StringBuilder sb = new StringBuilder ();
77 XmlDictionaryWriter w = XmlDictionaryWriter.CreateDictionaryWriter (
78 XmlWriter.Create (sb));
79 h.WriteStartHeader (w, MessageVersion.Soap12WSAddressing10);
81 string actual = sb.ToString ();
83 sb = new StringBuilder ();
84 XmlWriter w2 = XmlWriter.Create (sb);
85 w2.WriteStartElement (h.Name, h.Namespace);
87 string expected = sb.ToString ();
89 // WriteStartHeader == WriteStartElement (msg.Name, msg.Namespace)
90 Assert.AreEqual (expected, actual);
94 public void TestWriteHeaderContent ()
96 TestWriteHeaderContent (1, "<dummy-root>1</dummy-root>");
100 [Category ("NotWorking")] // too cosmetic, it just does not output xmlns:i. (insignificant)
101 public void TestWriteHeaderContent2 ()
103 TestWriteHeaderContent (new UniqueId (new byte [] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5}), "<dummy-root xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" />");
106 void TestWriteHeaderContent (object value, string expected)
108 MessageHeader h = MessageHeader.CreateHeader ("foo", "bar", value);
109 XmlObjectSerializer f = new DataContractSerializer (value.GetType ());
111 StringBuilder sb = new StringBuilder ();
112 XmlWriterSettings settings = new XmlWriterSettings ();
113 settings.ConformanceLevel = ConformanceLevel.Auto;
114 XmlDictionaryWriter w = XmlDictionaryWriter.CreateDictionaryWriter (
115 XmlWriter.Create (sb, settings));
117 w.WriteStartElement ("dummy-root");
118 h.WriteHeaderContents (w, MessageVersion.Soap12WSAddressing10);
119 w.WriteEndElement ();
121 string actual2 = sb.ToString ();
124 w.WriteStartElement ("dummy-root");
125 f.WriteObjectContent (w, value);
126 w.WriteEndElement ();
128 string actual1 = sb.ToString ();
130 // the output of WriteHeaderContent is the same as XmlSerializer.Serialize
131 Assert.AreEqual (expected, actual1, "#1");
132 Assert.AreEqual (expected, actual2, "#2");
136 public void TestWriteHeaderAttributes ()
138 MessageHeader h = MessageHeader.CreateHeader ("foo", "bar", 1,
139 true, "some actor", true);
140 StringBuilder sb = new StringBuilder ();
141 XmlDictionaryWriter w = XmlDictionaryWriter.CreateDictionaryWriter (XmlWriter.Create (sb));
143 h.WriteStartHeader (w, MessageVersion.Soap12WSAddressing10);
144 w.WriteEndElement ();
149 public void TestGenericConstructor ()
151 MessageHeader<int> h = new MessageHeader<int> ();
153 Assert.AreEqual (null, h.Actor);
154 Assert.AreEqual (default (int), h.Content);
155 Assert.IsFalse (h.MustUnderstand);
156 Assert.IsFalse (h.Relay);
160 public void CreateEndpointAddressTypeHeader ()
162 MessageHeader.CreateHeader (
164 "http://www.w3.org/2005/08/addressing",
165 new EndpointAddress ("http://localhost:8080"));
166 MessageHeader.CreateHeader (
168 "http://www.w3.org/2005/08/addressing",
169 new EndpointAddress ("http://localhost:8080"),
170 new DataContractSerializer (typeof (EndpointAddress)));