| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| /* |
| * Copyright 2005 Sun Microsystems, Inc. All rights reserved. |
| */ |
| package javax.xml.crypto.test.dsig; |
| |
| import static org.junit.Assert.*; |
| |
| import java.io.File; |
| import java.security.NoSuchProviderException; |
| import java.security.Provider; |
| import java.security.Security; |
| |
| import javax.xml.crypto.dsig.keyinfo.*; |
| import javax.xml.crypto.*; |
| import javax.xml.crypto.dsig.*; |
| import javax.xml.crypto.dsig.dom.DOMValidateContext; |
| import javax.xml.parsers.DocumentBuilder; |
| |
| import org.apache.xml.security.utils.XMLUtils; |
| import org.w3c.dom.Document; |
| import org.w3c.dom.NodeList; |
| |
| /** |
| * Unit test for javax.xml.crypto.dsig.XMLSignatureFactory |
| * |
| */ |
| public class XMLSignatureFactoryTest { |
| |
| XMLSignatureFactory factory; |
| |
| static { |
| Security.insertProviderAt |
| (new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1); |
| } |
| |
| public XMLSignatureFactoryTest() throws Exception { |
| factory = XMLSignatureFactory.getInstance |
| ("DOM", new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI()); |
| } |
| |
| @org.junit.Test |
| public void testgetInstance() { |
| try { |
| XMLSignatureFactory.getInstance("non-existent"); |
| fail("Should throw NoSuchMechanismException if no impl found"); |
| } catch (NoSuchMechanismException ex) {} |
| |
| try { |
| XMLSignatureFactory.getInstance(null); |
| fail("Should raise a NPE for null mechanismType"); |
| } catch (NullPointerException npe) {} |
| |
| try { |
| XMLSignatureFactory.getInstance("DOM", "non-existent"); |
| fail("Should throw NoSuchProviderException if specified " + |
| "provider is not found"); |
| } catch (NoSuchProviderException nspe) { |
| } catch (NoSuchMechanismException nse) { |
| fail("Should raise a NoSuchProviderException instead of " + nse + |
| " if specified provider is not found"); |
| } |
| |
| try { |
| XMLSignatureFactory.getInstance(null); |
| fail("Should raise a NPE for null mechanismType"); |
| } catch (NullPointerException npe) {} |
| |
| try { |
| XMLSignatureFactory.getInstance("DOM", (Provider) null); |
| fail("Should raise a NPE for null provider"); |
| } catch (NullPointerException npe) {} |
| } |
| |
| @org.junit.Test |
| public void testgetMechanismType() { |
| assertNotNull(factory); |
| assertEquals("DOM", factory.getMechanismType()); |
| } |
| |
| @org.junit.Test |
| public void testisFeatureSupported() { |
| try { |
| factory.isFeatureSupported(null); |
| fail("Should raise a NPE for null feature"); |
| } catch (NullPointerException npe) {} |
| |
| assertTrue(!factory.isFeatureSupported("not supported")); |
| } |
| |
| @org.junit.Test |
| public void testgetKeyInfoFactory() throws Exception { |
| KeyInfoFactory kifac = factory.getKeyInfoFactory(); |
| assertEquals(kifac.getMechanismType(), factory.getMechanismType()); |
| assertEquals(kifac.getProvider(), factory.getProvider()); |
| } |
| |
| @org.junit.Test |
| public void testunmarshalXMLSignature() throws Exception { |
| XMLSignature stuff; |
| try { |
| stuff = factory.unmarshalXMLSignature((XMLValidateContext) null); |
| fail("Should raise an NPE for null inputs"); |
| } catch (NullPointerException ex) { |
| } catch (Exception ex) { |
| fail("Should throw an NPE instead of " + ex + |
| " for null inputs"); |
| } |
| |
| try { |
| stuff = factory.unmarshalXMLSignature( |
| new XMLValidateContext() { |
| public Object getProperty(String name) { return null; } |
| public Object setProperty(String name, Object property) { |
| return null; |
| } |
| public String getBaseURI() { return null; } |
| public void setBaseURI(String uri) { } |
| public KeySelector getKeySelector() { return null; } |
| public void setKeySelector(KeySelector ks) { } |
| public URIDereferencer getURIDereferencer() { return null; } |
| public void setURIDereferencer(URIDereferencer ud) {} |
| public Object get(Object key) {return null;} |
| public Object put(Object key, Object value) {return null;} |
| public void setDefaultNamespacePrefix(String defPrefix) {} |
| public String getDefaultNamespacePrefix() {return null;} |
| public String putNamespacePrefix |
| (String nsURI, String prefix) {return null;} |
| public String getNamespacePrefix |
| (String nsURI, String defPrefix) {return null;} |
| }); |
| fail("Should throw a CCE for input of wrong type"); |
| } catch (ClassCastException ex) { |
| } catch (Exception ex) { |
| fail("Should raise a CCE instead of " + ex + |
| " for wrong inputs"); |
| } |
| |
| DocumentBuilder docBuilder = XMLUtils.createDocumentBuilder(false, false); |
| String fs = System.getProperty("file.separator"); |
| String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir"); |
| File dir = new File(base + fs + |
| "src/test/resources" + fs + "ie" + fs + "baltimore" + fs + "merlin-examples", |
| "merlin-xmldsig-twenty-three"); |
| Document doc = docBuilder.parse(new File(dir, "signature.xml")); |
| NodeList nl = doc.getElementsByTagName("KeyInfo"); |
| try { |
| stuff = factory.unmarshalXMLSignature |
| (new DOMValidateContext(TestUtils.getPublicKey("RSA"), nl.item(0))); |
| fail("Should throw a MarshalException for non-XMLSignature inputs"); |
| } catch (MarshalException ex) {} |
| |
| nl = doc.getElementsByTagName("Signature"); |
| try { |
| stuff = factory.unmarshalXMLSignature |
| (new DOMValidateContext(TestUtils.getPublicKey("DSA"), nl.item(0))); |
| assertNotNull(stuff); |
| } catch (MarshalException ex) { |
| fail("Unmarshal failed: " + ex.getMessage()); |
| ex.printStackTrace(); |
| } |
| } |
| |
| } |