You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by kl...@apache.org on 2015/08/20 01:10:04 UTC

[11/12] incubator-geode git commit: GEODE-213: New unit test that confirms bug

GEODE-213: New unit test that confirms bug


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/581702ac
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/581702ac
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/581702ac

Branch: refs/heads/develop
Commit: 581702ac1d2a9debe8619680d09fa868b9ca8b05
Parents: f246c7f
Author: Kirk Lund <kl...@pivotal.io>
Authored: Wed Aug 19 16:01:26 2015 -0700
Committer: Kirk Lund <kl...@pivotal.io>
Committed: Wed Aug 19 16:08:07 2015 -0700

----------------------------------------------------------------------
 build.gradle                                    |   2 +
 .../WanCommandsControllerJUnitTest.java         | 162 +++++++++++++++++++
 2 files changed, 164 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/581702ac/build.gradle
----------------------------------------------------------------------
diff --git a/build.gradle b/build.gradle
index 42b4a14..d7b4965 100755
--- a/build.gradle
+++ b/build.gradle
@@ -278,11 +278,13 @@ subprojects {
     testCompile 'com.github.stefanbirkner:system-rules:1.9.0'
     testCompile 'edu.umd.cs.mtc:multithreadedtc:1.01'
     testCompile 'junit:junit:4.12'
+    testCompile 'org.assertj:assertj-core:2.1.0'
     testCompile 'org.mockito:mockito-core:1.10.19'
     testCompile 'org.hamcrest:hamcrest-all:1.3'
     testCompile 'org.jmock:jmock:2.8.1'
     testCompile 'org.jmock:jmock-junit4:2.8.1'
     testCompile 'org.jmock:jmock-legacy:2.8.1'
+    testCompile 'pl.pragmatists:JUnitParams:1.0.4'
     
     testRuntime 'cglib:cglib:3.1'
     testRuntime 'org.objenesis:objenesis:2.1'

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/581702ac/gemfire-core/src/test/java/com/gemstone/gemfire/management/internal/web/controllers/WanCommandsControllerJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/management/internal/web/controllers/WanCommandsControllerJUnitTest.java b/gemfire-core/src/test/java/com/gemstone/gemfire/management/internal/web/controllers/WanCommandsControllerJUnitTest.java
new file mode 100755
index 0000000..fb39d8c
--- /dev/null
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/management/internal/web/controllers/WanCommandsControllerJUnitTest.java
@@ -0,0 +1,162 @@
+package com.gemstone.gemfire.management.internal.web.controllers;
+
+import static com.gemstone.gemfire.management.internal.cli.i18n.CliStrings.*;
+import static junitparams.JUnitParamsRunner.$;
+import static org.assertj.core.api.Assertions.*;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+
+import com.gemstone.gemfire.test.junit.categories.UnitTest;
+
+import junitparams.JUnitParamsRunner;
+import junitparams.Parameters;
+
+/**
+ * Unit tests for WanCommandsController. 
+ * 
+ * Introduced for GEODE-213 "JMX -http manager treats "start gateway-sender" as "start gateway-receiver"
+ *  
+ * @author Kirk Lund
+ */
+@SuppressWarnings("unused")
+@Category(UnitTest.class)
+@RunWith(JUnitParamsRunner.class)
+public class WanCommandsControllerJUnitTest {
+
+  private TestableWanCommandsController wanCommandsController;
+  
+  @Before
+  public void setUp() {
+    this.wanCommandsController = new TestableWanCommandsController();
+  }
+  
+  private static final Object[] getParametersWithGroups() {
+    return $(
+        new Object[] { "sender1", new String[] { "group1" }, new String[] { }, true, false },
+        new Object[] { "sender2", new String[] { "group1, group2" }, new String[] { }, true, false }
+    );
+  }
+
+  private static final Object[] getParametersWithMembers() {
+    return $(
+        new Object[] { "sender3", new String[] { }, new String[] { "member1" }, false, true },
+        new Object[] { "sender4", new String[] { }, new String[] { "member1, member2" }, false, true }
+    );
+  }
+  
+  private static final Object[] getParametersWithGroupsAndMembers() {
+    return $(
+        new Object[] { "sender5", new String[] { "group1" }, new String[] { "member1" }, true, true },
+        new Object[] { "sender6", new String[] { "group1,group2" }, new String[] { "member1,member2" }, true, true },
+        new Object[] { "sender7", new String[] { "group1, group2" }, new String[] { "member1, member2" }, true, true }
+    );
+  }
+  
+  @Test
+  public void shouldDefineStartGatewayReceiverCommandWithNulls() {
+    this.wanCommandsController.startGatewaySender(null, null, null);
+    
+    assertThat(this.wanCommandsController.testableCommand).contains("--"+START_GATEWAYSENDER__ID+"="+null);
+    assertThat(this.wanCommandsController.testableCommand).contains(START_GATEWAYSENDER);
+    assertThat(this.wanCommandsController.testableCommand).doesNotContain(START_GATEWAYRECEIVER__GROUP);
+    assertThat(this.wanCommandsController.testableCommand).doesNotContain(START_GATEWAYRECEIVER__MEMBER);
+  }
+  
+  @Test
+  @Parameters(method = "getParametersWithGroups")
+  public void shouldDefineStartGatewayReceiverCommandWithGroups(final String gatewaySenderId, final String[] groups, final String[] members, final boolean containsGroups, final boolean containsMembers) {
+    this.wanCommandsController.startGatewaySender(gatewaySenderId, groups, members);
+    
+    assertThat(this.wanCommandsController.testableCommand).contains(START_GATEWAYSENDER);
+    assertThat(this.wanCommandsController.testableCommand).contains("--"+START_GATEWAYSENDER__ID+"="+gatewaySenderId);
+    assertThat(this.wanCommandsController.testableCommand).contains(START_GATEWAYRECEIVER__GROUP);
+    assertThat(this.wanCommandsController.testableCommand).doesNotContain(START_GATEWAYRECEIVER__MEMBER);
+  }
+  
+  @Test
+  @Parameters(method = "getParametersWithMembers")
+  public void shouldDefineStartGatewayReceiverCommandWithMembers(final String gatewaySenderId, final String[] groups, final String[] members, final boolean containsGroups, final boolean containsMembers) {
+    this.wanCommandsController.startGatewaySender(gatewaySenderId, groups, members);
+    
+    assertThat(this.wanCommandsController.testableCommand).contains(START_GATEWAYSENDER);
+    assertThat(this.wanCommandsController.testableCommand).contains("--"+START_GATEWAYSENDER__ID+"="+gatewaySenderId);
+    assertThat(this.wanCommandsController.testableCommand).doesNotContain(START_GATEWAYRECEIVER__GROUP);
+    assertThat(this.wanCommandsController.testableCommand).contains(START_GATEWAYRECEIVER__MEMBER);
+  }
+  
+  @Test
+  @Parameters(method = "getParametersWithGroupsAndMembers")
+  public void shouldDefineStartGatewayReceiverCommandWithGroupsAndMembers(final String gatewaySenderId, final String[] groups, final String[] members, final boolean containsGroups, final boolean containsMembers) {
+    this.wanCommandsController.startGatewaySender(gatewaySenderId, groups, members);
+    
+    assertThat(this.wanCommandsController.testableCommand).contains(START_GATEWAYSENDER);
+    assertThat(this.wanCommandsController.testableCommand).contains("--"+START_GATEWAYSENDER__ID+"="+gatewaySenderId);
+    assertThat(this.wanCommandsController.testableCommand).contains(START_GATEWAYRECEIVER__GROUP);
+    assertThat(this.wanCommandsController.testableCommand).contains(START_GATEWAYRECEIVER__MEMBER);
+  }
+  
+  @Test
+  public void shouldDefineStartGatewayReceiverCommandWithOutGroupsOrMembers() {
+    final String gatewaySenderId = "senderA";
+        
+    this.wanCommandsController.startGatewaySender("senderA", new String[] {}, new String[] {});
+    
+    assertThat(this.wanCommandsController.testableCommand).contains(START_GATEWAYSENDER);
+    assertThat(this.wanCommandsController.testableCommand).contains("--"+START_GATEWAYSENDER__ID+"="+gatewaySenderId);
+    assertThat(this.wanCommandsController.testableCommand).doesNotContain(START_GATEWAYRECEIVER__GROUP);
+    assertThat(this.wanCommandsController.testableCommand).doesNotContain(START_GATEWAYRECEIVER__MEMBER);
+  }
+  
+  /**
+   * Tests null gatewaySenderId.
+   * 
+   * This test verifies that the class under test allows null value which 
+   * would only be rejected at runtime by the overall framework and is tested 
+   * within an integration test.
+   *
+   * @see WanCommandGatewaySenderStartDUnitTest
+   */
+  @Test
+  public void shouldDefineStartGatewayReceiverCommandWithNullGatewaySenderId() {
+    this.wanCommandsController.startGatewaySender(null, null, null);
+    
+    assertThat(this.wanCommandsController.testableCommand).contains(START_GATEWAYSENDER);
+    assertThat(this.wanCommandsController.testableCommand).contains("--"+START_GATEWAYSENDER__ID+"="+null);
+  }
+  
+  /**
+   * Tests empty gatewaySenderId.
+   * 
+   * This test verifies that the class under test allows empty value which 
+   * would only be rejected at runtime by the overall framework and is tested 
+   * within an integration test.
+   *
+   * @see WanCommandGatewaySenderStartDUnitTest
+   */
+  @Test
+  public void shouldDefineStartGatewayReceiverCommandWithEmptyGatewaySenderId() {
+    this.wanCommandsController.startGatewaySender("", null, null);
+    
+    assertThat(this.wanCommandsController.testableCommand).contains(START_GATEWAYSENDER);
+    assertThat(this.wanCommandsController.testableCommand).contains("--"+START_GATEWAYSENDER__ID+"="+"");
+  }
+  
+  /**
+   * It would be ideal to refactor AbstractCommandsController such that 
+   * defining of command strings and submitting them for execution are
+   * performed by two different classes. Then we could mock the executor
+   * class while testing just the command string definition class.
+   */
+  public static class TestableWanCommandsController extends WanCommandsController {
+    protected String testableCommand;
+    
+    @Override
+    protected String processCommand(final String command) {
+      this.testableCommand = command;
+      return null; // do nothing
+    }
+  }
+}