blob: 58cd1f8f4958960dad81cfa11c68fa51f1c08153 [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 org.apache.oodt.cas.pge.config;
//OODT static imports
import static org.apache.oodt.cas.pge.metadata.PgeTaskMetKeys.CONFIG_FILE_PATH;
//JDK imports
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
//Google imports
import com.google.common.collect.Lists;
//OODT imports
import org.apache.oodt.cas.pge.metadata.PgeMetadata;
//JUnit imports
import junit.framework.TestCase;
/**
* Test class for {@link XmlFilePgeConfigBuilder}.
*
* @author bfoster (Brian Foster)
*/
public class TestXmlFilePgeConfigBuilder extends TestCase {
public static final String CONFIG_FILE = "src/test/resources/pge-config.xml";
public void testBuild() throws IOException {
XmlFilePgeConfigBuilder builder = new XmlFilePgeConfigBuilder();
PgeMetadata pgeMetadata = new PgeMetadata();
pgeMetadata.replaceMetadata(CONFIG_FILE_PATH, CONFIG_FILE);
pgeMetadata.replaceMetadata("INPUT_FILE_1", "src/test/resources/data-file-1.txt");
pgeMetadata.replaceMetadata("INPUT_FILE_2", "src/test/resources/data-file-2.txt");
pgeMetadata.replaceMetadata("WORKING_DIR", "/tmp");
pgeMetadata.markAsDynamicMetadataKey();
pgeMetadata.commitMarkedDynamicMetadataKeys();
PgeConfig pgeConfig = builder.build(pgeMetadata);
// Verify metadata checks out.
assertEquals(40, pgeMetadata.asMetadata().getAllKeys().size());
assertEquals(CONFIG_FILE, pgeMetadata.getMetadata(CONFIG_FILE_PATH));
assertEquals("src/test/resources/data-file-1.txt", pgeMetadata.getMetadata("INPUT_FILE_1"));
assertEquals("src/test/resources/data-file-2.txt", pgeMetadata.getMetadata("INPUT_FILE_2"));
assertEquals("/tmp", pgeMetadata.getMetadata("WORKING_DIR"));
assertEquals(">", pgeMetadata.getMetadata("commons/GreaterThan"));
assertEquals("<", pgeMetadata.getMetadata("commons/LessThan"));
assertEquals("&", pgeMetadata.getMetadata("commons/Ampersand"));
assertEquals("'", pgeMetadata.getMetadata("commons/Apostrophe"));
assertEquals("\"", pgeMetadata.getMetadata("commons/QuotationMark"));
assertEquals("org.apache.oodt.cas.pge.writers.TextConfigFileWriter", pgeMetadata.getMetadata("writers/TextWriter"));
assertEquals("org.apache.oodt.cas.pge.writers.CsvConfigFileWriter", pgeMetadata.getMetadata("writers/CsvWriter"));
assertEquals("Simple", pgeMetadata.getMetadata("GREETING_ENUM"));
assertEquals("true", pgeMetadata.getMetadata("FORCE_STAGING"));
assertEquals("Custom", pgeMetadata.getMetadata("CUSTOM_GREETING_ENUM"));
assertEquals("<Custom Greeting Here>", pgeMetadata.getMetadata("CUSTOM_GREETING_ENUM_VALUE"));
assertEquals("/tmp", pgeMetadata.getMetadata("WorkingDir"));
assertEquals("Simple", pgeMetadata.getMetadata("GreetingEnum"));
assertEquals("Custom", pgeMetadata.getMetadata("CustomGreetingEnum"));
assertEquals("<Custom Greeting Here>", pgeMetadata.getMetadata("CustomGreetingEnumValue"));
assertEquals("src/test/resources/data-file-1.txt", pgeMetadata.getMetadata("InputFile1"));
assertEquals("src/test/resources/data-file-2.txt", pgeMetadata.getMetadata("InputFile2"));
assertEquals("true", pgeMetadata.getMetadata("ForceStaging"));
assertEquals(Lists.newArrayList("/tmp/staging/data-file-1.txt", "/tmp/staging/data-file-2.txt"), pgeMetadata.getAllMetadata("InputFiles"));
assertEquals("/tmp/config", pgeMetadata.getMetadata("ConfigDir"));
assertEquals("/tmp/output", pgeMetadata.getMetadata("OutputDir"));
assertEquals("/tmp/staging", pgeMetadata.getMetadata("StagingDir"));
assertEquals("dyn-input.txt", pgeMetadata.getMetadata("DynInput/Text/Name"));
assertEquals("dyn-input.csv", pgeMetadata.getMetadata("DynInput/CSV/Name"));
assertEquals("/tmp/config/dyn-input.txt", pgeMetadata.getMetadata("TextInputFile"));
assertEquals("/tmp/config/dyn-input.csv", pgeMetadata.getMetadata("CsvInputFile"));
assertEquals("PgeOutput.txt", pgeMetadata.getMetadata("OutputFileName"));
assertEquals("\n [Greeting],\n This is a template for text file [TextInputFile].\n This template was written at: [DATE.UTC].\n [Signature]\n ", pgeMetadata.getMetadata("TextFileTemplate"));
assertEquals("Hello", pgeMetadata.getMetadata("SimpleGreeting"));
assertEquals("Hi", pgeMetadata.getMetadata("CasualGreeting"));
assertEquals("<Custom Greeting Here>", pgeMetadata.getMetadata("CustomGreeting"));
assertEquals("Hello", pgeMetadata.getMetadata("Greating"));
assertEquals("-bfost", pgeMetadata.getMetadata("Signature"));
assertEquals(Lists.newArrayList("File1.txt","File2.dat","File3.xml"), pgeMetadata.getAllMetadata("AuxInputFiles"));
assertEquals(Lists.newArrayList("true","false","true"), pgeMetadata.getAllMetadata("IsText"));
assertEquals(Lists.newArrayList("AuxInputFiles","IsText"), pgeMetadata.getAllMetadata("CsvHeader"));
// Verify pgeconfig checks out.
List<DynamicConfigFile> dynConfigFiles = pgeConfig.getDynamicConfigFiles();
assertEquals(2, dynConfigFiles.size());
assertEquals("org.apache.oodt.cas.pge.writers.TextConfigFileWriter", dynConfigFiles.get(0).getWriterClass());
assertEquals("/tmp/config/dyn-input.txt", dynConfigFiles.get(0).getFilePath());
assertEquals(Lists.newArrayList("\n [Greeting],\n This is a template for text file [TextInputFile].\n This template was written at: [DATE.UTC].\n [Signature]\n "), Arrays.asList(dynConfigFiles.get(0).getArgs()));
assertEquals("org.apache.oodt.cas.pge.writers.CsvConfigFileWriter", dynConfigFiles.get(1).getWriterClass());
assertEquals("/tmp/config/dyn-input.csv", dynConfigFiles.get(1).getFilePath());
assertEquals(Lists.newArrayList("AuxInputFiles,IsText"), Arrays.asList(dynConfigFiles.get(1).getArgs()));
assertEquals(5, pgeConfig.getExeCmds().size());
assertEquals("echo /tmp/config/dyn-input.txt > PgeOutput.txt", pgeConfig.getExeCmds().get(0));
assertEquals("echo /tmp/config/dyn-input.csv >> PgeOutput.txt", pgeConfig.getExeCmds().get(1));
assertEquals("if ( ! -e src/test/resources/data-file-1.txt || ! -e src/test/resources/data-file-2.txt ) then", pgeConfig.getExeCmds().get(2));
assertEquals(" exit 1", pgeConfig.getExeCmds().get(3));
assertEquals("endif", pgeConfig.getExeCmds().get(4));
assertEquals("/tmp", pgeConfig.getExeDir());
assertEquals("csh", pgeConfig.getShellType());
FileStagingInfo fileStagingInfo = pgeConfig.getFileStagingInfo();
assertEquals(Lists.newArrayList("src/test/resources/data-file-2.txt", "src/test/resources/data-file-1.txt"), fileStagingInfo.getFilePaths());
assertEquals("/tmp/staging", fileStagingInfo.getStagingDir());
assertEquals(true, fileStagingInfo.isForceStaging());
List<OutputDir> outputDirs = pgeConfig.getOuputDirs();
assertEquals(1, outputDirs.size());
assertEquals(true, outputDirs.get(0).isCreateBeforeExe());
assertEquals("/tmp/output", outputDirs.get(0).getPath());
}
}