/* * 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. * */ package org.apache.tools.ant.taskdefs; import java.io.File; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.BuildFileRule; import org.apache.tools.ant.util.JavaEnvUtils; import org.junit.Assume; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; /** * Testcase for the Signjar task * */ public class SignJarTest { @Rule public BuildFileRule buildRule = new BuildFileRule(); @Before public void setUp() { buildRule.configureProject("src/etc/testcases/taskdefs/signjar.xml"); } /** * check for being offline * @return true if the system property "offline" is "true" */ private boolean isOffline() { return Boolean.getBoolean("offline"); } @Test public void testSigFile() { buildRule.executeTarget("sigfile"); SignJarChild sj = new SignJarChild(); sj.setAlias("testonly"); sj.setKeystore("testkeystore"); sj.setStorepass("apacheant"); File jar = new File(buildRule.getProject().getProperty("test.jar")); sj.setJar(jar); assertFalse("mustn't find signature without sigfile attribute", sj.isSigned()); sj.setSigfile("TEST"); assertTrue("must find signature with sigfile attribute", sj.isSigned()); } @Test public void testInvalidChars() { buildRule.executeTarget("invalidchars"); SignJarChild sj = new SignJarChild(); sj.setAlias("test@nly"); sj.setKeystore("testkeystore"); sj.setStorepass("apacheant"); File jar = new File(buildRule.getProject().getProperty("test.jar")); sj.setJar(jar); assertTrue(sj.isSigned()); } /** * subclass in order to get access to protected isSigned method if * tests and task come from different classloaders. */ private static class SignJarChild extends SignJar { public boolean isSigned() { return isSigned(jar); } } @Test public void testURLKeystoreFile() { buildRule.executeTarget("urlKeystoreFile"); } @Test public void testURLKeystoreHTTP() { Assume.assumeFalse("Test is set offline", isOffline()); buildRule.executeTarget("urlKeystoreHTTP"); } @Test public void testTsaLocalhost() { try { buildRule.executeTarget("testTsaLocalhost"); fail("Should have thrown exception - no TSA at localhost:0"); } catch(BuildException ex) { assertEquals("jarsigner returned: 1", ex.getMessage()); } } /** * @see <a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=50081">bug 50081</a> */ @Test public void testSignUnnormalizedJar() throws Exception { buildRule.executeTarget("jar"); File testJar = new File(buildRule.getProject().getProperty("test.jar")); File testJarParent = testJar.getParentFile(); File f = new File(testJarParent, "../" + testJarParent.getName() + "/" + testJar.getName()); assertFalse(testJar.equals(f)); assertEquals(testJar.getCanonicalPath(), f.getCanonicalPath()); SignJar s = new SignJar(); s.setProject(buildRule.getProject()); s.setJar(f); s.setAlias("testonly"); s.setStorepass("apacheant"); s.setKeystore("testkeystore"); s.execute(); } }