2 * Licensed to the University Corporation for Advanced Internet
3 * Development, Inc. (UCAID) under one or more contributor license
4 * agreements. See the NOTICE file distributed with this work for
5 * additional information regarding copyright ownership.
7 * UCAID licenses this file to you under the Apache License,
8 * Version 2.0 (the "License"); you may not use this file except
9 * in compliance with the License. You may obtain a copy of the
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
17 * either express or implied. See the License for the specific
18 * language governing permissions and limitations under the License.
22 #include <saml/saml2/core/Assertions.h>
23 #include <saml/util/SAMLConstants.h>
25 using namespace opensaml::saml2;
28 This tests building an element of type NameIDType with a non-SAML element name and namespace
31 class NameIDType20Test : public CxxTest::TestSuite, public SAMLObjectBaseTestCase {
32 XMLCh* expectedNameQualifier;
33 XMLCh* expectedSPNameQualifier;
34 XMLCh* expectedFormat;
35 XMLCh* expectedSPProvidedID;
36 XMLCh* expectedContent;
38 //TODO possibly move these up to SAMLObjectBaseTestCase, for use in optional helper methods below
42 const XMLCh* typeName;
44 const XMLCh* typePrefix;
48 expectedNameQualifier = XMLString::transcode("nq");
49 expectedSPNameQualifier = XMLString::transcode("spnq");
50 expectedFormat = XMLString::transcode("format");
51 expectedSPProvidedID = XMLString::transcode("spID");
52 expectedContent = XMLString::transcode("someNameID");
54 elementName = XMLString::transcode("Foo");;
55 elementNS = XMLString::transcode("http://www.example.org/test");
56 elementPrefix = XMLString::transcode("test");;
57 typeName = NameIDType::TYPE_NAME;
58 typeNS = samlconstants::SAML20_NS;
59 typePrefix = samlconstants::SAML20_PREFIX;
61 singleElementFile = data_path + "saml2/core/impl/NameIDType.xml";
62 singleElementOptionalAttributesFile = data_path + "saml2/core/impl/NameIDTypeOptionalAttributes.xml";
63 SAMLObjectBaseTestCase::setUp();
67 XMLString::release(&expectedNameQualifier);
68 XMLString::release(&expectedSPNameQualifier);
69 XMLString::release(&expectedFormat);
70 XMLString::release(&expectedSPProvidedID);
71 XMLString::release(&expectedContent);
72 XMLString::release(&elementName);
73 XMLString::release(&elementNS);
74 XMLString::release(&elementPrefix);
75 SAMLObjectBaseTestCase::tearDown();
78 //TODO possibly move this functionality up to SAMLObjectBaseTestCase, as optional helper method
79 void checkNameAndType(XMLObject* xo) {
80 assertEquals("Element name", elementName, xo->getElementQName().getLocalPart());
81 assertEquals("Element namespace", elementNS, xo->getElementQName().getNamespaceURI());
82 assertEquals("Element namespace prefix", elementPrefix, xo->getElementQName().getPrefix());
84 assertEquals("Schema type name", typeName, xo->getSchemaType()->getLocalPart());
85 assertEquals("Schema type namespace", typeNS, xo->getSchemaType()->getNamespaceURI());
86 assertEquals("Schema type namespace prefix", typePrefix, xo->getSchemaType()->getPrefix());
89 //TODO possibly move this functionality up to SAMLObjectBaseTestCase, as optional helper method
90 XMLObject * buildObject() {
91 const XMLObjectBuilder* builder = XMLObjectBuilder::getBuilder(xmltooling::QName(typeNS,typeName));
92 xmltooling::QName type(typeNS,typeName,typePrefix);
93 return builder->buildObject(elementNS, elementName, elementPrefix, &type);
96 void testSingleElementUnmarshall() {
97 auto_ptr<XMLObject> xo(unmarshallElement(singleElementFile));
98 NameIDType* nameid = dynamic_cast<NameIDType*>(xo.get());
99 TS_ASSERT(nameid!=nullptr);
101 checkNameAndType(nameid);
103 assertEquals("Element content", expectedContent, nameid->getName());
106 void testSingleElementOptionalAttributesUnmarshall() {
107 auto_ptr<XMLObject> xo(unmarshallElement(singleElementOptionalAttributesFile));
108 NameIDType* nameid = dynamic_cast<NameIDType*>(xo.get());
109 TS_ASSERT(nameid!=nullptr);
111 checkNameAndType(nameid);
113 assertEquals("NameQualifier attribute", expectedNameQualifier, nameid->getNameQualifier());
114 assertEquals("SPNameQualifier attribute", expectedSPNameQualifier, nameid->getSPNameQualifier());
115 assertEquals("Format attribute", expectedFormat, nameid->getFormat());
116 assertEquals("SPProvidedID attribute", expectedSPProvidedID, nameid->getSPProvidedID());
117 assertEquals("Element content", expectedContent, nameid->getName());
121 void testSingleElementMarshall() {
122 NameIDType* nameid = dynamic_cast<NameIDType*>(buildObject());
123 TS_ASSERT(nameid!=nullptr);
124 checkNameAndType(nameid);
126 nameid->setName(expectedContent);
127 assertEquals(expectedDOM, nameid);
130 void testSingleElementOptionalAttributesMarshall() {
131 NameIDType* nameid = dynamic_cast<NameIDType*>(buildObject());
132 TS_ASSERT(nameid!=nullptr);
133 checkNameAndType(nameid);
135 nameid->setNameQualifier(expectedNameQualifier);
136 nameid->setSPNameQualifier(expectedSPNameQualifier);
137 nameid->setFormat(expectedFormat);
138 nameid->setSPProvidedID(expectedSPProvidedID);
139 nameid->setName(expectedContent);
140 assertEquals(expectedOptionalAttributesDOM, nameid);