diff options
Diffstat (limited to '')
2 files changed, 235 insertions, 0 deletions
diff --git a/sca-java-2.x/branches/2.0-Beta1/testing/itest/distribution/legal-checks/pom.xml b/sca-java-2.x/branches/2.0-Beta1/testing/itest/distribution/legal-checks/pom.xml new file mode 100644 index 0000000000..0606590fa9 --- /dev/null +++ b/sca-java-2.x/branches/2.0-Beta1/testing/itest/distribution/legal-checks/pom.xml @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * 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. +--> +<project> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>itest-distribution</artifactId> + <version>2.0-Beta1-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + <artifactId>itest-distribution-legal-checks</artifactId> + <name>Apache Tuscany SCA iTest Distribution Legal Checks</name> + + <profiles> + <profile> + <id>distribution</id> + <dependencies> + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>itest-bin-distro-unzip</artifactId> + <type>pom</type> + <version>2.0-Beta1-SNAPSHOT</version> + </dependency> + </dependencies> + </profile> + </profiles> + + <build> + <plugins> + <plugin> + <groupId>org.apache.rat</groupId> + <artifactId>apache-rat-plugin</artifactId> + <version>0.6</version> + <executions> + <execution> + <goals> + <goal>check</goal> + </goals> + </execution> + </executions> + <configuration> + <basedir>../../../../distribution/all/target/apache-tuscany-sca-all-2.0-Beta1-SNAPSHOT.dir</basedir> + <excludeSubProjects>false</excludeSubProjects> + <excludes> + <exclude>tuscany-sca-2.0-Beta1-SNAPSHOT/CHANGES</exclude> + <exclude>**/MANIFEST.MF</exclude> + <exclude>**/DEPENDENCIES</exclude> + <exclude>**/target/**/*.log</exclude> + <exclude>**/config.ini</exclude> + <exclude>tuscany-sca-2.0-Beta1-SNAPSHOT/features/configuration/config.ini</exclude> + </excludes> + </configuration> + </plugin> + </plugins> + </build> +</project> diff --git a/sca-java-2.x/branches/2.0-Beta1/testing/itest/distribution/legal-checks/src/test/java/itest/JarsInLICENSETestCase.java b/sca-java-2.x/branches/2.0-Beta1/testing/itest/distribution/legal-checks/src/test/java/itest/JarsInLICENSETestCase.java new file mode 100644 index 0000000000..5ee67ff3ff --- /dev/null +++ b/sca-java-2.x/branches/2.0-Beta1/testing/itest/distribution/legal-checks/src/test/java/itest/JarsInLICENSETestCase.java @@ -0,0 +1,162 @@ +/* + * 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 itest; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.StringTokenizer; + +import org.junit.Test; + +/** + * Checks that all jar files included in the distribution are mentioned in the LICENSE file + * and that all jars mentioned in the LICENSE are in the distribution. + */ +public class JarsInLICENSETestCase { + + @Test + public void testJars() throws Exception { + File distroRoot = getUnzipedDistroRoot(); + + File licenseFile = new File(distroRoot, "LICENSE"); + if (!licenseFile.exists()) { + throw new IllegalStateException("can't find LICENSE file at: " + licenseFile.getAbsoluteFile().toString()); + } + + File libDirectory = new File(distroRoot, "modules"); + if (!libDirectory.exists()) { + throw new IllegalStateException("can't find modules folder at: " + libDirectory.getAbsoluteFile().toString()); + } + + List<String> jars = getJarsInDistro(libDirectory); + + List<String> bad2 = getLICENSEJarsNotInDistro(licenseFile, jars); + if (bad2.size() > 0) { + System.err.println("Jars in LICENSE but not in Distribution: " + bad2); + } + + List<String> bad1 = getJarsNotInLICENSE(jars, licenseFile); + if (bad1.size() > 0) { + System.err.println("Jars in distribution but not in LICENSE: " + bad1); + } + + if (bad1.size() > 0 || bad2.size() > 0) { + throw new IllegalStateException("LICENSE problems, check log"); + } + } + + private List<String> getLICENSEJarsNotInDistro(File licenseFile, List<String> jars) throws IOException { + List<String> badJars = new ArrayList<String>(); + BufferedReader reader = new BufferedReader(new FileReader(licenseFile)); + String line = null; + while ((line = reader.readLine()) != null) { + line = line.trim(); + if (line.contains(".jar")) { + StringTokenizer st = new StringTokenizer(line); + while (st.hasMoreTokens()) { + String s = st.nextToken(); + if (s.contains(".jar")) { + if (s.startsWith("(")) { + s = s.substring(1); + } + if (s.endsWith(",") || s.endsWith(":")) { + s = s.substring(0, s.length()-1); + } + if (s.endsWith(")")) { + s = s.substring(0, s.length()-1); + } + if (!jars.contains(s) && !s.startsWith("tuscany-")) { + badJars.add(s); + } + } + } + } + } + return badJars; + } + + private List<String> getJarsNotInLICENSE(List<String> jars, File licenseFile) throws IOException { + List<String> badJars = new ArrayList<String>(); + String licenseText = readLICENSE(licenseFile); + for (String jar : jars) { + if (!licenseText.contains(jar)) { + if (jar.startsWith("tuscany-") || jar.startsWith("sample-") || jar.startsWith("test-") || jar.startsWith("itest-")) { + // ignore tuscany jars as they're not mentioned in the LICENSE file + } else { + badJars.add(jar); + } + } + } + return badJars; + } + + private List<String> getJarsInDistro(File directory) { + List<String> jars = new ArrayList<String>(); + for (String fn : directory.list()){ + if (fn.endsWith(".jar")) { + jars.add(fn); + } else { + File f = new File(directory, fn); + if (f.isDirectory()) { + jars.addAll(getJarsInDistro(f)); + } + } + } + return jars; + } + + private File getUnzipedDistroRoot() { + File distroTarget = new File("../../../../distribution/all/target"); + File root = null; + for (String f : distroTarget.list()) { + if (f.endsWith(".dir")) { + root = new File(distroTarget, f); + break; + } + } + if (root == null) { + throw new IllegalStateException("can't find distro root"); + } + if (root.list().length != 1) { + throw new IllegalStateException("expecting one directory in distro root"); + } + root = new File(root, root.list()[0]); + return root; + } + + private static String readLICENSE(File licenseFile) throws java.io.IOException { + StringBuffer fileData = new StringBuffer(); + BufferedReader reader = new BufferedReader(new FileReader(licenseFile)); + char[] buf = new char[1024]; + int numRead = 0; + while ((numRead = reader.read(buf)) != -1) { + String readData = String.valueOf(buf, 0, numRead); + fileData.append(readData); + buf = new char[1024]; + } + reader.close(); + return fileData.toString(); + } + +} |