Java tutorial
package org.codehaus.mojo.keytool; /* * Copyright 2005-2008 The Codehaus. * * Licensed 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. */ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import junit.framework.TestCase; import org.apache.commons.lang.SystemUtils; import org.apache.maven.plugin.MojoExecutionException; import org.codehaus.plexus.util.cli.CommandLineException; import org.codehaus.plexus.util.cli.Commandline; import org.codehaus.plexus.util.cli.StreamConsumer; /** * These unit tests only check whether the generated command lines are correct. Really running the command would mean * checking the results, which is too painful and not really a unit test. * * @author Juergen Mayrbaeurl <j.mayrbaeurl@yahoo.de> * @version 1.0 2008-02-03 */ public class ImportMojoTest extends TestCase { private MockImportMojo mojo; static class MockImportMojo extends ImportMojo { public int executeResult; public List commandLines = new ArrayList(); public String failureMsg; public Map systemProperties = new HashMap(); protected int executeCommandLine(Commandline commandLine, InputStream inputStream, StreamConsumer stream1, StreamConsumer stream2) throws CommandLineException { commandLines.add(commandLine); if (failureMsg != null) { throw new CommandLineException(failureMsg); } return executeResult; } } public void setUp() throws IOException { mojo = new MockImportMojo(); mojo.executeResult = 0; // it doesn't really matter if the paths are not cross-platform, we don't execute the command lines anyway File workingdir = new File(System.getProperty("java.io.tmpdir")); mojo.setWorkingDir(workingdir); mojo.setKeypass("secretpassword"); mojo.setStorepass("secretpassword2"); } public void tearDown() { mojo = null; } public void testRunOKMinimumNumberOfParameters() throws MojoExecutionException { mojo.execute(); String[] expectedArguments = { "-import", "-noprompt", "-keypass", "secretpassword", "-storepass", "secretpassword2" }; checkMojo(expectedArguments); } public void testRunOKImportJRECaCerts() throws MojoExecutionException { mojo.setFile("certsfile"); mojo.setUseJREcacerts(true); File cacertsFile = new File(SystemUtils.getJavaHome() + "/" + "lib/security/cacerts"); mojo.execute(); String[] expectedArguments = { "-import", "-noprompt", "-file", "certsfile", "-keystore", cacertsFile.getAbsolutePath(), "-keypass", "secretpassword", "-storepass", "secretpassword2" }; checkMojo(expectedArguments); } private void checkMojo(String[] expectedCommandLineArguments) { assertEquals(1, mojo.commandLines.size()); Commandline commandline = (Commandline) mojo.commandLines.get(0); String[] arguments = commandline.getArguments(); assertEquals("Differing number of arguments", expectedCommandLineArguments.length, arguments.length); for (int i = 0; i < arguments.length; i++) { assertEquals(expectedCommandLineArguments[i], arguments[i]); } } }