View Javadoc
1   /**
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements. See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership. The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License. You may obtain a copy of the License at
9    *
10   * http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied. See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.wss4j.policy.tests;
20  
21  import java.io.BufferedReader;
22  import java.io.ByteArrayInputStream;
23  import java.io.InputStreamReader;
24  import java.io.StringWriter;
25  import java.nio.charset.StandardCharsets;
26  
27  import javax.xml.stream.XMLOutputFactory;
28  import javax.xml.stream.XMLStreamWriter;
29  
30  import org.apache.neethi.AssertionBuilderFactory;
31  import org.apache.neethi.Policy;
32  import org.apache.neethi.PolicyBuilder;
33  import org.apache.wss4j.policy.builders.AlgorithmSuiteBuilder;
34  import org.apache.wss4j.policy.builders.AsymmetricBindingBuilder;
35  import org.apache.wss4j.policy.builders.BootstrapPolicyBuilder;
36  import org.apache.wss4j.policy.builders.ContentEncryptedElementsBuilder;
37  import org.apache.wss4j.policy.builders.EncryptedElementsBuilder;
38  import org.apache.wss4j.policy.builders.EncryptedPartsBuilder;
39  import org.apache.wss4j.policy.builders.EncryptionTokenBuilder;
40  import org.apache.wss4j.policy.builders.HttpsTokenBuilder;
41  import org.apache.wss4j.policy.builders.InitiatorEncryptionTokenBuilder;
42  import org.apache.wss4j.policy.builders.InitiatorSignatureTokenBuilder;
43  import org.apache.wss4j.policy.builders.InitiatorTokenBuilder;
44  import org.apache.wss4j.policy.builders.IssuedTokenBuilder;
45  import org.apache.wss4j.policy.builders.KerberosTokenBuilder;
46  import org.apache.wss4j.policy.builders.KeyValueTokenBuilder;
47  import org.apache.wss4j.policy.builders.LayoutBuilder;
48  import org.apache.wss4j.policy.builders.ProtectionTokenBuilder;
49  import org.apache.wss4j.policy.builders.RecipientEncryptionTokenBuilder;
50  import org.apache.wss4j.policy.builders.RecipientSignatureTokenBuilder;
51  import org.apache.wss4j.policy.builders.RecipientTokenBuilder;
52  import org.apache.wss4j.policy.builders.RelTokenBuilder;
53  import org.apache.wss4j.policy.builders.RequiredElementsBuilder;
54  import org.apache.wss4j.policy.builders.RequiredPartsBuilder;
55  import org.apache.wss4j.policy.builders.SamlTokenBuilder;
56  import org.apache.wss4j.policy.builders.SecureConversationTokenBuilder;
57  import org.apache.wss4j.policy.builders.SecurityContextTokenBuilder;
58  import org.apache.wss4j.policy.builders.SignatureTokenBuilder;
59  import org.apache.wss4j.policy.builders.SignedElementsBuilder;
60  import org.apache.wss4j.policy.builders.SignedPartsBuilder;
61  import org.apache.wss4j.policy.builders.SpnegoContextTokenBuilder;
62  import org.apache.wss4j.policy.builders.SupportingTokensBuilder;
63  import org.apache.wss4j.policy.builders.SymmetricBindingBuilder;
64  import org.apache.wss4j.policy.builders.TransportBindingBuilder;
65  import org.apache.wss4j.policy.builders.TransportTokenBuilder;
66  import org.apache.wss4j.policy.builders.Trust10Builder;
67  import org.apache.wss4j.policy.builders.Trust13Builder;
68  import org.apache.wss4j.policy.builders.UsernameTokenBuilder;
69  import org.apache.wss4j.policy.builders.WSS10Builder;
70  import org.apache.wss4j.policy.builders.WSS11Builder;
71  import org.apache.wss4j.policy.builders.X509TokenBuilder;
72  import org.hamcrest.MatcherAssert;
73  import org.xmlunit.matchers.CompareMatcher;
74  
75  public abstract class AbstractTestBase {
76      protected XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance();
77  
78      protected String serializePolicy(Policy policy) throws Exception {
79          StringWriter stringWriter = new StringWriter();
80          XMLStreamWriter xmlStreamWriter = xmlOutputFactory.createXMLStreamWriter(stringWriter);
81          policy.serialize(xmlStreamWriter);
82          xmlStreamWriter.close();
83          stringWriter.close();
84          return stringWriter.toString();
85      }
86  
87      protected void assertXMLisEqual(String actual, String expected) throws Exception {
88          MatcherAssert.assertThat(actual, CompareMatcher.isIdenticalTo(expected).ignoreWhitespace());
89      }
90  
91      protected String loadPolicyFile(String classpathResource) throws Exception {
92          try (InputStreamReader isReader = new InputStreamReader(this.getClass().getClassLoader().getResourceAsStream(classpathResource), StandardCharsets.UTF_8);
93              BufferedReader bufferedReader = new BufferedReader(isReader);
94              StringWriter writer = new StringWriter()) {
95              char[] buf = new char[1024];
96              int n;
97              while ((n = bufferedReader.read(buf)) != -1) {
98                  writer.write(buf, 0, n);
99              }
100             writer.close();
101             bufferedReader.close();
102             return writer.toString();
103         }
104     }
105 
106     protected Policy loadPolicy(String policy) throws Exception {
107         PolicyBuilder policyBuilder = new PolicyBuilder();
108 
109         AssertionBuilderFactory assertionBuilderFactory = policyBuilder.getAssertionBuilderFactory();
110         assertionBuilderFactory.registerBuilder(new AlgorithmSuiteBuilder());
111         assertionBuilderFactory.registerBuilder(new AsymmetricBindingBuilder());
112         assertionBuilderFactory.registerBuilder(new ContentEncryptedElementsBuilder());
113         assertionBuilderFactory.registerBuilder(new EncryptedElementsBuilder());
114         assertionBuilderFactory.registerBuilder(new EncryptedPartsBuilder());
115         assertionBuilderFactory.registerBuilder(new EncryptionTokenBuilder());
116         assertionBuilderFactory.registerBuilder(new HttpsTokenBuilder());
117         assertionBuilderFactory.registerBuilder(new InitiatorEncryptionTokenBuilder());
118         assertionBuilderFactory.registerBuilder(new InitiatorSignatureTokenBuilder());
119         assertionBuilderFactory.registerBuilder(new InitiatorTokenBuilder());
120         assertionBuilderFactory.registerBuilder(new IssuedTokenBuilder());
121         assertionBuilderFactory.registerBuilder(new KerberosTokenBuilder());
122         assertionBuilderFactory.registerBuilder(new KeyValueTokenBuilder());
123         assertionBuilderFactory.registerBuilder(new LayoutBuilder());
124         assertionBuilderFactory.registerBuilder(new ProtectionTokenBuilder());
125         assertionBuilderFactory.registerBuilder(new RecipientEncryptionTokenBuilder());
126         assertionBuilderFactory.registerBuilder(new RecipientSignatureTokenBuilder());
127         assertionBuilderFactory.registerBuilder(new RecipientTokenBuilder());
128         assertionBuilderFactory.registerBuilder(new RelTokenBuilder());
129         assertionBuilderFactory.registerBuilder(new RequiredElementsBuilder());
130         assertionBuilderFactory.registerBuilder(new RequiredPartsBuilder());
131         assertionBuilderFactory.registerBuilder(new SamlTokenBuilder());
132         assertionBuilderFactory.registerBuilder(new SecureConversationTokenBuilder());
133         assertionBuilderFactory.registerBuilder(new BootstrapPolicyBuilder());
134         assertionBuilderFactory.registerBuilder(new SecurityContextTokenBuilder());
135         assertionBuilderFactory.registerBuilder(new SignatureTokenBuilder());
136         assertionBuilderFactory.registerBuilder(new SignedElementsBuilder());
137         assertionBuilderFactory.registerBuilder(new SignedPartsBuilder());
138         assertionBuilderFactory.registerBuilder(new SpnegoContextTokenBuilder());
139         assertionBuilderFactory.registerBuilder(new SupportingTokensBuilder());
140         assertionBuilderFactory.registerBuilder(new SymmetricBindingBuilder());
141         assertionBuilderFactory.registerBuilder(new TransportBindingBuilder());
142         assertionBuilderFactory.registerBuilder(new TransportTokenBuilder());
143         assertionBuilderFactory.registerBuilder(new Trust10Builder());
144         assertionBuilderFactory.registerBuilder(new Trust13Builder());
145         assertionBuilderFactory.registerBuilder(new UsernameTokenBuilder());
146         assertionBuilderFactory.registerBuilder(new WSS10Builder());
147         assertionBuilderFactory.registerBuilder(new WSS11Builder());
148         assertionBuilderFactory.registerBuilder(new X509TokenBuilder());
149 
150         return loadPolicy(policy, policyBuilder);
151     }
152 
153     protected Policy loadPolicy(String policy, PolicyBuilder policyBuilder) throws Exception {
154         return policyBuilder.getPolicy(new ByteArrayInputStream(policy.getBytes(StandardCharsets.UTF_8)));
155     }
156 }