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

Kirk Lund updated GEODE-1350:
-----------------------------
    Description: 
As of JUnit 4.12, the use of Categories with the Parameterized runner is broken 
and may not get fixed by the JUnit community.

All Geode tests using Paramterized should be reimplemented to use 
JUnitParamsRunner.

Example 1 of test using JUnitParamsRunner:
{noformat}
@Category(UnitTest.class)
@RunWith(JUnitParamsRunner.class)
public class LogServiceJUnitTest {

  @Test
  @Parameters(method = "getToLevelParameters")
  public void toLevelShouldReturnMatchingLog4jLevel(final int intLevel, final 
Level level) {
    assertThat(LogService.toLevel(intLevel)).isSameAs(level);
  }

  private static final Object[] getToLevelParameters() {
    return $(
        new Object[] { 0, Level.OFF },
        new Object[] { 100, Level.FATAL },
        new Object[] { 200, Level.ERROR },
        new Object[] { 300, Level.WARN },
        new Object[] { 400, Level.INFO },
        new Object[] { 500, Level.DEBUG },
        new Object[] { 600, Level.TRACE },
        new Object[] { Integer.MAX_VALUE, Level.ALL }
    );
  }
{noformat}

Example 2 of test using JUnitParamsRunner:
{noformat}
@Category(UnitTest.class)
@RunWith(JUnitParamsRunner.class)
public class RegionEntryFactoryBuilderJUnitTest {

  /**
   * This method will test that the correct RegionEntryFactory is created
   * dependent on the 5 conditionals:
   * enableStats, enableLRU, enableDisk, enableVersion, enableOffHeap
   */
  @Test
  @Parameters({
      "VMThinRegionEntryHeapFactory,false,false,false,false,false",
      "VMThinRegionEntryOffHeapFactory,false,false,false,false,true",
      "VersionedThinRegionEntryHeapFactory,false,false,false,true,false",
      "VersionedThinRegionEntryOffHeapFactory,false,false,false,true,true",
      "VMThinDiskRegionEntryHeapFactory,false,false,true,false,false",
      "VMThinDiskRegionEntryOffHeapFactory,false,false,true,false,true",
      "VersionedThinDiskRegionEntryHeapFactory,false,false,true,true,false",
      "VersionedThinDiskRegionEntryOffHeapFactory,false,false,true,true,true",
      "VMThinLRURegionEntryHeapFactory,false,true,false,false,false",
      "VMThinLRURegionEntryOffHeapFactory,false,true,false,false,true",
      "VersionedThinLRURegionEntryHeapFactory,false,true,false,true,false",
      "VersionedThinLRURegionEntryOffHeapFactory,false,true,false,true,true",
      "VMThinDiskLRURegionEntryHeapFactory,false,true,true,false,false",
      "VMThinDiskLRURegionEntryOffHeapFactory,false,true,true,false,true",
      "VersionedThinDiskLRURegionEntryHeapFactory,false,true,true,true,false",
      "VersionedThinDiskLRURegionEntryOffHeapFactory,false,true,true,true,true",
      "VMStatsRegionEntryHeapFactory,true,false,false,false,false",
      "VMStatsRegionEntryOffHeapFactory,true,false,false,false,true",
      "VersionedStatsRegionEntryHeapFactory,true,false,false,true,false",
      "VersionedStatsRegionEntryOffHeapFactory,true,false,false,true,true",
      "VMStatsDiskRegionEntryHeapFactory,true,false,true,false,false",
      "VMStatsDiskRegionEntryOffHeapFactory,true,false,true,false,true",
      "VersionedStatsDiskRegionEntryHeapFactory,true,false,true,true,false",
      "VersionedStatsDiskRegionEntryOffHeapFactory,true,false,true,true,true",
      "VMStatsLRURegionEntryHeapFactory,true,true,false,false,false",
      "VMStatsLRURegionEntryOffHeapFactory,true,true,false,false,true",
      "VersionedStatsLRURegionEntryHeapFactory,true,true,false,true,false",
      "VersionedStatsLRURegionEntryOffHeapFactory,true,true,false,true,true",
      "VMStatsDiskLRURegionEntryHeapFactory,true,true,true,false,false",
      "VMStatsDiskLRURegionEntryOffHeapFactory,true,true,true,false,true",
      "VersionedStatsDiskLRURegionEntryHeapFactory,true,true,true,true,false",
      "VersionedStatsDiskLRURegionEntryOffHeapFactory,true,true,true,true,true"
  })
  public void testRegionEntryFactoryUnitTest(String factoryName, boolean 
enableStats, boolean enableLRU, boolean enableDisk,
      boolean enableVersioning, boolean enableOffHeap) {
    assertEquals(factoryName,
        regionEntryFactoryBuilder.getRegionEntryFactoryOrNull(enableStats, 
enableLRU, enableDisk, enableVersioning, 
enableOffHeap).getClass().getSimpleName());
  }
{noformat}

Example of BROKEN test using Parameterized which is skipped by our test targets 
due to use of Categories:
{noformat}
@Category(IntegrationTest.class)
@RunWith(Parameterized.class)
public class GfshCommandsSecurityTest {

  public GfshCommandsSecurityTest(boolean useHttp){
    gfshConnection = new GfshShellConnectionRule(jmxPort, httpPort, useHttp);
  }

  @Parameterized.Parameters
  public static Collection parameters() {
    return Arrays.asList(new Object[][] {
        { false},  // useHttp=false,
        { true } // useHttp=true,
    });
  }

{noformat}


  was:
As of JUnit 4.12, the use of Categories with the Parameterized runner is broken 
and may not get fixed by the JUnit community.

All Geode tests using 

Example of dunit test with a custom runner:
{noformat}
@Category(DistributedTest.class)
@RunWith(Parameterized.class)
public class ListAndDescribeDiskStoreCommandsDUnitTest extends 
CliCommandTestBase {
{noformat}
Gradle command:
{noformat}
./gradlew -DdistributedTest.single=ListAndDescribeDiskStoreCommandsDUnitTest 
geode-core:distributedTest
{noformat}
Result:
{noformat}
:geode-core:distributedTest FAILED
:combineReports
All test reports at 
/export/latvia1/users/klund/dev/gemfire/open/build/reports/combined

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':geode-core:distributedTest'.
> Could not find matching test for pattern: 
> ListAndDescribeDiskStoreCommandsDUnitTest

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug 
option to get more log output.

BUILD FAILED

Total time: 5.918 secs
{noformat}
Example of dunit test that does not specify a custom runner:
{noformat}
@Category(DistributedTest.class)
public class DistributedMemberDUnitTest extends JUnit4DistributedTestCase {
{noformat}
Gradle command:
{noformat}
./gradlew -DdistributedTest.single=DistributedMemberDUnitTest 
geode-core:distributedTest
{noformat}
Result:
{noformat}
geode-core:distributedTest
:combineReports
All test reports at 
/export/latvia1/users/klund/dev/gemfire/open/build/reports/combined

BUILD SUCCESSFUL

Total time: 32.987 secs
{noformat}



> JUnit 4 @Category combined with @RunWith(Parameterized.class) does not work
> ---------------------------------------------------------------------------
>
>                 Key: GEODE-1350
>                 URL: https://issues.apache.org/jira/browse/GEODE-1350
>             Project: Geode
>          Issue Type: Bug
>          Components: build
>            Reporter: Kirk Lund
>
> As of JUnit 4.12, the use of Categories with the Parameterized runner is 
> broken and may not get fixed by the JUnit community.
> All Geode tests using Paramterized should be reimplemented to use 
> JUnitParamsRunner.
> Example 1 of test using JUnitParamsRunner:
> {noformat}
> @Category(UnitTest.class)
> @RunWith(JUnitParamsRunner.class)
> public class LogServiceJUnitTest {
>   @Test
>   @Parameters(method = "getToLevelParameters")
>   public void toLevelShouldReturnMatchingLog4jLevel(final int intLevel, final 
> Level level) {
>     assertThat(LogService.toLevel(intLevel)).isSameAs(level);
>   }
>   private static final Object[] getToLevelParameters() {
>     return $(
>         new Object[] { 0, Level.OFF },
>         new Object[] { 100, Level.FATAL },
>         new Object[] { 200, Level.ERROR },
>         new Object[] { 300, Level.WARN },
>         new Object[] { 400, Level.INFO },
>         new Object[] { 500, Level.DEBUG },
>         new Object[] { 600, Level.TRACE },
>         new Object[] { Integer.MAX_VALUE, Level.ALL }
>     );
>   }
> {noformat}
> Example 2 of test using JUnitParamsRunner:
> {noformat}
> @Category(UnitTest.class)
> @RunWith(JUnitParamsRunner.class)
> public class RegionEntryFactoryBuilderJUnitTest {
>   /**
>    * This method will test that the correct RegionEntryFactory is created
>    * dependent on the 5 conditionals:
>    * enableStats, enableLRU, enableDisk, enableVersion, enableOffHeap
>    */
>   @Test
>   @Parameters({
>       "VMThinRegionEntryHeapFactory,false,false,false,false,false",
>       "VMThinRegionEntryOffHeapFactory,false,false,false,false,true",
>       "VersionedThinRegionEntryHeapFactory,false,false,false,true,false",
>       "VersionedThinRegionEntryOffHeapFactory,false,false,false,true,true",
>       "VMThinDiskRegionEntryHeapFactory,false,false,true,false,false",
>       "VMThinDiskRegionEntryOffHeapFactory,false,false,true,false,true",
>       "VersionedThinDiskRegionEntryHeapFactory,false,false,true,true,false",
>       "VersionedThinDiskRegionEntryOffHeapFactory,false,false,true,true,true",
>       "VMThinLRURegionEntryHeapFactory,false,true,false,false,false",
>       "VMThinLRURegionEntryOffHeapFactory,false,true,false,false,true",
>       "VersionedThinLRURegionEntryHeapFactory,false,true,false,true,false",
>       "VersionedThinLRURegionEntryOffHeapFactory,false,true,false,true,true",
>       "VMThinDiskLRURegionEntryHeapFactory,false,true,true,false,false",
>       "VMThinDiskLRURegionEntryOffHeapFactory,false,true,true,false,true",
>       "VersionedThinDiskLRURegionEntryHeapFactory,false,true,true,true,false",
>       
> "VersionedThinDiskLRURegionEntryOffHeapFactory,false,true,true,true,true",
>       "VMStatsRegionEntryHeapFactory,true,false,false,false,false",
>       "VMStatsRegionEntryOffHeapFactory,true,false,false,false,true",
>       "VersionedStatsRegionEntryHeapFactory,true,false,false,true,false",
>       "VersionedStatsRegionEntryOffHeapFactory,true,false,false,true,true",
>       "VMStatsDiskRegionEntryHeapFactory,true,false,true,false,false",
>       "VMStatsDiskRegionEntryOffHeapFactory,true,false,true,false,true",
>       "VersionedStatsDiskRegionEntryHeapFactory,true,false,true,true,false",
>       "VersionedStatsDiskRegionEntryOffHeapFactory,true,false,true,true,true",
>       "VMStatsLRURegionEntryHeapFactory,true,true,false,false,false",
>       "VMStatsLRURegionEntryOffHeapFactory,true,true,false,false,true",
>       "VersionedStatsLRURegionEntryHeapFactory,true,true,false,true,false",
>       "VersionedStatsLRURegionEntryOffHeapFactory,true,true,false,true,true",
>       "VMStatsDiskLRURegionEntryHeapFactory,true,true,true,false,false",
>       "VMStatsDiskLRURegionEntryOffHeapFactory,true,true,true,false,true",
>       "VersionedStatsDiskLRURegionEntryHeapFactory,true,true,true,true,false",
>       
> "VersionedStatsDiskLRURegionEntryOffHeapFactory,true,true,true,true,true"
>   })
>   public void testRegionEntryFactoryUnitTest(String factoryName, boolean 
> enableStats, boolean enableLRU, boolean enableDisk,
>       boolean enableVersioning, boolean enableOffHeap) {
>     assertEquals(factoryName,
>         regionEntryFactoryBuilder.getRegionEntryFactoryOrNull(enableStats, 
> enableLRU, enableDisk, enableVersioning, 
> enableOffHeap).getClass().getSimpleName());
>   }
> {noformat}
> Example of BROKEN test using Parameterized which is skipped by our test 
> targets due to use of Categories:
> {noformat}
> @Category(IntegrationTest.class)
> @RunWith(Parameterized.class)
> public class GfshCommandsSecurityTest {
>   public GfshCommandsSecurityTest(boolean useHttp){
>     gfshConnection = new GfshShellConnectionRule(jmxPort, httpPort, useHttp);
>   }
>   @Parameterized.Parameters
>   public static Collection parameters() {
>     return Arrays.asList(new Object[][] {
>         { false},  // useHttp=false,
>         { true } // useHttp=true,
>     });
>   }
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to