SQOOP-3100: Clean up expected exception logic in tests - part III. (Boglarka Egyed via Attila Szabo)
Project: http://git-wip-us.apache.org/repos/asf/sqoop/repo Commit: http://git-wip-us.apache.org/repos/asf/sqoop/commit/281a87ae Tree: http://git-wip-us.apache.org/repos/asf/sqoop/tree/281a87ae Diff: http://git-wip-us.apache.org/repos/asf/sqoop/diff/281a87ae Branch: refs/heads/trunk Commit: 281a87aed2a21d69e74e05ceb38b5e553f7b16de Parents: a5ae802 Author: Attila Szabo <[email protected]> Authored: Tue Mar 14 12:38:18 2017 +0100 Committer: Attila Szabo <[email protected]> Committed: Tue Mar 14 12:38:18 2017 +0100 ---------------------------------------------------------------------- ivy/libraries.properties | 2 +- .../cloudera/sqoop/TestIncrementalImport.java | 17 +++-- .../cloudera/sqoop/lib/TestRecordParser.java | 48 ++++++------ .../cloudera/sqoop/metastore/TestSavedJobs.java | 78 +++++++++++++++----- .../com/cloudera/sqoop/orm/TestClassWriter.java | 47 ++++++------ 5 files changed, 114 insertions(+), 78 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/sqoop/blob/281a87ae/ivy/libraries.properties ---------------------------------------------------------------------- diff --git a/ivy/libraries.properties b/ivy/libraries.properties index 05baa5c..84b834b 100644 --- a/ivy/libraries.properties +++ b/ivy/libraries.properties @@ -36,7 +36,7 @@ hsqldb.version=1.8.0.10 ivy.version=2.3.0 -junit.version=4.11 +junit.version=4.12 mockito-all.version=1.9.5 h2.version=1.3.170 http://git-wip-us.apache.org/repos/asf/sqoop/blob/281a87ae/src/test/com/cloudera/sqoop/TestIncrementalImport.java ---------------------------------------------------------------------- diff --git a/src/test/com/cloudera/sqoop/TestIncrementalImport.java b/src/test/com/cloudera/sqoop/TestIncrementalImport.java index 57f4433..52a55b7 100644 --- a/src/test/com/cloudera/sqoop/TestIncrementalImport.java +++ b/src/test/com/cloudera/sqoop/TestIncrementalImport.java @@ -49,7 +49,9 @@ import com.cloudera.sqoop.testutil.CommonArgs; import com.cloudera.sqoop.tool.ImportTool; import com.cloudera.sqoop.tool.JobTool; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExpectedException; import static org.junit.Assert.*; @@ -70,6 +72,9 @@ public class TestIncrementalImport { // What database do we read from. public static final String SOURCE_DB_URL = "jdbc:hsqldb:mem:incremental"; + @Rule + public ExpectedException thrown = ExpectedException.none(); + @Before public void setUp() throws Exception { // Delete db state between tests. @@ -949,14 +954,12 @@ public class TestIncrementalImport { List<String> args = getArgListForTable(TABLE_NAME, false, true); args.add("--append"); createJob(TABLE_NAME, args); - try { - runJob(TABLE_NAME); - //the above line should throw an exception otherwise the test has failed - fail("Expected incremental import on varchar column to fail."); - } catch(RuntimeException e) { - //expected - } + + thrown.expect(RuntimeException.class); + thrown.reportMissingExceptionWithMessage("Expected incremental import on varchar column to fail"); + runJob(TABLE_NAME); } + @Test public void testModifyWithTimestamp() throws Exception { // Create a table with data in it; import it. http://git-wip-us.apache.org/repos/asf/sqoop/blob/281a87ae/src/test/com/cloudera/sqoop/lib/TestRecordParser.java ---------------------------------------------------------------------- diff --git a/src/test/com/cloudera/sqoop/lib/TestRecordParser.java b/src/test/com/cloudera/sqoop/lib/TestRecordParser.java index 57bdb5f..d964cef 100644 --- a/src/test/com/cloudera/sqoop/lib/TestRecordParser.java +++ b/src/test/com/cloudera/sqoop/lib/TestRecordParser.java @@ -20,7 +20,10 @@ package com.cloudera.sqoop.lib; import java.util.ArrayList; import java.util.List; + +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExpectedException; import static org.junit.Assert.fail; @@ -30,6 +33,9 @@ import static org.junit.Assert.fail; */ public class TestRecordParser { + @Rule + public ExpectedException thrown = ExpectedException.none(); + private void assertListsEqual(String msg, List<String> expected, List<String> actual) { if (expected == null && actual != null) { @@ -300,49 +306,41 @@ public class TestRecordParser { public void testRequiredQuotes2() throws RecordParser.ParseError { RecordParser parser = new RecordParser( new DelimiterSet(',', '\n', '\"', '\\', true)); - try { - parser.parseRecord("\"field1\",field2"); - fail("Expected parse error for required quotes"); - } catch (RecordParser.ParseError pe) { - // ok. expected. - } + + thrown.expect(RecordParser.ParseError.class); + thrown.reportMissingExceptionWithMessage("Expected parse error for required quotes"); + parser.parseRecord("\"field1\",field2"); } @Test public void testRequiredQuotes3() throws RecordParser.ParseError { RecordParser parser = new RecordParser( new DelimiterSet(',', '\n', '\"', '\\', true)); - try { - parser.parseRecord("field1,\"field2\""); - fail("Expected parse error for required quotes"); - } catch (RecordParser.ParseError pe) { - // ok. expected. - } + + thrown.expect(RecordParser.ParseError.class); + thrown.reportMissingExceptionWithMessage("Expected ParseError for required quotes"); + parser.parseRecord("field1,\"field2\""); } @Test public void testRequiredQuotes4() throws RecordParser.ParseError { RecordParser parser = new RecordParser( new DelimiterSet(',', '\n', '\"', '\\', true)); - try { - parser.parseRecord("field1,\"field2\"\n"); - fail("Expected parse error for required quotes"); - } catch (RecordParser.ParseError pe) { - // ok. expected. - } + + thrown.expect(RecordParser.ParseError.class); + thrown.reportMissingExceptionWithMessage("Expected ParseError for required quotes"); + parser.parseRecord("field1,\"field2\"\n"); } @Test - public void testNull() { + public void testNull() throws RecordParser.ParseError { RecordParser parser = new RecordParser( new DelimiterSet(',', '\n', '\"', '\\', true)); String input = null; - try { - parser.parseRecord(input); - fail("Expected parse error for null string"); - } catch (RecordParser.ParseError pe) { - // ok. expected. - } + + thrown.expect(RecordParser.ParseError.class); + thrown.reportMissingExceptionWithMessage("Expected ParseError for null string"); + parser.parseRecord(input); } http://git-wip-us.apache.org/repos/asf/sqoop/blob/281a87ae/src/test/com/cloudera/sqoop/metastore/TestSavedJobs.java ---------------------------------------------------------------------- diff --git a/src/test/com/cloudera/sqoop/metastore/TestSavedJobs.java b/src/test/com/cloudera/sqoop/metastore/TestSavedJobs.java index 1fb7324..61d8c97 100644 --- a/src/test/com/cloudera/sqoop/metastore/TestSavedJobs.java +++ b/src/test/com/cloudera/sqoop/metastore/TestSavedJobs.java @@ -33,13 +33,14 @@ import com.cloudera.sqoop.metastore.hsqldb.AutoHsqldbStorage; import com.cloudera.sqoop.tool.VersionTool; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExpectedException; import java.io.IOException; import java.sql.Connection; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; /** * Test the metastore and job-handling features. @@ -55,6 +56,9 @@ public class TestSavedJobs { public static final String TEST_AUTOCONNECT_USER = "SA"; public static final String TEST_AUTOCONNECT_PASS = ""; + @Rule + public ExpectedException thrown = ExpectedException.none(); + @Before public void setUp() throws Exception { // Delete db state between tests. @@ -118,7 +122,7 @@ public class TestSavedJobs { } @Test - public void testCreateDeleteJob() throws IOException { + public void testCreateSameJob() throws IOException { Configuration conf = newConf(); JobStorageFactory ssf = new JobStorageFactory(conf); @@ -139,29 +143,45 @@ public class TestSavedJobs { assertEquals(1, jobs.size()); assertEquals("versionJob", jobs.get(0)); - // Try to create that same job name again. This should fail. try { + // Try to create that same job name again. This should fail. + thrown.expect(IOException.class); + thrown.reportMissingExceptionWithMessage("Expected IOException since job already exists"); storage.create("versionJob", data); - fail("Expected IOException; this job already exists."); - } catch (IOException ioe) { - // This is expected; continue operation. + } finally { + jobs = storage.list(); + assertEquals(1, jobs.size()); + + // Restore our job, check that it exists. + JobData outData = storage.read("versionJob"); + assertEquals(new VersionTool().getToolName(), + outData.getSqoopTool().getToolName()); + + storage.close(); } + } - jobs = storage.list(); - assertEquals(1, jobs.size()); + @Test + public void testDeleteJob() throws IOException { + Configuration conf = newConf(); + JobStorageFactory ssf = new JobStorageFactory(conf); - // Restore our job, check that it exists. - JobData outData = storage.read("versionJob"); - assertEquals(new VersionTool().getToolName(), - outData.getSqoopTool().getToolName()); + Map<String, String> descriptor = new TreeMap<String, String>(); + JobStorage storage = ssf.getJobStorage(descriptor); - // Try to restore a job that doesn't exist. Watch it fail. - try { - storage.read("DoesNotExist"); - fail("Expected IOException"); - } catch (IOException ioe) { - // This is expected. Continue. - } + storage.open(descriptor); + + // Job list should start out empty. + List<String> jobs = storage.list(); + assertEquals(0, jobs.size()); + + // Create a job that displays the version. + JobData data = new JobData(new SqoopOptions(), new VersionTool()); + storage.create("versionJob", data); + + jobs = storage.list(); + assertEquals(1, jobs.size()); + assertEquals("versionJob", jobs.get(0)); // Now delete the job. storage.delete("versionJob"); @@ -174,6 +194,26 @@ public class TestSavedJobs { } @Test + public void testRestoreNonExistingJob() throws IOException { + Configuration conf = newConf(); + JobStorageFactory ssf = new JobStorageFactory(conf); + + Map<String, String> descriptor = new TreeMap<String, String>(); + JobStorage storage = ssf.getJobStorage(descriptor); + + storage.open(descriptor); + + try { + // Try to restore a job that doesn't exist. Watch it fail. + thrown.expect(IOException.class); + thrown.reportMissingExceptionWithMessage("Expected IOException since job doesn't exist"); + storage.read("DoesNotExist"); + } finally { + storage.close(); + } + } + + @Test public void testCreateJobWithExtraArgs() throws IOException { Configuration conf = newConf(); JobStorageFactory ssf = new JobStorageFactory(conf); http://git-wip-us.apache.org/repos/asf/sqoop/blob/281a87ae/src/test/com/cloudera/sqoop/orm/TestClassWriter.java ---------------------------------------------------------------------- diff --git a/src/test/com/cloudera/sqoop/orm/TestClassWriter.java b/src/test/com/cloudera/sqoop/orm/TestClassWriter.java index a27353d..b3a8a17 100644 --- a/src/test/com/cloudera/sqoop/orm/TestClassWriter.java +++ b/src/test/com/cloudera/sqoop/orm/TestClassWriter.java @@ -36,6 +36,7 @@ import org.apache.commons.logging.LogFactory; import org.apache.hadoop.util.Shell; import org.junit.After; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import com.cloudera.sqoop.SqoopOptions; @@ -46,6 +47,7 @@ import com.cloudera.sqoop.testutil.HsqldbTestServer; import com.cloudera.sqoop.testutil.ImportJobTestCase; import com.cloudera.sqoop.tool.ImportTool; import com.cloudera.sqoop.util.ClassLoaderStack; +import org.junit.rules.ExpectedException; import java.lang.reflect.Field; @@ -72,6 +74,9 @@ public class TestClassWriter { private ConnManager manager; private SqoopOptions options; + @Rule + public ExpectedException thrown = ExpectedException.none(); + @Before public void setUp() { testServer = new HsqldbTestServer(); @@ -642,31 +647,6 @@ public class TestClassWriter { fail("we shouldn't successfully generate code"); } - private void runFailedGenerationTest(String [] argv, - String classNameToCheck) { - File codeGenDirFile = new File(CODE_GEN_DIR); - File classGenDirFile = new File(JAR_GEN_DIR); - - try { - options = new ImportTool().parseArguments(argv, - null, options, true); - } catch (Exception e) { - LOG.error("Could not parse options: " + e.toString()); - } - - CompilationManager compileMgr = new CompilationManager(options); - ClassWriter writer = new ClassWriter(options, manager, - HsqldbTestServer.getTableName(), compileMgr); - - try { - writer.generate(); - compileMgr.compile(); - fail("ORM class file generation succeeded when it was expected to fail"); - } catch (Exception ioe) { - LOG.error("Got Exception from ORM generation as expected : " - + ioe.toString()); - } - } /** * A dummy manager that declares that it ORM is self managed. */ @@ -686,7 +666,22 @@ public class TestClassWriter { "--outdir", CODE_GEN_DIR, }; - runFailedGenerationTest(argv, HsqldbTestServer.getTableName()); + + try { + options = new ImportTool().parseArguments(argv, + null, options, true); + } catch (Exception e) { + LOG.error("Could not parse options: " + e.toString()); + } + + CompilationManager compileMgr = new CompilationManager(options); + ClassWriter writer = new ClassWriter(options, manager, + HsqldbTestServer.getTableName(), compileMgr); + + writer.generate(); + + thrown.expect(Exception.class); + compileMgr.compile(); } @Test(timeout = 25000)
