2 // UsernameTokenTest.cs - NUnit Test Cases for UsernameToken
5 // Sebastien Pouliot (spouliot@motus.com)
7 // (C) 2002, 2003 Motus Technologies Inc. (http://www.motus.com)
10 using NUnit.Framework;
11 using Microsoft.Web.Services.Security;
13 using System.Configuration;
14 using System.Security.Cryptography;
15 using System.Web.Services.Protocols;
18 namespace MonoTests.MS.Web.Services.Security {
21 public class UsernameTokenTest : Assertion {
24 public void Constructor_UP ()
26 UsernameToken token = new UsernameToken ("me", "mine");
27 AssertEquals ("Username", "me", token.Username);
28 AssertEquals ("Password", "mine", token.Password);
29 AssertEquals ("PasswordOption", PasswordOption.SendNone, token.PasswordOption);
30 AssertNull ("Nonce", token.Nonce);
34 public void Constructor_UPO ()
36 UsernameToken token = new UsernameToken ("me", "mine", PasswordOption.SendNone);
37 AssertEquals ("SendNone", PasswordOption.SendNone, token.PasswordOption);
38 AssertNull ("Nonce", token.Nonce);
40 token = new UsernameToken ("me", "mine", PasswordOption.SendPlainText);
41 AssertEquals ("SendPlainText", PasswordOption.SendPlainText, token.PasswordOption);
42 AssertNull ("Nonce", token.Nonce);
44 token = new UsernameToken ("me", "mine", PasswordOption.SendHashed);
45 AssertEquals ("SendHashed", PasswordOption.SendHashed, token.PasswordOption);
46 AssertNull ("Nonce", token.Nonce); // strange - must be generated later...
50 [ExpectedException (typeof (ArgumentNullException))]
51 public void Constructor_NullUsername ()
53 UsernameToken token = new UsernameToken (null, "mine");
57 [ExpectedException (typeof (ArgumentNullException))]
58 public void Constructor_EmptyUsername ()
60 UsernameToken token = new UsernameToken ("", "mine");
64 [ExpectedException (typeof (ArgumentNullException))]
65 public void Constructor_NullPassword ()
67 UsernameToken token = new UsernameToken ("me", null);
71 [ExpectedException (typeof (ArgumentNullException))]
72 public void Constructor_EmptyPassword ()
74 UsernameToken token = new UsernameToken ("me", "");
78 [ExpectedException (typeof (ArgumentNullException))]
79 public void Constructor_NullElement ()
81 UsernameToken token = new UsernameToken (null);
85 public void Created ()
87 UsernameToken token = new UsernameToken ("me", "mine");
88 AssertEquals ("Created before GetXml", DateTime.MinValue, token.Created);
90 XmlDocument doc = new XmlDocument ();
91 XmlElement xel = token.GetXml (doc);
92 Assert ("Created after GetXml", DateTime.MinValue < token.Created);
96 [ExpectedException (typeof (InvalidOperationException))]
97 public void AuthenticationKey_BeforeGetXml ()
99 UsernameToken token = new UsernameToken ("me", "mine");
100 AssertNotNull ("AuthenticationKey", token.AuthenticationKey);
104 [Ignore("this works on MS only when stepping in debugger")]
105 public void AuthenticationKey_AfterGetXml ()
107 UsernameToken token = new UsernameToken ("me", "mine");
108 XmlDocument doc = new XmlDocument ();
109 XmlElement xel = token.GetXml (doc);
110 AssertNotNull ("AuthenticationKey", token.AuthenticationKey);
114 [ExpectedException (typeof (NotSupportedException))]
115 public void DecryptionKey ()
117 UsernameToken token = new UsernameToken ("me", "mine");
118 AssertNotNull ("DecryptionKey", token.DecryptionKey);
122 [ExpectedException (typeof (NotSupportedException))]
123 public void EncryptionKey ()
125 UsernameToken token = new UsernameToken ("me", "mine");
126 AssertNotNull ("EncryptionKey", token.EncryptionKey);
130 public void SignatureKey ()
132 UsernameToken token = new UsernameToken ("me", "mine");
133 AssertNotNull ("SignatureKey", token.SignatureKey);
134 // TODO use signature key
138 public void Password ()
140 UsernameToken token = new UsernameToken ("me", "mine");
141 AssertEquals ("mine", token.Password);
142 AssertEquals ("SendNone(implicit)", PasswordOption.SendNone, token.PasswordOption);
144 token = new UsernameToken ("me", "none", PasswordOption.SendNone);
145 AssertEquals ("Password", "none", token.Password);
146 AssertEquals ("SendNone(explicit)", PasswordOption.SendNone, token.PasswordOption);
152 UsernameToken token = new UsernameToken ("me", "mine");
153 AssertNull ("Nonce before GetXml", token.Nonce);
155 XmlDocument doc = new XmlDocument ();
156 XmlElement xel = token.GetXml (doc);
157 AssertNotNull ("Nonce after GetXml", token.Nonce);
161 public void Supports ()
163 UsernameToken token = new UsernameToken ("me", "mine");
164 Assert ("SupportsDataEncryption", !token.SupportsDataEncryption);
165 Assert ("SupportsDigitalSignature", token.SupportsDigitalSignature);
169 [ExpectedException (typeof (ArgumentNullException))]
170 public void GetXmlNull ()
172 UsernameToken token = new UsernameToken ("me", "mine");
173 XmlElement xel = token.GetXml (null);
177 public void GetXml ()
179 UsernameToken token = new UsernameToken ("me", "mine");
180 XmlDocument doc = new XmlDocument ();
181 string xml = token.GetXml (doc).OuterXml;
182 Assert ("Id", xml.IndexOf (" wsu:Id=\"SecurityToken-") > 0);
183 Assert ("Username", xml.IndexOf ("<wsse:Username>me</wsse:Username>") > 0);
184 Assert ("Password", xml.IndexOf ("<wsse:Password>mine</wsse:Password>") < 0);
185 Assert ("Nonce", xml.IndexOf ("<wsse:Nonce>") > 0);
186 Assert ("Created", xml.IndexOf ("<wsu:Created>") > 0);
188 token = new UsernameToken ("me", "mine", PasswordOption.SendPlainText);
189 xml = token.GetXml (doc).OuterXml;
190 Assert ("Id", xml.IndexOf (" wsu:Id=\"SecurityToken-") > 0);
191 Assert ("Username", xml.IndexOf ("<wsse:Username>me</wsse:Username>") > 0);
192 Assert ("Password", xml.IndexOf ("<wsse:Password Type=\"wsse:PasswordText\">mine</wsse:Password>") > 0);
193 Assert ("Nonce", xml.IndexOf ("<wsse:Nonce>") > 0);
194 Assert ("Created", xml.IndexOf ("<wsu:Created>") > 0);
196 token = new UsernameToken ("me", "mine", PasswordOption.SendHashed);
197 xml = token.GetXml (doc).OuterXml;
198 Assert ("Id", xml.IndexOf (" wsu:Id=\"SecurityToken-") > 0);
199 Assert ("Username", xml.IndexOf ("<wsse:Username>me</wsse:Username>") > 0);
200 Assert ("Password", xml.IndexOf ("<wsse:Password Type=\"wsse:PasswordDigest\">") > 0);
201 Assert ("Nonce", xml.IndexOf ("<wsse:Nonce>") > 0);
202 Assert ("Created", xml.IndexOf ("<wsu:Created>") > 0);
206 [ExpectedException (typeof (ArgumentNullException))]
207 public void LoadXmlNull ()
209 UsernameToken token = new UsernameToken ("me", "mine");
210 token.LoadXml (null);
214 [ExpectedException (typeof (ArgumentException))]
215 public void LoadXml_BadElement ()
217 UsernameToken token = new UsernameToken ("me", "mine");
218 XmlDocument doc = new XmlDocument ();
219 // bad element (Timestamp case is invalid)
220 doc.LoadXml ("<wsu:timeStamp xmlns:wsu=\"http://schemas.xmlsoap.org/ws/2002/07/utility\" />");
221 token.LoadXml (doc.DocumentElement);
225 [ExpectedException (typeof (ConfigurationException))]
226 public void LoadXml_WithoutPasswordProvider ()
228 string xml = "<wsse:UsernameToken xmlns:wsu=\"http://schemas.xmlsoap.org/ws/2002/07/utility\" wsu:Id=\"SecurityToken-a567950c-ceb7-4fb6-b78f-10aeb7078985\" xmlns:wsse=\"http://schemas.xmlsoap.org/ws/2002/07/secext\"><wsse:Username>me</wsse:Username><wsse:Nonce>U98BosqSRZFZAH9Izw4k7Q==</wsse:Nonce><wsu:Created>2003-09-10T01:33:13Z</wsu:Created></wsse:UsernameToken>";
229 XmlDocument doc = new XmlDocument ();
231 UsernameToken token = new UsernameToken (doc.DocumentElement);
236 [ExpectedException (typeof (ConfigurationException))]
237 // [Ignore("requires setting up a PasswordProvider - strange because no password is sent !?!")]
238 // sample taken from http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnglobspec/html/ws-security.asp
239 public void LoadXml_PasswordNone ()
241 string xml = "<wsse:UsernameToken xmlns:wsu=\"http://schemas.xmlsoap.org/ws/2002/07/utility\" wsu:Id=\"SecurityToken-a567950c-ceb7-4fb6-b78f-10aeb7078985\" xmlns:wsse=\"http://schemas.xmlsoap.org/ws/2002/07/secext\"><wsse:Username>me</wsse:Username><wsse:Nonce>U98BosqSRZFZAH9Izw4k7Q==</wsse:Nonce><wsu:Created>2003-09-10T01:33:13Z</wsu:Created></wsse:UsernameToken>";
242 XmlDocument doc = new XmlDocument ();
244 UsernameToken token = new UsernameToken (doc.DocumentElement);
245 XmlElement xel = token.GetXml (doc);
246 // TODO - with a PasswordProvider
250 [ExpectedException (typeof (ConfigurationException))]
251 // [Ignore("requires setting up a PasswordProvider")]
252 // sample taken from http://msdn.microsoft.com/webservices/building/wse/default.aspx?pull=/library/en-us/dnwebsrv/html/wssecdrill.asp
253 public void LoadXml_PasswordText ()
255 string xml = "<wsse:UsernameToken xmlns:wsu=\"http://schemas.xmlsoap.org/ws/2002/07/utility\" wsu:Id=\"SecurityToken-c7ef4231-4397-4b4b-ab8d-0ea3fad1f79e\" xmlns:wsse=\"http://schemas.xmlsoap.org/ws/2002/07/secext\"><wsse:Username>domain_name\\joeblow</wsse:Username><wsse:Password Type=\"wsse:PasswordText\">NoTelinNE1</wsse:Password><wsse:Nonce>QLSVRt9g3e19jJXJYhtBKA==</wsse:Nonce><wsu:Created>2003-07-05T22:37:52Z</wsu:Created></wsse:UsernameToken>";
256 XmlDocument doc = new XmlDocument ();
258 UsernameToken token = new UsernameToken (doc.DocumentElement);
259 XmlElement xel = token.GetXml (doc);
260 // TODO - with a PasswordProvider
264 [ExpectedException (typeof (ConfigurationException))]
265 // [Ignore("requires setting up a PasswordProvider")]
266 public void LoadXml_PasswordHashed ()
268 string xml = "<wsse:UsernameToken xmlns:wsu=\"http://schemas.xmlsoap.org/ws/2002/07/utility\" wsu:Id=\"SecurityToken-536806c1-ef07-4a46-9876-4cae214a7db7\" xmlns:wsse=\"http://schemas.xmlsoap.org/ws/2002/07/secext\"><wsse:Username>me</wsse:Username><wsse:Password Type=\"wsse:PasswordDigest\">mvFakbZuqOwWZ+ULU0CYy1YAYtM=</wsse:Password><wsse:Nonce>IHMGSS18kXhPqBqRZezDNg==</wsse:Nonce><wsu:Created>2003-09-13T17:51:54Z</wsu:Created></wsse:UsernameToken>";
269 XmlDocument doc = new XmlDocument ();
271 UsernameToken token = new UsernameToken (doc.DocumentElement);
272 XmlElement xel = token.GetXml (doc);
273 // TODO - with a PasswordProvider