Set fourth file version digit to signify rebuild.
[shibboleth/cpp-xmltooling.git] / xmltoolingtest / KeyInfoTest.h
1 /**
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.
6  *
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
10  * License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
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.
19  */
20
21 #include "XMLObjectBaseTestCase.h"
22
23 #include <fstream>
24 #include <xmltooling/signature/KeyInfo.h>
25 #include <xmltooling/validation/ValidatorSuite.h>
26
27 using namespace xmlsignature;
28
29 class KeyInfoTest : public CxxTest::TestSuite {
30 public:
31     KeyInfoTest() {}
32
33     void setUp() {
34         XMLObjectBuilder::registerDefaultBuilder(new AnyElementBuilder());
35     }
36
37     void tearDown() {
38         XMLObjectBuilder::deregisterDefaultBuilder();
39     }
40
41     void testKeyInfo1() {
42         string path=data_path + "KeyInfo1.xml";
43         ifstream fs(path.c_str());
44         DOMDocument* doc=XMLToolingConfig::getConfig().getValidatingParser().parse(fs);
45         TS_ASSERT(doc!=nullptr);
46
47         const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement());
48         TS_ASSERT(b!=nullptr);
49
50         auto_ptr<KeyInfo> kiObject(dynamic_cast<KeyInfo*>(b->buildFromDocument(doc)));
51         TS_ASSERT(kiObject.get()!=nullptr);
52         TSM_ASSERT_EQUALS("Number of child elements was not expected value",
53             4, kiObject->getOrderedChildren().size());
54         TSM_ASSERT_EQUALS("Number of child elements was not expected value",
55             1, kiObject->getKeyValues().size());
56         TSM_ASSERT_EQUALS("Number of child elements was not expected value",
57             1, kiObject->getX509Datas().front()->getX509Certificates().size());
58
59         auto_ptr_XMLCh expected("Public Key for CN=xmldap.org, OU=Domain Control Validated, O=xmldap.org");
60         TSM_ASSERT("KeyName was not expected value", XMLString::equals(expected.get(), kiObject->getKeyNames().front()->getName()));
61
62         SchemaValidators.validate(kiObject.get());
63     }
64
65     void testKeyInfo2() {
66         string path=data_path + "KeyInfo2.xml";
67         ifstream fs(path.c_str());
68         DOMDocument* doc=XMLToolingConfig::getConfig().getValidatingParser().parse(fs);
69         TS_ASSERT(doc!=nullptr);
70
71         const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement());
72         TS_ASSERT(b!=nullptr);
73
74         auto_ptr<KeyInfo> kiObject(dynamic_cast<KeyInfo*>(b->buildFromDocument(doc)));
75         TS_ASSERT(kiObject.get()!=nullptr);
76         TSM_ASSERT_EQUALS("Number of child elements was not expected value",
77             2, kiObject->getOrderedChildren().size());
78         TSM_ASSERT_EQUALS("Number of child elements was not expected value",
79             1, kiObject->getRetrievalMethods().size());
80         TSM_ASSERT_EQUALS("Number of child elements was not expected value",
81             2, kiObject->getSPKIDatas().front()->getSPKISexps().size());
82
83         SchemaValidators.validate(kiObject.get());
84     }
85
86     void testKeyInfo3() {
87         string path=data_path + "KeyInfo3.xml";
88         ifstream fs(path.c_str());
89         DOMDocument* doc=XMLToolingConfig::getConfig().getParser().parse(fs);
90         TS_ASSERT(doc!=nullptr);
91
92         const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement());
93         TS_ASSERT(b!=nullptr);
94
95         auto_ptr<KeyInfo> kiObject(dynamic_cast<KeyInfo*>(b->buildFromDocument(doc)));
96         TS_ASSERT(kiObject.get()!=nullptr);
97         TS_ASSERT_THROWS(SchemaValidators.validate(kiObject.get()),ValidationException);
98     }
99
100     void testKeyInfo4() {
101         string path=data_path + "KeyInfo4.xml";
102         ifstream fs(path.c_str());
103         DOMDocument* doc=XMLToolingConfig::getConfig().getValidatingParser().parse(fs);
104         TS_ASSERT(doc!=nullptr);
105
106         const XMLObjectBuilder* b = XMLObjectBuilder::getBuilder(doc->getDocumentElement());
107         TS_ASSERT(b!=nullptr);
108
109         auto_ptr<KeyInfo> kiObject(dynamic_cast<KeyInfo*>(b->buildFromDocument(doc)));
110         TS_ASSERT(kiObject.get()!=nullptr);
111         TSM_ASSERT_EQUALS("Number of child elements was not expected value",
112             1, kiObject->getKeyValues().size());
113         ECKeyValue* kv = kiObject->getKeyValues().front()->getECKeyValue();
114         TSM_ASSERT("Missing ECKeyValue", kv!=nullptr);
115         TSM_ASSERT("Missing NamedCurve", kv->getNamedCurve()!=nullptr);
116         TSM_ASSERT("Missing PublicKey", kv->getPublicKey()!=nullptr);
117
118         SchemaValidators.validate(kiObject.get());
119     }
120 };