Skip to content

Commit 3219369

Browse files
authored
Merge pull request #492 from gaol/EJBCLIENT-263-4.0
[EJBCLIENT-263] Testsuite enhancements
2 parents ef9cfde + 8d70582 commit 3219369

24 files changed

+1151
-566
lines changed

src/main/java/org/jboss/ejb/client/DiscoveryEJBClientInterceptor.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,9 @@ public Object handleInvocationResult(final EJBClientInvocationContext context) t
138138
try {
139139
result = context.getResult();
140140
} catch (NoSuchEJBException | RequestSendFailedException e) {
141+
if (Logs.INVOCATION.isDebugEnabled()) {
142+
Logs.INVOCATION.debugf("DiscoveryEJBClientInterceptor: handleInvocationResult: (exception = %s)", e.getMessage());
143+
}
141144
processMissingTarget(context, e);
142145
throw e;
143146
}

src/test/java/org/jboss/ejb/client/test/AbstractEJBClientTestCase.java

Lines changed: 20 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -29,34 +29,6 @@
2929
/**
3030
* A base class for EJB client test cases.
3131
*
32-
* This base class provides helpers for the client side test case to model the following aspects of s server environment:
33-
* - starting/stopping of servers with specific endpoint name, hostname and port
34-
* - deployment/undeployment of EJBs on those servers
35-
* - simple, generic Stateful and Stateless Session beans (with real annotations and methods)
36-
* - named clusters of servers
37-
*
38-
* Convenience methods are available for performing common tasks in test cases which subclass from this abstract class.
39-
* For example, to start a singleton node and deploy a SFSB on that node:
40-
* startServer(0);
41-
* deployStateful(0);
42-
* This starts the server with endpoint name "node1", hostname "node1" and port 6999. Module updates will be received by the client.
43-
* We can undeploy and shutdown the node:
44-
* undeployStateful(0);
45-
* stopServer(0);
46-
*
47-
* To create a cluster of two nodes called "ejb" and deploy a Stateless bean on the second node only:
48-
* startServer(0);
49-
* startServer(1);
50-
* defineCluster(0, CLUSTER);
51-
* defineCluster(1, CLUSTER);
52-
* deployStateless(1);
53-
* Module updates and topology updates will be received by the client.
54-
* Changes to cluster membership need to be arranged by creating new ClusterInfo objects corresponding to the actual membership.
55-
* We can bring down the cluster:
56-
* undeployStateless(1);
57-
* removeCluster(0, "ejb")
58-
* removeCluster(1, "ejb")
59-
*
6032
* @author <a href="mailto:[email protected]">Richard Achmatowicz</a>
6133
*/
6234
public class AbstractEJBClientTestCase {
@@ -172,9 +144,26 @@ public void undeployStateful(int index) {
172144
logger.info("Unregistered SFSB module " + MODULE_IDENTIFIER.toString() + " on server " + serverNames[index]);
173145
}
174146

175-
/*
176-
* bean deployment helpers for generic beans StatefulEchoBean, StatelessEchoBean in module "my-other-app"/"my-bar-module"
177-
*/
147+
148+
public void defineCluster(int index, ClusterTopologyListener.ClusterInfo cluster) {
149+
servers[index].addCluster(cluster);
150+
logger.info("Added node to cluster " + cluster + ": server " + servers[index]);
151+
}
152+
153+
public void addClusterNodes(int index, ClusterTopologyListener.ClusterInfo cluster) {
154+
servers[index].addClusterNodes(cluster);
155+
logger.info("Added node(s) to cluster " + cluster + ":" + cluster.getNodeInfoList());
156+
}
157+
158+
public void removeClusterNodes(int index, ClusterTopologyListener.ClusterRemovalInfo cluster) {
159+
servers[index].removeClusterNodes(cluster);
160+
logger.info("Removed node(s) from cluster " + cluster + ":" + cluster.getNodeNames());
161+
}
162+
163+
public void removeCluster(int index, String clusterName) {
164+
servers[index].removeCluster(clusterName);
165+
logger.info("Removed cluster " + clusterName + " from node: server " + servers[index]);
166+
}
178167

179168
public void deployOtherStateless(int index) {
180169
servers[index].register(OTHER_APP, MODULE_NAME, DISTINCT_NAME, StatelessEchoBean.class.getSimpleName(), new StatelessEchoBean(serverNames[index]));
@@ -196,10 +185,6 @@ public void undeployOtherStateful(int index) {
196185
logger.info("Unregistered other SFSB module " + OTHER_MODULE_IDENTIFIER.toString() + " on server " + serverNames[index]);
197186
}
198187

199-
/*
200-
* bean deployment helpers for custom beans in custom modules
201-
*/
202-
203188
public void deployCustomBean(int index, String app, String module, String distinct, String beanName, Object beanInstance) {
204189
servers[index].register(app, module, distinct, beanName, beanInstance);
205190
logger.info("Registered custom bean " + (new EJBModuleIdentifier(app, module, distinct)).toString() + " on server " + serverNames[index]);
@@ -210,29 +195,4 @@ public void undeployCustomBean(int index, String app, String module, String dist
210195
logger.info("Unregistered custom bean " + (new EJBModuleIdentifier(app, module, distinct)).toString() + " on server " + serverNames[index]);
211196
}
212197

213-
214-
/*
215-
* cluster deployment helpers - these depend on predefined ClusterInfo and NodeInfo objects representing topology update information
216-
*/
217-
218-
public void defineCluster(int index, ClusterTopologyListener.ClusterInfo cluster) {
219-
servers[index].addCluster(cluster);
220-
logger.info("Added node to cluster " + cluster + ": server " + servers[index]);
221-
}
222-
223-
public void addClusterNodes(int index, ClusterTopologyListener.ClusterInfo cluster) {
224-
servers[index].addClusterNodes(cluster);
225-
logger.info("Added node(s) to cluster " + cluster + ":" + cluster.getNodeInfoList());
226-
}
227-
228-
public void removeClusterNodes(int index, ClusterTopologyListener.ClusterRemovalInfo cluster) {
229-
servers[index].removeClusterNodes(cluster);
230-
logger.info("Removed node(s) from cluster " + cluster + ":" + cluster.getNodeNames());
231-
}
232-
233-
public void removeCluster(int index, String clusterName) {
234-
servers[index].removeCluster(clusterName);
235-
logger.info("Removed cluster " + clusterName + " from node: server " + servers[index]);
236-
}
237-
238198
}

src/test/java/org/jboss/ejb/client/test/ClusterNodeSelectorTestCase.java

Lines changed: 25 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
*/
1818
package org.jboss.ejb.client.test;
1919

20-
import java.util.Arrays;
2120
import java.util.Collection;
2221
import java.util.List;
2322

@@ -33,6 +32,8 @@
3332
import org.jboss.ejb.client.test.common.DummyServer;
3433
import org.jboss.ejb.client.test.common.Echo;
3534
import org.jboss.ejb.client.test.common.EchoBean;
35+
import org.jboss.ejb.client.test.common.StatefulEchoBean;
36+
import org.jboss.ejb.client.test.common.StatelessEchoBean;
3637
import org.jboss.ejb.server.ClusterTopologyListener.ClusterInfo;
3738
import org.jboss.ejb.server.ClusterTopologyListener.NodeInfo;
3839
import org.jboss.logging.Logger;
@@ -49,34 +50,11 @@
4950
* @author Jason T. Greene
5051
* @author <a href="mailto:[email protected]">Richard Achmatowicz</a>
5152
*/
52-
public class ClusterNodeSelectorTestCase {
53+
public class ClusterNodeSelectorTestCase extends AbstractEJBClientTestCase {
5354

5455
private static final Logger logger = Logger.getLogger(ClusterNodeSelectorTestCase.class);
5556
private static final String PROPERTIES_FILE = "cluster-node-selector-jboss-ejb-client.properties";
5657

57-
// servers
58-
private static final String SERVER1_NAME = "node1";
59-
private static final String SERVER2_NAME = "node2";
60-
61-
private DummyServer[] servers = new DummyServer[2];
62-
private static String[] serverNames = {SERVER1_NAME, SERVER2_NAME};
63-
private boolean[] serversStarted = new boolean[2] ;
64-
65-
// module
66-
private static final String APP_NAME = "my-foo-app";
67-
private static final String MODULE_NAME = "my-bar-module";
68-
private static final String DISTINCT_NAME = "";
69-
70-
// cluster
71-
// note: node names and server names should match!
72-
private static final String CLUSTER_NAME = "ejb";
73-
private static final String NODE1_NAME = "node1";
74-
private static final String NODE2_NAME = "node2";
75-
76-
private static final NodeInfo NODE1 = DummyServer.getNodeInfo(NODE1_NAME, "localhost",6999,"0.0.0.0",0);
77-
private static final NodeInfo NODE2 = DummyServer.getNodeInfo(NODE2_NAME, "localhost",7099,"0.0.0.0",0);
78-
private static final ClusterInfo CLUSTER = DummyServer.getClusterInfo(CLUSTER_NAME, NODE1, NODE2);
79-
8058
public static class TestSelector implements ClusterNodeSelector {
8159
private static volatile String PICK_NODE = null;
8260

@@ -111,29 +89,18 @@ public static void beforeClass() throws Exception {
11189
public void beforeTest() throws Exception {
11290

11391
// start a server
114-
servers[0] = new DummyServer("localhost", 6999, serverNames[0]);
115-
servers[0].start();
116-
serversStarted[0] = true;
117-
logger.info("Started server " + serverNames[0]);
118-
119-
// start a server
120-
servers[1] = new DummyServer("localhost", 7099, serverNames[1]);
121-
servers[1].start();
122-
serversStarted[1] = true;
123-
logger.info("Started server " + serverNames[1]);
92+
startServer(0, 6999);
93+
startServer(1, 7099);
12494

12595
// deploy modules
126-
servers[0].register(APP_NAME, MODULE_NAME, DISTINCT_NAME, Echo.class.getSimpleName(), new EchoBean(NODE1_NAME));
127-
logger.info("Registered module on server " + servers[0]);
128-
129-
servers[1].register(APP_NAME, MODULE_NAME, DISTINCT_NAME, Echo.class.getSimpleName(), new EchoBean(NODE2_NAME));
130-
logger.info("Registered module on server " + servers[1]);
96+
deployStateful(0);
97+
deployStateless(0);
98+
deployStateful(1);
99+
deployStateless(1);
131100

132101
// define clusters
133-
servers[0].addCluster(CLUSTER);
134-
logger.info("Added node to cluster " + CLUSTER_NAME + ": server " + servers[1]);
135-
servers[1].addCluster(CLUSTER);
136-
logger.info("Added node to cluster " + CLUSTER_NAME +": server " + servers[1]);
102+
defineCluster(0, CLUSTER);
103+
defineCluster(1, CLUSTER);
137104
}
138105

139106
@Test
@@ -160,7 +127,7 @@ public void testClusteredSLSBInvocation() {
160127
logger.info("Testing invocation on SLSB proxy with ClusterAffinity");
161128

162129
// create a proxy for invocation
163-
final StatelessEJBLocator<Echo> statelessEJBLocator = new StatelessEJBLocator<Echo>(Echo.class, APP_NAME, MODULE_NAME, Echo.class.getSimpleName(), DISTINCT_NAME);
130+
final StatelessEJBLocator<Echo> statelessEJBLocator = new StatelessEJBLocator<Echo>(Echo.class, APP_NAME, MODULE_NAME, StatelessEchoBean.class.getSimpleName(), DISTINCT_NAME);
164131
final Echo proxy = EJBClient.createProxy(statelessEJBLocator);
165132

166133
EJBClient.setStrongAffinity(proxy, new ClusterAffinity("ejb"));
@@ -171,12 +138,12 @@ public void testClusteredSLSBInvocation() {
171138

172139
TestSelector.PICK_NODE = NODE1_NAME;
173140
for (int i = 0; i < 10; i++) {
174-
Assert.assertEquals(NODE1_NAME, proxy.whoAreYou());
141+
Assert.assertEquals(NODE1_NAME, proxy.echo("someMsg").getNode());
175142
}
176143

177144
TestSelector.PICK_NODE = NODE2_NAME;
178145
for (int i = 0; i < 10; i++) {
179-
Assert.assertEquals(NODE2_NAME, proxy.whoAreYou());
146+
Assert.assertEquals(NODE2_NAME, proxy.echo("someMsg").getNode());
180147
}
181148
}
182149

@@ -189,22 +156,22 @@ public void testClusteredSFSBInvocation() throws Exception {
189156

190157
TestSelector.PICK_NODE = NODE2_NAME;
191158
// create a proxy for invocation
192-
final StatelessEJBLocator<Echo> statelessEJBLocator = new StatelessEJBLocator<Echo>(Echo.class, APP_NAME, MODULE_NAME, Echo.class.getSimpleName(), DISTINCT_NAME);
159+
final StatelessEJBLocator<Echo> statelessEJBLocator = new StatelessEJBLocator<Echo>(Echo.class, APP_NAME, MODULE_NAME, StatefulEchoBean.class.getSimpleName(), DISTINCT_NAME);
193160
StatefulEJBLocator<Echo> statefulEJBLocator = null;
194161
statefulEJBLocator = EJBClient.createSession(statelessEJBLocator.withNewAffinity(new ClusterAffinity("ejb")));
195162

196163
Echo proxy = EJBClient.createProxy(statefulEJBLocator);
197164
Assert.assertNotNull("Received a null proxy", proxy);
198165
for (int i = 0; i < 10; i++) {
199-
Assert.assertEquals(NODE2_NAME, proxy.whoAreYou());
166+
Assert.assertEquals(NODE2_NAME, proxy.echo("someMsg").getNode());
200167
}
201168

202169
TestSelector.PICK_NODE = NODE1_NAME;
203170
statefulEJBLocator = EJBClient.createSession(statelessEJBLocator.withNewAffinity(new ClusterAffinity("ejb")));
204171
proxy = EJBClient.createProxy(statefulEJBLocator);
205172

206173
for (int i = 0; i < 10; i++) {
207-
Assert.assertEquals(NODE1_NAME, proxy.whoAreYou());
174+
Assert.assertEquals(NODE1_NAME, proxy.echo("someMsg").getNode());
208175
}
209176
}
210177

@@ -213,32 +180,17 @@ public void testClusteredSFSBInvocation() throws Exception {
213180
*/
214181
@After
215182
public void afterTest() {
216-
servers[0].unregister(APP_NAME, MODULE_NAME, DISTINCT_NAME, Echo.class.getName());
217-
logger.info("Unregistered module from " + serverNames[0]);
218-
219-
servers[1].unregister(APP_NAME, MODULE_NAME, DISTINCT_NAME, Echo.class.getName());
220-
logger.info("Unregistered module from " + serverNames[1]);
183+
undeployStateless(0);
184+
undeployStateful(0);
221185

222-
servers[0].removeCluster(CLUSTER_NAME);
223-
servers[1].removeCluster(CLUSTER_NAME);
186+
undeployStateless(1);
187+
undeployStateful(1);
224188

225-
if (serversStarted[0]) {
226-
try {
227-
this.servers[0].stop();
228-
} catch (Throwable t) {
229-
logger.info("Could not stop server", t);
230-
}
231-
}
232-
logger.info("Stopped server " + serverNames[0]);
189+
removeCluster(0, CLUSTER_NAME);
190+
removeCluster(1, CLUSTER_NAME);
233191

234-
if (serversStarted[1]) {
235-
try {
236-
this.servers[1].stop();
237-
} catch (Throwable t) {
238-
logger.info("Could not stop server", t);
239-
}
240-
}
241-
logger.info("Stopped server " + serverNames[1]);
192+
stopServer(0);
193+
stopServer(1);
242194
}
243195

244196
/**

0 commit comments

Comments
 (0)