/******************************************************************************* * Copyright (c) 2006-2010 eBay Inc. All Rights Reserved. * 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 * * http://www.apache.org/licenses/LICENSE-2.0 *******************************************************************************/ package org.ebayopensource.turmeric.tools.errorlibrary; import static org.hamcrest.Matchers.*; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Properties; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; import org.ebayopensource.turmeric.junit.utils.MavenTestingUtils; import org.ebayopensource.turmeric.tools.AbstractCodegenTestCase; import org.junit.Assert; import org.junit.Ignore; import org.junit.Test; public class ErrorLibraryDataInputTest extends AbstractCodegenTestCase { /** * Null input for -pr */ @Test public void testNullInputForProjectRoot() throws Exception { testingdir.ensureEmpty(); File projDir = testingdir.getDir(); createDomainPropertiesFile(projDir, "TestErrorLibrary"); // @formatter:off String[] inputArgs = { "-gentype", "genTypeDataCollection", "-pr", null, "-domain", "runtime", "-errorlibname","TestErrorLibrary" }; // @formatter:on try { performDirectCodeGen(inputArgs); } catch (Exception e) { String expected = "provide a proper value for the option -pr"; Assert.assertThat(e.getMessage(), containsString(expected)); } } /** * Null input for -Domain */ @Test public void testNullInputForDomain() throws Exception { testingdir.ensureEmpty(); File projDir = testingdir.getDir(); createDomainPropertiesFile(projDir, "TestErrorLibrary"); // @formatter:off String[] inputArgs = { "-gentype", "genTypeDataCollection", "-pr", projDir.getAbsolutePath(), "-domain", null, "-errorlibname","TestErrorLibrary", "-dest", projDir.getAbsolutePath() }; // @formatter:on try { performDirectCodeGen(inputArgs); } catch (Exception e) { String expected = "provide a proper value for the option -domain"; Assert.assertThat(e.getMessage(), containsString(expected)); } } /** * Null input for -dest */ @Test public void testNullInputForDestination() throws Exception { testingdir.ensureEmpty(); File projDir = testingdir.getDir(); createDomainPropertiesFile(projDir, "TestErrorLibrary"); // @formatter:off String[] inputArgs = { "-gentype", "genTypeDataCollection", "-pr", projDir.getAbsolutePath(), "-domain", "runtime", "-errorlibname","TestErrorLibrary", "-dest", null }; // @formatter:on try { performDirectCodeGen(inputArgs); } catch (Exception e) { String expected = "provide a proper value for the option -dest"; Assert.assertThat(e.getMessage(), containsString(expected)); } } /** * Empty string passed as gentype */ @Test public void testEmptyStringInputToGentype() throws Exception { testingdir.ensureEmpty(); File projDir = testingdir.getDir(); createDomainPropertiesFile(projDir, "TestErrorLibrary"); // @formatter:off String[] inputArgs = { "-gentype", " ", "-pr", projDir.getAbsolutePath(), "-domain", "runtime", "-errorlibname","TestErrorLibrary", "-dest", projDir.getAbsolutePath() }; // @formatter:on try { performDirectCodeGen(inputArgs); } catch (Exception e) { String expected = "Please provide a proper value for the option -gentype"; Assert.assertThat(e.getMessage(), containsString(expected)); } } /** * Empty string passed as projectRoot */ @Test public void testEmptyStringInputToProjectRoot() throws Exception { testingdir.ensureEmpty(); File projDir = testingdir.getDir(); createDomainPropertiesFile(projDir, "TestErrorLibrary"); // @formatter:off String[] inputArgs = { "-gentype", "genTypeDataCollection", "-pr", " ", "-domain", "runtime", "-errorlibname","TestErrorLibrary", "-dest", projDir.getAbsolutePath() }; // @formatter:on try { performDirectCodeGen(inputArgs); } catch (Exception e) { String expected = "Please provide a proper value for the option -pr"; Assert.assertThat(e.getMessage(), containsString(expected)); } } /** * Empty string passed as Domain */ @Test public void testEmptyStringInputToDomain() throws Exception { testingdir.ensureEmpty(); File projDir = testingdir.getDir(); createDomainPropertiesFile(projDir, "TestErrorLibrary"); // @formatter:off String[] inputArgs = { "-gentype", "genTypeDataCollection", "-pr", projDir.getAbsolutePath(), "-domain", " ", "-errorlibname","TestErrorLibrary", "-dest", projDir.getAbsolutePath() }; // @formatter:on try { performDirectCodeGen(inputArgs); } catch (Exception e) { String expected = "Please provide a proper value for the option -domain"; Assert.assertThat(e.getMessage(), containsString(expected)); } } /** * Empty string passed as destination */ @Test public void testEmptyStringInputToDest() throws Exception { testingdir.ensureEmpty(); File projDir = testingdir.getDir(); createDomainPropertiesFile(projDir, "TestErrorLibrary"); // @formatter:off String[] inputArgs = { "-gentype", "genTypeDataCollection", "-pr", projDir.getAbsolutePath(), "-domain", "runtime", "-errorlibname","TestErrorLibrary", "-dest", " " }; // @formatter:on try { performDirectCodeGen(inputArgs); } catch (Exception e) { String expected = "Please provide a proper value for the option -dest"; Assert.assertThat(e.getMessage(), containsString(expected)); } } /** * Pass no input for gentype */ @Test public void testPassingNoInputToGentype() throws Exception { testingdir.ensureEmpty(); File projDir = testingdir.getDir(); createDomainPropertiesFile(projDir, "TestErrorLibrary"); // @formatter:off String[] inputArgs = { "-gentype", /* no input */ "-pr", projDir.getAbsolutePath(), "-domain", "runtime", "-errorlibname","TestErrorLibrary", "-dest", projDir.getAbsolutePath() }; // @formatter:on try { performDirectCodeGen(inputArgs); } catch (Exception e) { String expected = "Please provide a value for the option -gentype"; Assert.assertThat(e.getMessage(), containsString(expected)); } } /** * Pass no input for project root */ @Test public void testPassingNoInputToProjectRoot() throws Exception { testingdir.ensureEmpty(); File projDir = testingdir.getDir(); createDomainPropertiesFile(projDir, "TestErrorLibrary"); // @formatter:off String[] inputArgs = { "-gentype", "genTypeDataCollection", "-pr", /* no input */ "-domain", "runtime", "-errorlibname","TestErrorLibrary", "-dest", projDir.getAbsolutePath() }; // @formatter:on try { performDirectCodeGen(inputArgs); } catch (Exception e) { String expected = "Please provide a value for the option -pr"; Assert.assertThat(e.getMessage(), containsString(expected)); } } /** * Pass no input for domain */ @Test public void testPassingNoInputToDomain() throws Exception { testingdir.ensureEmpty(); File projDir = testingdir.getDir(); createDomainPropertiesFile(projDir, "TestErrorLibrary"); // @formatter:off String[] inputArgs = { "-gentype", "genTypeDataCollection", "-pr", projDir.getAbsolutePath(), "-domain", /* no input */ "-errorlibname","TestErrorLibrary", "-dest", projDir.getAbsolutePath() }; // @formatter:on try { performDirectCodeGen(inputArgs); } catch (Exception e) { String expected = "Please provide a value for the option -domain"; Assert.assertThat(e.getMessage(), containsString(expected)); } } /** * Pass no input for destination */ @Test public void testPassingNoInputToDest() throws Exception { testingdir.ensureEmpty(); File projDir = testingdir.getDir(); createDomainPropertiesFile(projDir, "TestErrorLibrary"); // @formatter:off String[] inputArgs = { "-gentype", "genTypeDataCollection", "-pr", projDir.getAbsolutePath(), "-domain", "runtime", "-errorlibname","TestErrorLibrary", "-dest" /* no input */ }; // @formatter:on try { performDirectCodeGen(inputArgs); } catch (Exception e) { String expected = "Missing parameter for '-dest' option."; Assert.assertThat(e.getMessage(), containsString(expected)); } } /** * invalid input to gentype */ @Test public void testInvalidInputToGentype() throws Exception { testingdir.ensureEmpty(); File projDir = testingdir.getDir(); createDomainPropertiesFile(projDir, "TestErrorLibrary"); // @formatter:off String[] inputArgs = { "-gentype", "invalid", "-pr", projDir.getAbsolutePath(), "-domain", "runtime", "-errorlibname","TestErrorLibrary", "-dest", projDir.getAbsolutePath() }; // @formatter:on try { performDirectCodeGen(inputArgs); } catch (Exception e) { String expected = "Invalid code gen type specified : invalid"; Assert.assertThat(e.getMessage(), containsString(expected)); } } /** * invalid input to project root */ @Test public void testInvalidInputToProjectRoot() throws Exception { testingdir.ensureEmpty(); File projDir = testingdir.getDir(); File propFile = createDomainPropertiesFile(projDir, "TestErrorLibrary"); Properties props = new Properties(); props.setProperty("listOfDomains", "runtime"); storeProps(propFile, props); File invalidDir = new File(projDir, "invalid"); MavenTestingUtils.ensureDeleted(invalidDir); // @formatter:off String[] inputArgs = { "-gentype", "genTypeDataCollection", "-pr", invalidDir.getAbsolutePath(), "-dest", projDir.getAbsolutePath(), "-errorlibname","TestErrorLibrary", "-domain", "runtime", }; // @formatter:on try { performDirectCodeGen(inputArgs); } catch (Exception e) { String expected = "Project Root directory does not exist"; Assert.assertThat(e.getMessage(), containsString(expected)); } } /** * invalid input to destination */ @Test public void testInvalidInputToDestination() throws Exception { testingdir.ensureEmpty(); File projDir = testingdir.getDir(); File propFile = createDomainPropertiesFile(projDir, "TestErrorLibrary"); Properties props = new Properties(); props.setProperty("listOfDomains", "runtime"); storeProps(propFile, props); File invalidDir = new File(projDir, "invalid"); MavenTestingUtils.ensureDeleted(invalidDir); // @formatter:off String[] inputArgs = { "-gentype", "genTypeDataCollection", "-pr", projDir.getAbsolutePath(), "-domain", "runtime", "-errorlibname","TestErrorLibrary", "-dest", invalidDir.getAbsolutePath() }; // @formatter:on try { performDirectCodeGen(inputArgs); } catch (Exception e) { String expected = "provide a valid value for -dest option"; Assert.assertThat(e.getMessage(), containsString(expected)); } } // pass Different input to -pr and - dest @Test public void testPassingDiffInputForPrAndDest() throws Exception { testingdir.ensureEmpty(); File projDir = testingdir.getDir(); File propFile = createDomainPropertiesFile(projDir, "TestErrorLibrary"); File destDir = testingdir.getFile("dest/gen-src"); MavenTestingUtils.ensureEmpty(destDir); // @formatter:off String[] inputArgs = { "-gentype", "genTypeDataCollection", "-pr", projDir.getAbsolutePath(), "-domain", "runtime", "-errorlibname","TestErrorLibrary", "-dest", destDir.getAbsolutePath() }; // @formatter:on Properties props = new Properties(); props.setProperty("listOfDomains", "runtime"); storeProps(propFile, props); performDirectCodeGen(inputArgs); CodeGenAssert.assertJavaSourceExists(destDir, "org.suhua.errorlibrary.runtime.ErrorDataCollection"); } /** * Tests that pr overides dest option */ @Test public void testPrOverridesDestOption() throws Exception { testingdir.ensureEmpty(); File projDir = testingdir.getDir(); File propFile = createDomainPropertiesFile(projDir, "TestErrorLibrary"); Properties props = new Properties(); props.setProperty("listOfDomains", "runtime"); storeProps(propFile, props); // @formatter:off String[] inputArgs = { "-gentype", "genTypeDataCollection", "-pr", projDir.getAbsolutePath(), "-domain", "runtime", "-errorlibname","TestErrorLibrary", }; // @formatter:on performDirectCodeGen(inputArgs); File destDir = new File(projDir, "gen-src"); CodeGenAssert.assertJavaSourceExists(destDir, "org.suhua.errorlibrary.runtime.ErrorDataCollection"); } /** * Test for missing gentype option */ @Test public void testMissingGentypeOption() throws Exception { testingdir.ensureEmpty(); File projDir = testingdir.getDir(); createDomainPropertiesFile(projDir, "TestErrorLibrary"); File tempDir = new File(projDir, "temp2"); MavenTestingUtils.ensureEmpty(tempDir); // @formatter:off String[] inputArgs = { "-pr", projDir.getAbsolutePath(), "-domain", "runtime", "-errorlibname","TestErrorLibrary", "-dest", tempDir.getAbsolutePath() }; // @formatter:on try { performDirectCodeGen(inputArgs); } catch (Exception e) { String expected = "provide a value for -gentype option"; Assert.assertThat(e.getMessage(), containsString(expected)); } } /** * Test for missing pr option */ @Test public void testMissingProjectRoot() throws Exception { testingdir.ensureEmpty(); File projDir = testingdir.getDir(); File propFile = createDomainPropertiesFile(projDir, "TestErrorLibrary"); Properties props = new Properties(); props.setProperty("listOfDomains", "runtime"); storeProps(propFile, props); File tempDir = new File(projDir, "temp2"); MavenTestingUtils.ensureEmpty(tempDir); // @formatter:off String[] inputArgs = { "-gentype", "genTypeDataCollection", "-domain", "runtime", "-errorlibname","TestErrorLibrary", "-dest", tempDir.getAbsolutePath() }; // @formatter:on try { performDirectCodeGen(inputArgs); } catch (Exception e) { String expected = "Project Meta Src Dir is missing. "+ "Please provide the value for this option -metasrc"; Assert.assertThat(e.getMessage(), containsString(expected)); } } @Test public void testMissingProjectRootProvidedMetasrc() throws Exception { testingdir.ensureEmpty(); File projDir = testingdir.getDir(); File propFile = createDomainPropertiesFile(projDir, "TestErrorLibrary"); Properties props = new Properties(); props.setProperty("listOfDomains", "runtime"); storeProps(propFile, props); File tempDir = new File(projDir, "temp2"); MavenTestingUtils.ensureEmpty(tempDir); // @formatter:off String[] inputArgs = { "-gentype", "genTypeDataCollection", "-dest", projDir.getAbsolutePath(), "-domain", "runtime", "-errorlibname","TestErrorLibrary", "-metasrc",new File(projDir,"meta-src").getAbsolutePath() }; // @formatter:on performDirectCodeGen(inputArgs); //File destDir = new File(projDir, "gen-src"); CodeGenAssert.assertJavaSourceExists(projDir, "org.suhua.errorlibrary.runtime.ErrorDataCollection"); } /** * Test for missing domain option */ @Test public void testMissingDomain() throws Exception { testingdir.ensureEmpty(); File projDir = testingdir.getDir(); File propFile = createDomainPropertiesFile(projDir, "TestErrorLibrary"); Properties props = new Properties(); props.setProperty("listOfDomains", "runtime"); storeProps(propFile, props); File tempDir = new File(projDir, "temp2"); MavenTestingUtils.ensureEmpty(tempDir); // @formatter:off String[] inputArgs = { "-gentype", "genTypeDataCollection", "-pr", projDir.getAbsolutePath(), "-dest", tempDir.getAbsolutePath(), "-errorlibname","TestErrorLibrary" }; // @formatter:on try { performDirectCodeGen(inputArgs); } catch (Exception e) { String expected = "List of domains is missing which is mandatory. " + "Pls provide the value for this option -domain"; Assert.assertThat(e.getMessage(), containsString(expected)); } } /** * Test for missing dest option - Artifact to be generated in project root */ @Test public void testMissingDest() throws Exception { testingdir.ensureEmpty(); File projDir = testingdir.getDir(); File propFile = createDomainPropertiesFile(projDir, "TestErrorLibrary"); Properties props = new Properties(); props.setProperty("listOfDomains", "runtime"); storeProps(propFile, props); // @formatter:off String[] inputArgs = { "-gentype", "genTypeDataCollection", "-pr", projDir.getAbsolutePath(), "-domain", "runtime", "-errorlibname","TestErrorLibrary" }; // @formatter:on performDirectCodeGen(inputArgs); File destDir = new File(projDir, "gen-src"); // the legacy dest directory CodeGenAssert.assertJavaSourceExists(destDir, "org.suhua.errorlibrary.runtime.ErrorDataCollection"); } private void storeProps(File propsFile, Properties props) throws IOException { OutputStream stream = null; try { stream = new FileOutputStream(propsFile); props.store(stream, "---stored---"); } finally { IOUtils.closeQuietly(stream); } } private File createDomainPropertiesFile(File projRoot, String errorLibName) throws Exception { String dirname = FilenameUtils.separatorsToSystem("meta-src/META-INF/errorlibrary/" + errorLibName); File testDir = new File(projRoot, dirname); // Ensure that we don't accidentally benefit from past or other tests. MavenTestingUtils.ensureDirExists(testDir); // Create an empty properties file File testProp = new File(testDir, "error_library_project.properties"); Assert.assertTrue("Creating empty file: " + testProp, testProp.createNewFile()); // Create required support files. ErrorLibraryFileGenerationTest.copyErrorPropertiesToProjectRoot( "QAErrors.properties", projRoot, "runtime"); ErrorLibraryFileGenerationTest.copyErrorXmlToProjectRoot( "ErrorData_QA.xml", projRoot, "runtime"); return testProp; } }