Refactor some tests.
[shibboleth/cpp-opensaml.git] / samltest / signature / SAML1RequestTest.h
1 /*\r
2  *  Copyright 2001-2005 Internet2\r
3  * \r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  *     http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 \r
17 #include "signature/SAMLSignatureTestBase.h"\r
18 \r
19 #include <saml/saml1/core/Protocols.h>\r
20 \r
21 #include <fstream>\r
22 \r
23 using namespace opensaml::saml1p;\r
24 using namespace opensaml::saml1;\r
25 \r
26 class SAML1RequestTest : public CxxTest::TestSuite, public SAMLSignatureTestBase {\r
27 public:\r
28     void setUp() {\r
29         childElementsFile  = data_path + "signature/SAML1Request.xml";\r
30         SAMLSignatureTestBase::setUp();\r
31     }\r
32 \r
33     void tearDown() {\r
34         SAMLSignatureTestBase::tearDown();\r
35     }\r
36 \r
37     void testSignature() {\r
38         auto_ptr_XMLCh issueInstant("1970-01-02T01:01:02.100Z");\r
39         auto_ptr_XMLCh id("ident");\r
40         auto_ptr_XMLCh method("method");\r
41         auto_ptr_XMLCh nameid("John Doe");\r
42         \r
43         NameIdentifier* n=NameIdentifierBuilder::buildNameIdentifier();\r
44         n->setName(nameid.get());        \r
45         Subject* subject=SubjectBuilder::buildSubject();\r
46         subject->setNameIdentifier(n);\r
47 \r
48         AuthenticationQuery* query=AuthenticationQueryBuilder::buildAuthenticationQuery();\r
49         query->setAuthenticationMethod(method.get());\r
50         query->setSubject(subject);\r
51         \r
52         auto_ptr<Request> request(RequestBuilder::buildRequest());\r
53         request->setRequestID(id.get());\r
54         request->setIssueInstant(issueInstant.get());\r
55         request->setAuthenticationQuery(query);\r
56 \r
57         // Append a Signature.\r
58         Signature* sig=SignatureBuilder::buildSignature();\r
59         request->setSignature(sig);\r
60         sig->setSigningKey(m_key->clone());\r
61 \r
62         // Build KeyInfo.\r
63         KeyInfo* keyInfo=KeyInfoBuilder::buildKeyInfo();\r
64         X509Data* x509Data=X509DataBuilder::buildX509Data();\r
65         keyInfo->getX509Datas().push_back(x509Data);\r
66         for_each(m_certs.begin(),m_certs.end(),bind1st(_addcert(),x509Data));\r
67         sig->setKeyInfo(keyInfo);\r
68 \r
69         // Sign while marshalling.\r
70         vector<Signature*> sigs(1,sig);\r
71         DOMElement* rootElement = NULL;\r
72         try {\r
73             rootElement=request->marshall((DOMDocument*)NULL,&sigs);\r
74         }\r
75         catch (XMLToolingException& e) {\r
76             TS_TRACE(e.what());\r
77             throw;\r
78         }\r
79         \r
80         string buf;\r
81         XMLHelper::serialize(rootElement, buf);\r
82         istringstream in(buf);\r
83         DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(in);\r
84         const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement());\r
85 \r
86         assertEquals(expectedChildElementsDOM, b->buildFromDocument(doc));\r
87         \r
88         try {\r
89             request->getSignature()->registerValidator(new SignatureProfileValidator());\r
90             request->getSignature()->registerValidator(new SignatureValidator(new KeyResolver(m_key->clone())));\r
91             request->getSignature()->validate(true);\r
92         }\r
93         catch (XMLToolingException& e) {\r
94             TS_TRACE(e.what());\r
95             throw;\r
96         }\r
97     }\r
98 \r
99 };\r