[ 
https://issues.apache.org/jira/browse/HADOOP-10461?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

jay vyas updated HADOOP-10461:
------------------------------

    Summary: Create an extensible single point entry for of HCFS tests - using 
RawLocalFileSystem as example impl.  (was: Create an extensible single point of 
HCFS tests - using RawLocalFileSystem as example impl.)

> Create an extensible single point entry for of HCFS tests - using 
> RawLocalFileSystem as example impl.
> -----------------------------------------------------------------------------------------------------
>
>                 Key: HADOOP-10461
>                 URL: https://issues.apache.org/jira/browse/HADOOP-10461
>             Project: Hadoop Common
>          Issue Type: Bug
>            Reporter: jay vyas
>            Priority: Minor
>
> Currently alot of manual inheritance and stub classes are required in order 
> to run the FileSystemBaseContract and FSMainOperations tests.   This means 
> that the HCFS Test suite for any given FileSystem spans many classes, and 
> makes it confusing and cumbersome for anyone to create new tests for a file 
> system, and also very hard to audit and update the tests for a particular 
> file system.
> *If each FileSystem had a single point of entry for its tests, we would be 
> much better off.*
> There are two ways to do this.  
> * Have a folder or package for each file system (i.e.  
> .//hadoop-common/src/test/java/org/apache/hadoop/fs/rawlocal ) Or
> * Wrap all the HCFS Test implementation classes into a single class (i.e. 
> RawLocalFileSystemHCFSTestSuite.java).  
> *The purpose of this JIRA is to implement a wrapper class for the 
> RawLocalFileSystem, which serves as a single point of entry to ALL 
> RawLocalFileSystem tests.  This will cleanup the RawLocalFileSystem tests 
> while providing other HCFS implementors a template they can use for their own 
> filesystems (i.e. they can just copy the code and customize it however they 
> want).*
> For example:  This is a sampling of the classes necessary to glue Local FS 
> implementations into the Existing generic FileSystem test classes: 
> {noformat}
> .//hadoop-common/src/test/java/org/apache/hadoop/fs/TestFcLocalFsPermission.java
> .//hadoop-common/src/test/java/org/apache/hadoop/fs/TestFcLocalFsUtil.java
> .//hadoop-common/src/test/java/org/apache/hadoop/fs/TestFSMainOperationsLocalFileSystem.java
> .//hadoop-common/src/test/java/org/apache/hadoop/fs/TestLocalDirAllocator.java
> .//hadoop-common/src/test/java/org/apache/hadoop/fs/TestLocalFileSystem.java
> .//hadoop-common/src/test/java/org/apache/hadoop/fs/TestLocalFileSystemPermission.java
> .//hadoop-common/src/test/java/org/apache/hadoop/fs/TestLocalFsFCStatistics.java
> .//hadoop-common/src/test/java/org/apache/hadoop/fs/TestLocalFSFileContextCreateMkdir.java
> .//hadoop-common/src/test/java/org/apache/hadoop/fs/TestLocalFSFileContextMainOperations.java
> .//hadoop-common/src/test/java/org/apache/hadoop/fs/TestSymlinkLocalFS.java
> .//hadoop-common/src/test/java/org/apache/hadoop/fs/TestSymlinkLocalFSFileContext.java
> .//hadoop-common/src/test/java/org/apache/hadoop/fs/TestSymlinkLocalFSFileSystem.java
> .//hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestFcCreateMkdirLocalFs.java
> .//hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestFcMainOperationsLocalFs.java
> .//hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestFcPermissionsLocalFs.java
> .//hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestFSMainOperationsLocalFileSystem.java
> .//hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestViewFileSystemLocalFileSystem.java
> .//hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestViewFileSystemWithAuthorityLocalFileSystem.java
> .//hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestViewFsLocalFs.java
> .//hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestViewFsWithAuthorityLocalFs.java
> {noformat}
> Lets wrap these tests into a Suite for the RawLocalFileSystem, such that any 
> once can copy that suite to build tests for their own file system. 
> Using the "Enclosed" Junit 
> (http://junit-team.github.io/junit/javadoc/4.10/org/junit/experimental/runners/Enclosed.html
>  ) class, we can combine all of the RawLocalFileSystem tests into a single 
> class.  That way  
> * Can save on boiler plate for setup and declaring the same FileSystem stubs 
> over and over again, making the test "logic" more easy to focus on.  For 
> example, here are some repeat file context declarations for ViewFS tests:
> {noformat}
> 01:42:08 {TRUNK} $ git grep 
> "ViewFsTestSetup.setupForViewFsLocalFs(fileContextTestHelper)"
> hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestFcCreateMkdirLocalFs.java:
>     fc = ViewFsTestSetup.setupForViewFsLocalFs(fileContextTestHelper);
> hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestFcMainOperationsLocalFs.java:
>     fc = ViewFsTestSetup.setupForViewFsLocalFs(fileContextTestHelper);
> hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestFcPermissionsLocalFs.java:
>     return ViewFsTestSetup.setupForViewFsLocalFs(fileContextTestHelper);
> 01:45:19 {TRUNK} $ git grep " 
> FileContext.getFileContext(FsConstants.VIEWFS_URI, conf);"
> hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestViewFsURIs.java:  
>   FileContext.getFileContext(FsConstants.VIEWFS_URI, conf);
> hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/ViewFsBaseTest.java:  
>   fcView = FileContext.getFileContext(FsConstants.VIEWFS_URI, conf);
> hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/ViewFsTestSetup.java: 
>    FileContext fc = FileContext.getFileContext(FsConstants.VIEWFS_URI, conf);
> {noformat}
> * Can easily be adopted for other FileSystems.
> * Can read in System properties to skip certain tests , thus providing 
> support for the type of variability that we know FileSystem tests require.  
> These can then be used to implement the semantics of HADOOP-9361.
> Ideally, we could replace RawLocalFileSystem tests with this injector as a 
> second follow up patch to this, it would reduce the overall amount of code 
> required, probably.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to