blob: 04e6a0bc5cc12a7e8b31d215d50b7146060cb071 [file] [log] [blame]
/*
* 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 = distroRoot;
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-")) {
// 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() {
return new File("../../tomcat-war/target/tuscany");
}
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();
}
}