8d550fe11da437320a333b48b9c1a9c866dbf114
[java-idp.git] / tests / edu / internet2 / middleware / shibboleth / metadata / MetadataTests.java
1 /*
2  * The Shibboleth License, Version 1. Copyright (c) 2002 University Corporation for Advanced Internet Development, Inc.
3  * All rights reserved Redistribution and use in source and binary forms, with or without modification, are permitted
4  * provided that the following conditions are met: Redistributions of source code must retain the above copyright
5  * notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the
6  * above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other
7  * materials provided with the distribution, if any, must include the following acknowledgment: "This product includes
8  * software developed by the University Corporation for Advanced Internet Development <http://www.ucaid.edu> Internet2
9  * Project. Alternately, this acknowledegement may appear in the software itself, if and wherever such third-party
10  * acknowledgments normally appear. Neither the name of Shibboleth nor the names of its contributors, nor Internet2,
11  * nor the University Corporation for Advanced Internet Development, Inc., nor UCAID may be used to endorse or promote
12  * products derived from this software without specific prior written permission. For written permission, please
13  * contact shibboleth@shibboleth.org Products derived from this software may not be called Shibboleth, Internet2,
14  * UCAID, or the University Corporation for Advanced Internet Development, nor may Shibboleth appear in their name,
15  * without prior written permission of the University Corporation for Advanced Internet Development. THIS SOFTWARE IS
16  * PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND WITH ALL FAULTS. ANY EXPRESS OR IMPLIED WARRANTIES,
17  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND
18  * NON-INFRINGEMENT ARE DISCLAIMED AND THE ENTIRE RISK OF SATISFACTORY QUALITY, PERFORMANCE, ACCURACY, AND EFFORT IS
19  * WITH LICENSEE. IN NO EVENT SHALL THE COPYRIGHT OWNER, CONTRIBUTORS OR THE UNIVERSITY CORPORATION FOR ADVANCED
20  * INTERNET DEVELOPMENT, INC. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
22  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
23  * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24  * POSSIBILITY OF SUCH DAMAGE.
25  */
26
27 package edu.internet2.middleware.shibboleth.metadata;
28
29 import java.io.File;
30 import java.util.Arrays;
31 import java.util.Iterator;
32
33 import junit.framework.TestCase;
34
35 import org.apache.log4j.BasicConfigurator;
36 import org.apache.log4j.Level;
37 import org.apache.log4j.Logger;
38 import org.opensaml.XML;
39
40 import edu.internet2.middleware.shibboleth.metadata.provider.XMLMetadata;
41
42 /**
43  * Validation suite for the <code>Metadata</code> interface.
44  * 
45  * @author Walter Hoehn
46  */
47
48 public class MetadataTests extends TestCase {
49
50
51         public MetadataTests(String name) {
52                 super(name);
53                 BasicConfigurator.resetConfiguration();
54                 BasicConfigurator.configure();
55                 Logger.getRootLogger().setLevel(Level.OFF);
56         }
57
58         public static void main(String[] args) {
59                 junit.textui.TestRunner.run(MetadataTests.class);
60                 BasicConfigurator.configure();
61                 Logger.getRootLogger().setLevel(Level.OFF);
62         }
63
64         protected void setUp() throws Exception {
65                 super.setUp();
66
67         }
68
69         public void testBasicShibbolethXML() {
70
71                 try {
72                         Metadata metadata = new XMLMetadata(new File("data/sites1.xml").toURL().toString());
73
74                         assertNotNull("Unable to find test provider", metadata.lookup("bahsite"));
75                         assertNotNull("Unable to find test provider", metadata.lookup("rootsite"));
76
77             /* TODO: rework to walk tree
78                         assertTrue("Group list is incorrect or out of order.", Arrays.equals(new String[]{"urn:mace:inqueue",
79                                         "foofed", "bahfed"}, metadata.lookup("bahsite").getGroups()));
80                                         */
81             
82                         //This should probably be made more robust at some point
83                         assertNotNull("Incorrect provider role.", metadata.lookup("bahsite").getSPSSODescriptor(XML.SAML11_PROTOCOL_ENUM));
84
85                         assertEquals("Incorrect parsing of assertion consumer URL.",
86                     ((Endpoint)metadata.lookup("bahsite").getSPSSODescriptor(XML.SAML11_PROTOCOL_ENUM).getAssertionConsumerServiceManager().getEndpoints().next()).getLocation(),
87                     "http://foo.com/SHIRE"
88                     );
89
90             Iterator keys = metadata.lookup("rootsite").getSPSSODescriptor(XML.SAML11_PROTOCOL_ENUM).getKeyDescriptors();
91             KeyDescriptor key1 = (KeyDescriptor)keys.next();
92             KeyDescriptor key2 = (KeyDescriptor)keys.next();
93                         assertTrue("Incorrect attribute requester key parsing.", key1 != null && key2 != null);
94
95                         String[] control = new String[]{
96                                         "C=US, ST=Tennessee, L=Memphis, O=The University of Memphis, OU=Information Systems, CN=test2.memphis.edu",
97                                         "C=US, ST=Tennessee, L=Memphis, O=The University of Memphis, OU=Information Systems, CN=test1.memphis.edu"};
98                         String[] meta = new String[] {
99                                         key1.getKeyInfo().itemKeyName(0).getKeyName(),
100                                         key2.getKeyInfo().itemKeyName(0).getKeyName()
101                     };
102                         Arrays.sort(meta);
103                         Arrays.sort(control);
104                         assertTrue("Encountered unexpected key names", Arrays.equals(control, meta));
105                 } catch (Exception e) {
106                         fail("Failed to correctly load metadata: " + e);
107                 }
108         }
109
110     public void testBasicSAMLXML() {
111
112         try {
113             Metadata metadata = new XMLMetadata(new File("src/conf/IQ-sites.xml").toURL().toString());
114
115             EntityDescriptor entity = metadata.lookup("urn:mace:inqueue:example.edu");
116             
117             assertNotNull("Unable to find test provider", entity);
118             assertEquals("Descriptor group is wrong.", entity.getEntitiesDescriptor().getName(),"urn:mace:inqueue");
119             
120             IDPSSODescriptor idp = entity.getIDPSSODescriptor(edu.internet2.middleware.shibboleth.common.XML.SHIB_NS);
121             AttributeAuthorityDescriptor aa = entity.getAttributeAuthorityDescriptor(XML.SAML11_PROTOCOL_ENUM);
122             SPSSODescriptor sp = entity.getSPSSODescriptor(XML.SAML11_PROTOCOL_ENUM);
123             
124             assertNotNull("Missing IdP provider role.", idp);
125             assertNotNull("Missing AA provider role.", aa);
126             assertNotNull("Missing SP provider role.", sp);
127
128             assertEquals("Incorrect assertion consumer service location.",
129                     ((Endpoint)sp.getAssertionConsumerServiceManager().getEndpoints().next()).getLocation(),
130                     "https://wayf.internet2.edu/Shibboleth.shire"
131                     );
132
133             Iterator keys = sp.getKeyDescriptors();
134             KeyDescriptor key = (KeyDescriptor)keys.next();
135             assertNotNull("Incorrect attribute requester key parsing.", key);
136
137             String[] control = new String[]{"wayf.internet2.edu"};
138             String[] meta = new String[] {
139                     key.getKeyInfo().itemKeyName(0).getKeyName()
140                     };
141             Arrays.sort(meta);
142             Arrays.sort(control);
143             assertTrue("Encountered unexpected key names", Arrays.equals(control, meta));
144         } catch (Exception e) {
145             fail("Failed to correctly load metadata: " + e);
146         }
147     }
148 }