/******************************************************************************* * Pentaho Big Data * <p> * Copyright (C) 2002-2016 by Pentaho : http://www.pentaho.com * <p> * ****************************************************************************** * <p> * 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 * <p> * http://www.apache.org/licenses/LICENSE-2.0 * <p> * 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.pentaho.hadoop.shim; import org.apache.commons.vfs2.AllFileSelector; import org.apache.commons.vfs2.FileObject; import org.apache.commons.vfs2.FileType; import org.apache.commons.vfs2.VFS; import org.junit.BeforeClass; import org.junit.Test; import java.net.URL; import java.util.Iterator; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; public class HadoopExcludeJarsTest { private static String HADOOP_CONFIGURATIONS_PATH = System.getProperty( "java.io.tmpdir" ) + "/exclude-jars"; private int count; @BeforeClass public static void setup() throws Exception { // Create a test hadoop configuration FileObject ramRoot = VFS.getManager().resolveFile( HADOOP_CONFIGURATIONS_PATH ); if ( ramRoot.exists() ) { ramRoot.delete( new AllFileSelector() ); } ramRoot.createFolder(); // Create the implementation jars ramRoot.resolveFile( "xercesImpl-2.9.1.jar" ).createFile(); ramRoot.resolveFile( "xml-apis-1.3.04.jar" ).createFile(); ramRoot.resolveFile( "xml-apis-ext-1.3.04.jar" ).createFile(); ramRoot.resolveFile( "xerces-version-1.8.0.jar" ).createFile(); ramRoot.resolveFile( "xercesImpl2-2.9.1.jar" ).createFile(); ramRoot.resolveFile( "pentaho-hadoop-shims-api-61.2016.04.01-196.jar" ).createFile(); ramRoot.resolveFile( "commands-3.3.0-I20070605-0010.jar" ).createFile(); ramRoot.resolveFile( "postgresql-9.3-1102-jdbc4.jar" ).createFile(); ramRoot.resolveFile( "trilead-ssh2-build213.jar" ).createFile(); ramRoot.resolveFile( "trilead-ssh2-build215.jar" ).createFile(); } @Test public void filterJars_null_args() throws Exception { HadoopConfigurationLocator locator = new HadoopConfigurationLocator(); List<URL> list = locator.filterJars( null, null ); assertNull( list ); } @Test public void filterJars_null_arg_excludedJarsProperty() throws Exception { HadoopConfigurationLocator locator = new HadoopConfigurationLocator(); FileObject root = VFS.getManager().resolveFile( HADOOP_CONFIGURATIONS_PATH ); List<URL> urls = locator.parseURLs( root, root.toString() ); count = urls.size(); List<URL> list = locator.filterJars( urls, null ); assertEquals( count, list.size() ); } @Test public void filterJars_arg_excludedJarsProperty_emptyString() throws Exception { HadoopConfigurationLocator locator = new HadoopConfigurationLocator(); FileObject root = VFS.getManager().resolveFile( HADOOP_CONFIGURATIONS_PATH ); List<URL> urls = locator.parseURLs( root, root.toString() ); count = urls.size(); List<URL> list = locator.filterJars( urls, "" ); assertEquals( count, list.size() ); } @Test public void filterJars_arg_urls_containsOnlyExcludedJars() throws Exception { HadoopConfigurationLocator locator = new HadoopConfigurationLocator(); FileObject root = VFS.getManager().resolveFile( HADOOP_CONFIGURATIONS_PATH ); List<URL> urls = locator.parseURLs( root, root.toString() ); Iterator<URL> iterator = urls.listIterator(); while ( iterator.hasNext() ) { URL url = iterator.next(); if ( FileType.FOLDER.equals( root.resolveFile( url.toString().trim() ).getType() ) ) { iterator.remove(); } } List<URL> list = locator.filterJars( urls, "xercesImpl,xml-apis-1.3.04.jar,xml-apis-ext-1.3.04,xerces-version-1.8.0,xercesImpl2-2.9.1," + "pentaho-hadoop-shims-api-61.2016.04.01-196,commands-3.3.0-I20070605-0010,postgresql,trilead-ssh2-build213" + ".jar,trilead-ssh2-build215.jar" ); assertEquals( 0, list.size() ); } @Test public void filterJars_removeOnlyXercesImpl() throws Exception { HadoopConfigurationLocator locator = new HadoopConfigurationLocator(); FileObject root = VFS.getManager().resolveFile( HADOOP_CONFIGURATIONS_PATH ); List<URL> urls = locator.parseURLs( root, root.toString() ); count = urls.size(); List<URL> list = locator.filterJars( urls, "xercesImpl" ); assertEquals( count - 1, list.size() ); } @Test public void filterJars_removeOnlyByArtifactIdTemplate() throws Exception { HadoopConfigurationLocator locator = new HadoopConfigurationLocator(); FileObject root = VFS.getManager().resolveFile( HADOOP_CONFIGURATIONS_PATH ); List<URL> urls = locator.parseURLs( root, root.toString() ); count = urls.size(); List<URL> list = locator.filterJars( urls, "pentaho-hadoop-shims-api" ); assertEquals( count - 1, list.size() ); } @Test public void filterJars_removeOnlyByArtifactIdVersionTemplate() throws Exception { HadoopConfigurationLocator locator = new HadoopConfigurationLocator(); FileObject root = VFS.getManager().resolveFile( HADOOP_CONFIGURATIONS_PATH ); List<URL> urls = locator.parseURLs( root, root.toString() ); count = urls.size(); List<URL> list = locator.filterJars( urls, "pentaho-hadoop-shims-api-61.2016.04.01-196" ); assertEquals( count - 1, list.size() ); } @Test public void filterJars_removeOnlyByWholeJarName() throws Exception { HadoopConfigurationLocator locator = new HadoopConfigurationLocator(); FileObject root = VFS.getManager().resolveFile( HADOOP_CONFIGURATIONS_PATH ); List<URL> urls = locator.parseURLs( root, root.toString() ); count = urls.size(); List<URL> list = locator.filterJars( urls, "pentaho-hadoop-shims-api-61.2016.04.01-196.jar" ); assertEquals( count - 1, list.size() ); } @Test public void filterJars_removeThreeJarsWithDifferentTemplates() throws Exception { HadoopConfigurationLocator locator = new HadoopConfigurationLocator(); FileObject root = VFS.getManager().resolveFile( HADOOP_CONFIGURATIONS_PATH ); List<URL> urls = locator.parseURLs( root, root.toString() ); count = urls.size(); List<URL> list = locator.filterJars( urls, "xercesImpl,trilead-ssh2-build215,pentaho-hadoop-shims-api-61.2016.04.01-196.jar" ); assertEquals( count - 3, list.size() ); } }