2010-02-09 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mcs / class / System.ServiceModel / Test / System.ServiceModel.Security.Tokens / UserNameSecurityTokenParametersTest.cs
1 //
2 // UserNameSecurityTokenParametersTest.cs
3 //
4 // Author:
5 //      Atsushi Enomoto <atsushi@ximian.com>
6 //
7 // Copyright (C) 2006 Novell, Inc.  http://www.novell.com
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 // 
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 // 
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28 using System;
29 using System.Collections.Generic;
30 using System.Collections.ObjectModel;
31 using System.IdentityModel.Selectors;
32 using System.IdentityModel.Tokens;
33 using System.Security.Cryptography;
34 using System.ServiceModel;
35 using System.ServiceModel.Channels;
36 using System.ServiceModel.Security;
37 using System.ServiceModel.Security.Tokens;
38 using NUnit.Framework;
39
40 namespace MonoTests.System.ServiceModel
41 {
42         [TestFixture]
43         public class UserNameSecurityTokenParametersTest
44         {
45                 class MyUserNameSecurityTokenParameters : UserNameSecurityTokenParameters
46                 {
47                         public bool HasAsymmetricKeyEx {
48                                 get { return HasAsymmetricKey; }
49                         }
50
51                         public bool SupportsClientAuthenticationEx {
52                                 get { return SupportsClientAuthentication; }
53                         }
54
55                         public bool SupportsClientWindowsIdentityEx {
56                                 get { return SupportsClientWindowsIdentity; }
57                         }
58
59                         public bool SupportsServerAuthenticationEx {
60                                 get { return SupportsServerAuthentication; }
61                         }
62
63                         public SecurityKeyIdentifierClause CreateKeyClause (
64                                 SecurityToken token, SecurityTokenReferenceStyle referenceStyle)
65                         {
66                                 return CreateKeyIdentifierClause (token, referenceStyle);
67                         }
68
69                         public void InitRequirement (SecurityTokenRequirement requirement)
70                         {
71                                 InitializeSecurityTokenRequirement (requirement);
72                         }
73                 }
74
75                 [Test]
76                 public void DefaultValues ()
77                 {
78                         MyUserNameSecurityTokenParameters tp = new MyUserNameSecurityTokenParameters ();
79                         Assert.AreEqual (SecurityTokenInclusionMode.AlwaysToRecipient, tp.InclusionMode, "#1");
80                         Assert.AreEqual (SecurityTokenReferenceStyle.Internal, tp.ReferenceStyle, "#2");
81                         Assert.AreEqual (false, tp.RequireDerivedKeys, "#3");
82                         Assert.AreEqual (false, tp.HasAsymmetricKeyEx, "#4");
83                         Assert.AreEqual (true, tp.SupportsClientAuthenticationEx, "#5");
84                         Assert.AreEqual (true, tp.SupportsClientWindowsIdentityEx, "#6");
85                         Assert.AreEqual (false, tp.SupportsServerAuthenticationEx, "#7");
86                 }
87
88                 [Test]
89                 [ExpectedException (typeof (ArgumentNullException))]
90                 public void CreateKeyIdentifierClauseNullToken ()
91                 {
92                         new MyUserNameSecurityTokenParameters ().CreateKeyClause (null, SecurityTokenReferenceStyle.Internal);
93                 }
94
95                 [Test]
96                 [ExpectedException (typeof (NotSupportedException))]
97                 public void CreateKeyIdentifierClauseNotSupportedToken ()
98                 {
99                         new MyUserNameSecurityTokenParameters ().CreateKeyClause (new RsaSecurityToken (RSA.Create ()), SecurityTokenReferenceStyle.Internal);
100                 }
101
102                 [Test]
103                 public void CreateKeyIdentifierClause ()
104                 {
105                         MyUserNameSecurityTokenParameters p =
106                                 new MyUserNameSecurityTokenParameters ();
107                         UserNameSecurityToken token =
108                                 new UserNameSecurityToken ("mono", "pass");
109                         SecurityKeyIdentifierClause c = p.CreateKeyClause (token, SecurityTokenReferenceStyle.Internal);
110                         Assert.IsTrue (c is LocalIdKeyIdentifierClause, "#1");
111
112                         try {
113                                 p.CreateKeyClause (token, SecurityTokenReferenceStyle.External);
114                                 Assert.Fail ("External identifier clause cannot be created.");
115                         } catch (NotSupportedException) {
116                         }
117                 }
118         }
119 }