You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sqoop.apache.org by ma...@apache.org on 2017/03/14 11:39:37 UTC
[2/2] sqoop git commit: SQOOP-3100: Clean up expected exception logic
in tests - part III.
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 <ma...@apache.org>
Authored: Tue Mar 14 12:38:18 2017 +0100
Committer: Attila Szabo <ma...@apache.org>
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)