| /* |
| * Copyright 2006-2012 The Apache Software Foundation. |
| * |
| * 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 |
| * |
| * https://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.jdo.exectck; |
| |
| import java.io.File; |
| import java.io.FileInputStream; |
| import java.io.IOException; |
| import java.nio.charset.Charset; |
| import java.util.Collection; |
| import java.util.HashSet; |
| import java.util.Properties; |
| import org.apache.commons.io.FileUtils; |
| import org.apache.maven.plugin.AbstractMojo; |
| import org.apache.maven.plugin.MojoExecutionException; |
| import org.apache.maven.plugins.annotations.Parameter; |
| |
| /** Abstract Mojo to be extended for the actual goals of this maven plugin. */ |
| public abstract class AbstractTCKMojo extends AbstractMojo { |
| |
| /** Filename of log4j2 configuration file. */ |
| protected final String LOG4J2_CONFIGURATION = "log4j2.xml"; |
| |
| /** Location of TCK generated output. */ |
| @Parameter( |
| property = "project.build.directory", |
| defaultValue = "${basedir}/target", |
| required = true) |
| protected String buildDirectory; |
| |
| /** Location of the logs directory. */ |
| @Parameter( |
| property = "project.log.directory", |
| defaultValue = "${project.build.directory}/logs", |
| required = true) |
| protected File logsDirectory; |
| |
| /** Location of the configuration directory. */ |
| @Parameter( |
| property = "project.conf.directory", |
| defaultValue = "${basedir}/src/main/resources/conf", |
| required = true) |
| protected String confDirectory; |
| |
| /** Location of the configuration directory. */ |
| @Parameter( |
| property = "project.sql.directory", |
| defaultValue = "${basedir}/src/main/resources/sql", |
| required = true) |
| protected String sqlDirectory; |
| |
| /** |
| * List of configuration files, each describing a test configuration. Note: Collection can only be |
| * configured in pom.xml. Using multi-valued type because long String cannot be broken across |
| * lines in pom.xml. |
| */ |
| @Parameter protected Collection<String> cfgs; |
| |
| /** |
| * List of configuration files, each describing a test configuration. Allows command line override |
| * of configured cfgs value. |
| */ |
| @Parameter(property = "jdo.tck.cfglist") |
| protected String cfgList; |
| |
| /** List of databases to run tests under. Currently only derby is supported. */ |
| @Parameter(property = "jdo.tck.dblist", defaultValue = "derby", required = true) |
| protected String dblist; |
| |
| /** |
| * Implementation to be tested (jdori or iut). Any value other than "jdori" will test an |
| * appropriately configured IUT |
| */ |
| @Parameter(property = "jdo.tck.impl", defaultValue = "jdori", required = true) |
| protected String impl; |
| |
| /** Location of implementation log file. */ |
| @Parameter( |
| property = "jdo.tck.impl.logfile", |
| defaultValue = "${user.dir}/datanucleus.txt", |
| required = true) |
| protected String implLogFile; |
| |
| /** Classpath including the dependencies using : as separator between entries. */ |
| @Parameter(property = "jdo.tck.dependencyClasspath", defaultValue = "", required = true) |
| protected String dependencyClasspath; |
| |
| protected Collection<String> dbs = new HashSet<String>(); |
| |
| /** List of identity types to be tested. */ |
| @Parameter( |
| property = "jdo.tck.identitytypes", |
| defaultValue = "applicationidentity datastoreidentity", |
| required = true) |
| protected String identitytypes; |
| |
| protected Collection<String> idtypes = new HashSet<String>(); |
| |
| /** |
| * Convenience method to set the cfgList from the file |
| * "src/main/resources/conf/configurations.list". |
| * |
| * @throws MojoExecutionException If the file could not be found/opened |
| */ |
| protected void setCfgListFromFile() throws MojoExecutionException { |
| try { |
| Properties defaultProps = new Properties(); |
| FileInputStream in = |
| new FileInputStream(confDirectory + File.separator + "configurations.list"); |
| defaultProps.load(in); |
| in.close(); |
| cfgList = defaultProps.getProperty("jdo.tck.cfglist"); |
| } catch (Exception e) { |
| // Error finding configurations.list |
| throw new MojoExecutionException( |
| "No configuration specified and could not " |
| + "find 'src/main/resources/conf/configurations.list'"); |
| } |
| } |
| |
| protected void copyLog4j2ConfigurationFile() throws IOException { |
| File fromFile = new File(confDirectory + File.separator + impl + "-" + LOG4J2_CONFIGURATION); |
| File toFile = |
| new File( |
| buildDirectory + File.separator + "classes" + File.separator + LOG4J2_CONFIGURATION); |
| FileUtils.copyFile(fromFile, toFile); |
| } |
| |
| protected void resetFileContent(String fileName) throws MojoExecutionException { |
| File file = new File(fileName); |
| // reset file content |
| try { |
| FileUtils.write(file, "", Charset.defaultCharset()); |
| } catch (IOException e) { |
| throw new MojoExecutionException("Failed to reset file content: " + file.toURI()); |
| } |
| } |
| } |