> On Dec. 22, 2017, 12:02 p.m., Szabolcs Vasas wrote:
> > src/java/org/apache/sqoop/tool/ImportAllTablesTool.java
> > Line 109 (original), 110 (patched)
> > <https://reviews.apache.org/r/64715/diff/1/?file=1924003#file1924003line110>
> >
> >     Now that we clone the whole SqoopOptions object this line and the 
> > comment becomes redundant.

Thanks, removed these.


> On Dec. 22, 2017, 12:02 p.m., Szabolcs Vasas wrote:
> > src/test/org/apache/sqoop/TestSqoopOptions.java
> > Lines 36 (patched)
> > <https://reviews.apache.org/r/64715/diff/1/?file=1924004#file1924004line36>
> >
> >     I think this method is a bit complicated. SqoopOptions has setters 
> > defined why do we need a SqoopTool for parsing it?
> >     Also there is no need for catching exceptions in this method, if an 
> > exception is thrown the test will fail anyway.

Thanks for your insights! Regarding the Exceptions: I moved these into the 
declaration. Better clarity.


Regarding using the setters only: I used the parseArguments functions to get 
closer to what a SqoopOptions instance might look like in production. While it 
is complicated, I think it's better to create it like this because of the 
improved coverage. The ideal thing would be even not to call the setters at all.


My only criteria for a unit test is that it should be reasonably fast (i.e. 
less than 500ms). Relying on the Tool classes doesn't violate this, thus I 
prefer to create the objects this way. Do you disagree? Should we follow a 
different approach for unit tests? (Maybe keep them from touching unrelated 
functionality i.e. object construction?)


> On Dec. 22, 2017, 12:02 p.m., Szabolcs Vasas wrote:
> > src/test/org/apache/sqoop/TestSqoopOptions.java
> > Lines 105 (patched)
> > <https://reviews.apache.org/r/64715/diff/1/?file=1924004#file1924004line105>
> >
> >     The best practice for asserting Throwable types and messages is to use 
> > the ExpectedException rule. You can see its example usage in 
> > org.apache.sqoop.tool.ImportToolValidateOptionsTest

This knowledge was missing from my repertoire. Much appriciated.


- Fero


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/64715/#review194418
-----------------------------------------------------------


On Dec. 27, 2017, 3:36 p.m., Fero Szabo wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/64715/
> -----------------------------------------------------------
> 
> (Updated Dec. 27, 2017, 3:36 p.m.)
> 
> 
> Review request for Sqoop, Boglarka Egyed and Szabolcs Vasas.
> 
> 
> Bugs: SQOOP-3241
>     https://issues.apache.org/jira/browse/SQOOP-3241
> 
> 
> Repository: sqoop-trunk
> 
> 
> Description
> -------
> 
> SQOOP-3241
> ==========
> 
> TL;DR: The problem is that the ImportAllTablesTool passes the same 
> SqoopOptions object in every importTable invocation. Since SqoopOptions is 
> mutable, this can lead to errors.
> 
> The solution: 
> ------------
> - SqoopOptions already implements Clonable. The solution uses the clone 
> method to create a copy of SqoopOptions for each invocation.
> - I've also added unit tests for the clone function, and
> - Introduced a new (test-scoped) dependency, i.e. assertj, because it 
> contains the isEqualToComparingFieldByFieldRecursively function
> 
> Concerns:
> ---------
> - The Clonable interface is not recommended to be used by many sources, but 
> it seems to be the lesser evil here.
> - - Since SqoopOptions has more than a hundred fields, a copy constructor 
> would add a lot of code to be maintained.
> - - Implementing a copy constructor either through reflection or through 
> serialization would add unwanted complexity.
> - - The issues with Clonable really arise when there is a class hierarchy; 
> this won't be a problem for SqoopOptions, as it doesn't really make sense to 
> extend this class.
> - I've just covered two tools with the unit tests, would we benefit from more 
> coverage?
> - The added dependency (please check if the config looks ok), 2.8.0 is an 
> older version, but this is because Sqoop is using Java 1.7
> 
> 
> Diffs
> -----
> 
>   ivy.xml 601aa015 
>   ivy/libraries.properties 2ef04f4f 
>   src/java/org/apache/sqoop/tool/ImportAllTablesTool.java d6d9f604 
>   src/test/org/apache/sqoop/TestSqoopOptions.java 6d55c337 
> 
> 
> Diff: https://reviews.apache.org/r/64715/diff/2/
> 
> 
> Testing
> -------
> 
> unit tests and 3rd party integration tests
> 
> com.cloudera.sqoop.manager.OracleExportTest had an error in the first run, 
> but passed in the second. It just seems flaky.
> 
> 
> Thanks,
> 
> Fero Szabo
> 
>

Reply via email to