MessageHeaderTest.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Runtime.Serialization;
  5. using System.ServiceModel;
  6. using System.ServiceModel.Channels;
  7. using System.Text;
  8. using System.Xml;
  9. using NUnit.Framework;
  10. namespace MonoTests.System.ServiceModel.Channels
  11. {
  12. [TestFixture]
  13. public class MessageHeaderTest
  14. {
  15. [Test]
  16. public void TestDefaultValues ()
  17. {
  18. MessageHeader h = MessageHeader.CreateHeader ("foo", "bar", 1);
  19. Assert.AreEqual (String.Empty, h.Actor);
  20. Assert.IsFalse (h.MustUnderstand);
  21. Assert.IsFalse (h.Relay);
  22. }
  23. [Test]
  24. public void TestIsMessageVersionSupported ()
  25. {
  26. MessageHeader h;
  27. // by default, both versions are supported.
  28. h = MessageHeader.CreateHeader ("foo", "bar", 1);
  29. Assert.IsTrue (h.IsMessageVersionSupported (MessageVersion.Soap11WSAddressing10), "#1");
  30. Assert.IsTrue (h.IsMessageVersionSupported (MessageVersion.Soap12WSAddressing10), "#2");
  31. // SOAP 1.1 is not supported if Actor == Soap12.NextDestinationActorValue
  32. h = MessageHeader.CreateHeader ("foo", "bar", 1, false, MessageVersion.Soap12WSAddressing10.Envelope.NextDestinationActorValue);
  33. Assert.IsFalse (h.IsMessageVersionSupported (MessageVersion.Soap11WSAddressing10), "#3");
  34. Assert.IsTrue (h.IsMessageVersionSupported (MessageVersion.Soap12WSAddressing10), "#4");
  35. // SOAP 1.1 is not supported if Actor == Soap12's UltimateDestinationActor
  36. h = MessageHeader.CreateHeader ("foo", "bar", 1, false, MessageVersion.Soap12WSAddressing10.Envelope.GetUltimateDestinationActorValues () [1]);
  37. Assert.IsFalse (h.IsMessageVersionSupported (MessageVersion.Soap11WSAddressing10), "#5");
  38. Assert.IsTrue (h.IsMessageVersionSupported (MessageVersion.Soap12WSAddressing10), "#6");
  39. // SOAP 1.2 is not supported if Actor == Soap11.NextDestinationActorValue
  40. h = MessageHeader.CreateHeader ("foo", "bar", 1, false, MessageVersion.Soap11WSAddressing10.Envelope.NextDestinationActorValue);
  41. Assert.IsTrue (h.IsMessageVersionSupported (MessageVersion.Soap11WSAddressing10), "#7");
  42. Assert.IsFalse (h.IsMessageVersionSupported (MessageVersion.Soap12WSAddressing10), "#8");
  43. }
  44. [Test]
  45. public void TestToString ()
  46. {
  47. MessageHeader h = MessageHeader.CreateHeader ("foo", "bar", 1);
  48. StringBuilder sb = new StringBuilder ();
  49. XmlWriterSettings settings = new XmlWriterSettings ();
  50. settings.OmitXmlDeclaration = true;
  51. settings.Indent = true;
  52. XmlWriter w = XmlWriter.Create (sb, settings);
  53. h.WriteHeader (w, MessageVersion.Soap12WSAddressing10);
  54. w.Close ();
  55. // ToString is the same as WriteHeader (minus the XML declaration)
  56. Assert.AreEqual (sb.ToString (), h.ToString ());
  57. }
  58. [Test]
  59. public void TestWriteStartHeader ()
  60. {
  61. int value = 1;
  62. MessageHeader h = MessageHeader.CreateHeader ("foo", "bar", value);
  63. StringBuilder sb = new StringBuilder ();
  64. XmlDictionaryWriter w = XmlDictionaryWriter.CreateDictionaryWriter (
  65. XmlWriter.Create (sb));
  66. h.WriteStartHeader (w, MessageVersion.Soap12WSAddressing10);
  67. w.Close ();
  68. string actual = sb.ToString ();
  69. sb = new StringBuilder ();
  70. XmlWriter w2 = XmlWriter.Create (sb);
  71. w2.WriteStartElement (h.Name, h.Namespace);
  72. w2.Close ();
  73. string expected = sb.ToString ();
  74. // WriteStartHeader == WriteStartElement (msg.Name, msg.Namespace)
  75. Assert.AreEqual (expected, actual);
  76. }
  77. [Test]
  78. [Category ("NotWorking")]
  79. public void TestWriteHeaderContent ()
  80. {
  81. int value = 1;
  82. MessageHeader h = MessageHeader.CreateHeader ("foo", "bar", value);
  83. XmlObjectSerializer f = new DataContractSerializer (typeof (int));
  84. StringBuilder sb = new StringBuilder ();
  85. XmlWriterSettings settings = new XmlWriterSettings ();
  86. settings.ConformanceLevel = ConformanceLevel.Auto;
  87. XmlDictionaryWriter w = XmlDictionaryWriter.CreateDictionaryWriter (
  88. XmlWriter.Create (sb, settings));
  89. w.WriteStartElement ("dummy-root");
  90. h.WriteHeaderContents (w, MessageVersion.Soap12WSAddressing10);
  91. w.WriteEndElement ();
  92. w.Flush ();
  93. string actual = sb.ToString ();
  94. f.WriteObject (w, value);
  95. string expected = sb.ToString ();
  96. // the output of WriteHeaderContent is the same as XmlSerializer.Serialize
  97. Assert.AreEqual (expected, actual);
  98. }
  99. [Test]
  100. public void TestWriteHeaderAttributes ()
  101. {
  102. MessageHeader h = MessageHeader.CreateHeader ("foo", "bar", 1,
  103. true, "some actor", true);
  104. StringBuilder sb = new StringBuilder ();
  105. XmlDictionaryWriter w = XmlDictionaryWriter.CreateDictionaryWriter (XmlWriter.Create (sb));
  106. h.WriteStartHeader (w, MessageVersion.Soap12WSAddressing10);
  107. w.WriteEndElement ();
  108. w.Close ();
  109. }
  110. [Test]
  111. public void TestGenericConstructor ()
  112. {
  113. MessageHeader<int> h = new MessageHeader<int> ();
  114. Assert.AreEqual (null, h.Actor);
  115. Assert.AreEqual (default (int), h.Content);
  116. Assert.IsFalse (h.MustUnderstand);
  117. Assert.IsFalse (h.Relay);
  118. }
  119. [Test]
  120. public void CreateEndpointAddressTypeHeader ()
  121. {
  122. MessageHeader.CreateHeader (
  123. "ReplyTo",
  124. "http://www.w3.org/2005/08/addressing",
  125. new EndpointAddress ("http://localhost:8080"));
  126. MessageHeader.CreateHeader (
  127. "ReplyTo",
  128. "http://www.w3.org/2005/08/addressing",
  129. new EndpointAddress ("http://localhost:8080"),
  130. new DataContractSerializer (typeof (EndpointAddress)));
  131. }
  132. }
  133. }