Java tutorial
/** * 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 * <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.apache.bigtop.itest.datafu; import static org.junit.Assert.*; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.FilenameFilter; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.regex.Pattern; import org.apache.commons.io.IOUtils; import org.apache.pig.data.Tuple; import org.apache.pig.pigunit.PigTest; import org.apache.pig.tools.parameters.ParseException; public abstract class PigTests { protected String[] getDefaultArgs() { String[] args = { "JAR_PATH=" + getJarPath() }; return args; } protected List<String> getDefaultArgsAsList() { String[] args = getDefaultArgs(); List<String> argsList = new ArrayList<String>(args.length); for (String arg : args) { argsList.add(arg); } return argsList; } protected PigTest createPigTest(String scriptPath, String... args) throws IOException { // append args to list of default args List<String> theArgs = getDefaultArgsAsList(); for (String arg : args) { theArgs.add(arg); } String[] lines = getLinesFromFile(scriptPath); for (String arg : theArgs) { String[] parts = arg.split("=", 2); if (parts.length == 2) { for (int i = 0; i < lines.length; i++) { lines[i] = lines[i].replaceAll(Pattern.quote("$" + parts[0]), parts[1]); } } } return new PigTest(lines); } protected PigTest createPigTest(String scriptPath) throws IOException { return createPigTest(scriptPath, getDefaultArgs()); } protected String getJarPath() { String jarDir = "dist"; if (System.getProperty("datafu.jar.dir") != null) { jarDir = System.getProperty("datafu.jar.dir"); } String jarDirPath = new File(/* System.getProperty("user.dir"), */ jarDir).getAbsolutePath(); File userDir = new File(jarDirPath); String[] files = userDir.list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return name.startsWith("datafu") && name.endsWith(".jar") && !name.contains("sources") && !name.contains("javadoc"); } }); if (files.length == 0) { throw new RuntimeException("Could not find JAR file"); } else if (files.length > 1) { throw new RuntimeException("Found more JAR files than expected"); } return userDir.getAbsolutePath() + "/" + files[0]; } protected List<Tuple> getLinesForAlias(PigTest test, String alias) throws IOException, ParseException { return getLinesForAlias(test, alias, true); } protected List<Tuple> getLinesForAlias(PigTest test, String alias, boolean logValues) throws IOException, ParseException { Iterator<Tuple> tuplesIterator = test.getAlias(alias); List<Tuple> tuples = new ArrayList<Tuple>(); if (logValues) { System.out.println(String.format("Values for %s: ", alias)); } while (tuplesIterator.hasNext()) { Tuple tuple = tuplesIterator.next(); if (logValues) { System.out.println(tuple.toString()); } tuples.add(tuple); } return tuples; } protected void writeLinesToFile(String fileName, String... lines) throws IOException { File inputFile = deleteIfExists(getFile(fileName)); writeLinesToFile(inputFile, lines); } protected void writeLinesToFile(File file, String[] lines) throws IOException { FileWriter writer = new FileWriter(file); for (String line : lines) { writer.write(line + "\n"); } writer.close(); } protected void assertOutput(PigTest test, String alias, String... expected) throws IOException, ParseException { List<Tuple> tuples = getLinesForAlias(test, alias); assertEquals(expected.length, tuples.size()); int i = 0; for (String e : expected) { assertEquals(tuples.get(i++).toString(), e); } } protected File deleteIfExists(File file) { if (file.exists()) { file.delete(); } return file; } protected File getFile(String fileName) { return new File(System.getProperty("user.dir"), fileName).getAbsoluteFile(); } /** * Gets the lines from a given file. * * @param relativeFilePath The path relative to the datafu-tests project. * @return The lines from the file * @throws IOException */ protected String[] getLinesFromFile(String relativeFilePath) throws IOException { // assume that the working directory is the datafu-tests project File file = new File(System.getProperty("user.dir"), relativeFilePath).getAbsoluteFile(); BufferedInputStream content = new BufferedInputStream(new FileInputStream(file)); Object[] lines = IOUtils.readLines(content).toArray(); String[] result = new String[lines.length]; for (int i = 0; i < lines.length; i++) { result[i] = (String) lines[i]; } return result; } }