ShadingTest.java
/*
* 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.calcite.avatica.shadetest;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.util.Optional;
import java.util.jar.JarFile;
import java.util.regex.Pattern;
import static org.junit.Assert.assertTrue;
public class ShadingTest {
// Note that many of these files could be excluded.
// This is for regression testing, and not the minimum file set.
String[] allowedPathPatterns = { "^META-INF", "^org/apache/calcite/", "^log4j2.xml", ".*\\.proto",
"^org/publicsuffix/", "^org/slf4j/", "^org/apache/logging/slf4j/", "^com/google/j2objc/",
"^google/protobuf/", "^about.html$", "^org/eclipse/jetty/", "^jetty-dir.css",
"^com/google/thirdparty/", "^org/checkerframework/", "^javax/annotation/",
"^com/google/errorprone/", "^Log4j-.*\\.xsd$", "^Log4j-.*\\.dtd$", "^Log4j-.*\\.properties$",
"^org/apache/logging/log4j/", "^org/codehaus/mojo/animal_sniffer/" };
@Test
public void validateShadedJar() throws Exception {
String patternString = String.join("|", allowedPathPatterns);
Pattern allowedNames = Pattern.compile(patternString);
try (JarFile jar = new JarFile(getShadedJarFile())) {
jar.stream()
.filter(c -> !c.isDirectory())
.forEach(c -> {
assertTrue(c.getName() + " does not match allowed names",
allowedNames.matcher(c.getName()).find());
});
}
}
private File getShadedJarFile() throws IOException {
Path libPath = FileSystems.getDefault().getPath("").resolve("build/libs/").toAbsolutePath();
PathMatcher matcher = FileSystems.getDefault()
.getPathMatcher("glob:avatica-standalone-server-*-shadow.jar");
Optional<Path> found = Files.list(libPath).filter(c -> matcher.matches(c.getFileName()))
.findFirst();
assertTrue("Could not find jar in " + libPath, found.isPresent());
return found.get().toFile();
}
}