Extended KeyResolver to handle CRLs.
[shibboleth/cpp-xmltooling.git] / xmltoolingtest / InlineKeyResolverTest.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 "XMLObjectBaseTestCase.h"\r
18 \r
19 #include <fstream>\r
20 #include <xmltooling/signature/KeyResolver.h>\r
21 \r
22 using namespace xmlsignature;\r
23 \r
24 class InlineKeyResolverTest : public CxxTest::TestSuite {\r
25     KeyResolver* m_resolver;\r
26 public:\r
27     InlineKeyResolverTest() : m_resolver(NULL) {}\r
28 \r
29     void setUp() {\r
30         string config = data_path + "InlineKeyResolver.xml";\r
31         ifstream in(config.c_str());\r
32         DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(in);\r
33         XercesJanitor<DOMDocument> janitor(doc);\r
34         m_resolver=XMLToolingConfig::getConfig().KeyResolverManager.newPlugin(INLINE_KEY_RESOLVER,doc->getDocumentElement());\r
35     }\r
36 \r
37     void tearDown() {\r
38         delete m_resolver;\r
39         m_resolver=NULL;\r
40     }\r
41 \r
42     void testResolver() {\r
43         string path=data_path + "KeyInfo1.xml";\r
44         ifstream fs(path.c_str());\r
45         DOMDocument* doc=XMLToolingConfig::getConfig().getValidatingParser().parse(fs);\r
46         TS_ASSERT(doc!=NULL);\r
47         const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement());\r
48         TS_ASSERT(b!=NULL);\r
49         auto_ptr<KeyInfo> kiObject(dynamic_cast<KeyInfo*>(b->buildFromDocument(doc)));\r
50         TS_ASSERT(kiObject.get()!=NULL);\r
51 \r
52         auto_ptr<XSECCryptoKey> key(m_resolver->resolveKey(kiObject.get()));\r
53         TSM_ASSERT("Unable to resolve public key.", key.get()!=NULL);\r
54         TSM_ASSERT_EQUALS("Unexpected key type.", key->getKeyType(), XSECCryptoKey::KEY_RSA_PUBLIC);\r
55 \r
56         auto_ptr<XSECCryptoX509CRL> crl(m_resolver->resolveCRL(kiObject.get()));\r
57         TSM_ASSERT("Unable to resolve CRL.", crl.get()!=NULL);\r
58 \r
59         vector<XSECCryptoX509*> certs;\r
60         TSM_ASSERT_EQUALS("Wrong certificate count.", m_resolver->resolveCertificates(kiObject.get(), certs), 1);\r
61     }\r
62 };\r