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
+ }
+ }
+}