Skip to content

Commit a9307c9

Browse files
authored
Check/simplify SocketAcceptorTest and SocketInitiatorTest (#422)
* Unified TestInitiatorApplication and TestAcceptorApplication. - both application classes were effectively the same - use NonStopSession=Y to prevent reset and disconnection at midnight * - wait for sending logout * removed unnecessary code
1 parent 6d2edfe commit a9307c9

File tree

2 files changed

+29
-92
lines changed

2 files changed

+29
-92
lines changed

quickfixj-core/src/test/java/quickfix/SocketAcceptorTest.java

Lines changed: 17 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ public void cleanup() {
7575

7676
@Test
7777
public void testRestartOfAcceptor() throws Exception {
78-
TestAcceptorApplication testAcceptorApplication = new TestAcceptorApplication();
79-
TestInitiatorApplication testInitiatorApplication = new TestInitiatorApplication();
78+
TestConnectorApplication testAcceptorApplication = new TestConnectorApplication();
79+
TestConnectorApplication testInitiatorApplication = new TestConnectorApplication();
8080
ThreadMXBean bean = ManagementFactory.getThreadMXBean();
8181
Acceptor acceptor = null;
8282
Initiator initiator = null;
@@ -109,14 +109,14 @@ public void testRestartOfAcceptor() throws Exception {
109109
log.error(e.getMessage(), e);
110110
}
111111
}
112+
testAcceptorApplication.waitForLogout();
112113
if (acceptor != null) {
113114
try {
114115
acceptor.stop();
115116
} catch (RuntimeException e) {
116117
log.error(e.getMessage(), e);
117118
}
118119
}
119-
testAcceptorApplication.waitForLogout();
120120
testInitiatorApplication.waitForLogout();
121121
}
122122
}
@@ -127,7 +127,7 @@ public void testQuickRestartOfAcceptor() throws Exception {
127127
Acceptor acceptor = null;
128128
try {
129129
ThreadMXBean bean = ManagementFactory.getThreadMXBean();
130-
TestAcceptorApplication testAcceptorApplication = new TestAcceptorApplication();
130+
TestConnectorApplication testAcceptorApplication = new TestConnectorApplication();
131131
acceptor = createAcceptor(testAcceptorApplication);
132132
acceptor.start();
133133
Thread.sleep(2500L);
@@ -148,7 +148,7 @@ public void testDoubleStartOfAcceptor() throws Exception {
148148
Acceptor acceptor = null;
149149
try {
150150
ThreadMXBean bean = ManagementFactory.getThreadMXBean();
151-
TestAcceptorApplication testAcceptorApplication = new TestAcceptorApplication();
151+
TestConnectorApplication testAcceptorApplication = new TestConnectorApplication();
152152
acceptor = createAcceptor(testAcceptorApplication);
153153
acceptor.start();
154154
// second start should be ignored
@@ -166,7 +166,7 @@ public void testDoubleStartOfAcceptor() throws Exception {
166166
public void testSessionsAreCleanedUp() throws Exception {
167167
Acceptor acceptor = null;
168168
try {
169-
TestAcceptorApplication testAcceptorApplication = new TestAcceptorApplication();
169+
TestConnectorApplication testAcceptorApplication = new TestConnectorApplication();
170170
acceptor = createAcceptor(testAcceptorApplication);
171171
acceptor.start();
172172
assertEquals(1, acceptor.getSessions().size() );
@@ -185,7 +185,7 @@ public void testSessionsAreCleanedUp() throws Exception {
185185
public void testSessionsAreCleanedUpOnThreadedSocketAcceptor() throws Exception {
186186
Acceptor acceptor = null;
187187
try {
188-
TestAcceptorApplication testAcceptorApplication = new TestAcceptorApplication();
188+
TestConnectorApplication testAcceptorApplication = new TestConnectorApplication();
189189
acceptor = createAcceptorThreaded(testAcceptorApplication);
190190
acceptor.start();
191191
assertEquals(1, acceptor.getSessions().size() );
@@ -292,12 +292,12 @@ private Session lookupSession(SessionID sessionID) {
292292
return Session.lookupSession(sessionID);
293293
}
294294

295-
private static class TestAcceptorApplication extends ApplicationAdapter {
295+
private class TestConnectorApplication extends ApplicationAdapter {
296296

297297
private final CountDownLatch logonLatch;
298298
private final CountDownLatch logoutLatch;
299299

300-
public TestAcceptorApplication() {
300+
public TestConnectorApplication() {
301301
logonLatch = new CountDownLatch(1);
302302
logoutLatch = new CountDownLatch(1);
303303
}
@@ -334,53 +334,15 @@ public void fromAdmin(Message message, SessionID sessionId) throws FieldNotFound
334334
// ignore
335335
}
336336
}
337-
}
338-
339-
private static class TestInitiatorApplication extends ApplicationAdapter {
340-
341-
private final CountDownLatch logonLatch;
342-
private final CountDownLatch logoutLatch;
343-
344-
public TestInitiatorApplication() {
345-
logonLatch = new CountDownLatch(1);
346-
logoutLatch = new CountDownLatch(1);
347-
}
348-
349-
@Override
350-
public void onLogon(SessionID sessionId) {
351-
super.onLogon(sessionId);
352-
logonLatch.countDown();
353-
}
354-
355-
public void waitForLogon() {
356-
try {
357-
assertTrue("Logon timed out", logonLatch.await(10, TimeUnit.SECONDS));
358-
} catch (InterruptedException e) {
359-
fail(e.getMessage());
360-
}
361-
}
362-
363-
public void waitForLogout() {
364-
try {
365-
assertTrue("Logout timed out", logoutLatch.await(10, TimeUnit.SECONDS));
366-
} catch (InterruptedException e) {
367-
fail(e.getMessage());
368-
}
369-
}
370337

371338
@Override
372-
public void fromAdmin(Message message, SessionID sessionId) throws FieldNotFound, IncorrectDataFormat, IncorrectTagValue, RejectLogon {
373-
try {
374-
if (MsgType.LOGOUT.equals(MessageUtils.getMessageType(message.toString()))) {
375-
logoutLatch.countDown();
376-
}
377-
} catch (InvalidMessage ex) {
378-
// ignore
379-
}
339+
public void toAdmin(Message message, SessionID sessionId) {
340+
log.info("toAdmin: [{}] {}", sessionId, message);
380341
}
381342
}
382343

383-
private Acceptor createAcceptor(TestAcceptorApplication testAcceptorApplication)
344+
345+
private Acceptor createAcceptor(TestConnectorApplication testAcceptorApplication)
384346
throws ConfigError {
385347

386348
SessionSettings settings = createAcceptorSettings();
@@ -391,7 +353,7 @@ private Acceptor createAcceptor(TestAcceptorApplication testAcceptorApplication)
391353
new DefaultMessageFactory());
392354
}
393355

394-
private Acceptor createAcceptorThreaded(TestAcceptorApplication testAcceptorApplication)
356+
private Acceptor createAcceptorThreaded(TestConnectorApplication testAcceptorApplication)
395357
throws ConfigError {
396358

397359
SessionSettings settings = createAcceptorSettings();
@@ -409,13 +371,14 @@ private SessionSettings createAcceptorSettings() {
409371
defaults.put("StartTime", "00:00:00");
410372
defaults.put("EndTime", "00:00:00");
411373
defaults.put("BeginString", "FIX.4.2");
374+
defaults.put("NonStopSession", "Y");
412375
settings.setString(acceptorSessionID, "SocketAcceptProtocol", ProtocolFactory.getTypeString(ProtocolFactory.VM_PIPE));
413376
settings.setString(acceptorSessionID, "SocketAcceptPort", "10000");
414377
settings.set(defaults);
415378
return settings;
416379
}
417380

418-
private Initiator createInitiator(TestInitiatorApplication testInitiatorApplication) throws ConfigError {
381+
private Initiator createInitiator(TestConnectorApplication testInitiatorApplication) throws ConfigError {
419382
SessionSettings settings = new SessionSettings();
420383
HashMap<Object, Object> defaults = new HashMap<>();
421384
defaults.put("ConnectionType", "initiator");
@@ -425,6 +388,7 @@ private Initiator createInitiator(TestInitiatorApplication testInitiatorApplicat
425388
defaults.put("ReconnectInterval", "2");
426389
defaults.put("FileStorePath", "target/data/client");
427390
defaults.put("ValidateUserDefinedFields", "Y");
391+
defaults.put("NonStopSession", "Y");
428392
settings.setString("BeginString", FixVersions.BEGINSTRING_FIX42);
429393
settings.setString(initiatorSessionID, "SocketConnectProtocol", ProtocolFactory.getTypeString(ProtocolFactory.VM_PIPE));
430394
settings.setString(initiatorSessionID, "SocketConnectHost", "127.0.0.1");

quickfixj-core/src/test/java/quickfix/SocketInitiatorTest.java

Lines changed: 12 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,7 @@ public void testConnectedSocketsAreClosedAfterInitiatorClosed() throws Exception
306306
socketThread.start();
307307

308308
final SessionSettings settings = new SessionSettings();
309+
settings.setString("NonStopSession", "Y");
309310
settings.setString("StartTime", "00:00:00");
310311
settings.setString("EndTime", "00:00:00");
311312
settings.setString("ReconnectInterval", "30");
@@ -351,42 +352,6 @@ public void onConnect(SessionID sessionID) {
351352
public void onDisconnect(SessionID sessionID) {
352353
onDisconnectCallCount.incrementAndGet();
353354
}
354-
355-
@Override
356-
public void onLogon(SessionID sessionID) {
357-
}
358-
359-
@Override
360-
public void onLogout(SessionID sessionID) {
361-
}
362-
363-
@Override
364-
public void onReset(SessionID sessionID) {
365-
}
366-
367-
@Override
368-
public void onRefresh(SessionID sessionID) {
369-
}
370-
371-
@Override
372-
public void onMissedHeartBeat(SessionID sessionID) {
373-
}
374-
375-
@Override
376-
public void onHeartBeatTimeout(SessionID sessionID) {
377-
}
378-
379-
@Override
380-
public void onResendRequestSent(SessionID sessionID, int beginSeqNo, int endSeqNo, int currentEndSeqNo) {
381-
}
382-
383-
@Override
384-
public void onSequenceResetReceived(SessionID sessionID, int newSeqNo, boolean gapFillFlag) {
385-
}
386-
387-
@Override
388-
public void onResendRequestSatisfied(SessionID sessionID, int beginSeqNo, int endSeqNo) {
389-
}
390355
};
391356

392357
LogFactory logFactory = sessionID -> logSessionStateListener;
@@ -420,6 +385,7 @@ public void testInitiatorContinueInitializationOnError() throws ConfigError, Int
420385
settings.setString("ConnectionType", "initiator");
421386
settings.setLong(sessionId, "SocketConnectPort", port);
422387
settings.setString(sessionId, "SocketConnectHost", "localhost");
388+
settings.setString("NonStopSession", "Y");
423389
settings.setString("StartTime", "00:00:00");
424390
settings.setString("EndTime", "00:00:00");
425391
settings.setString("HeartBtInt", "30");
@@ -446,13 +412,14 @@ private void doTestOfRestart(SessionID clientSessionID, ClientApplication client
446412
serverThread.start();
447413
serverThread.waitForInitialization();
448414
long messageLogLength = 0;
415+
Session clientSession = null;
449416
try {
450417
clientApplication.setUpLogonExpectation();
451418
initiator.start();
452419
assertTrue(initiator.getSessions().contains(clientSessionID));
453420
assertEquals(1, initiator.getSessions().size());
454421

455-
Session clientSession = Session.lookupSession(clientSessionID);
422+
clientSession = Session.lookupSession(clientSessionID);
456423
assertLoggedOn(clientApplication, clientSession);
457424

458425
clientApplication.setUpLogoutExpectation();
@@ -478,8 +445,13 @@ private void doTestOfRestart(SessionID clientSessionID, ClientApplication client
478445
// QFJ-698: check that we were still able to write to the messageLog after the restart
479446
assertTrue(messageLog.length() > messageLogLength);
480447
}
448+
449+
clientApplication.setUpLogoutExpectation();
481450
} finally {
482451
initiator.stop();
452+
if (clientSession != null) {
453+
assertLoggedOut(clientApplication, clientSession);
454+
}
483455
}
484456
} finally {
485457
serverThread.interrupt();
@@ -527,6 +499,7 @@ private SessionSettings getClientSessionSettings(SessionID clientSessionID, int
527499
defaults.put("SocketConnectProtocol", ProtocolFactory.getTypeString(ProtocolFactory.VM_PIPE));
528500
defaults.put("SocketConnectHost", "localhost");
529501
defaults.put("SocketConnectPort", Integer.toString(port));
502+
defaults.put("NonStopSession", "Y");
530503
defaults.put("StartTime", "00:00:00");
531504
defaults.put("EndTime", "00:00:00");
532505
defaults.put("HeartBtInt", "30");
@@ -611,11 +584,11 @@ public void onLogon(SessionID sessionId) {
611584

612585
@Override
613586
public void toAdmin(Message message, SessionID sessionId) {
614-
log.info("[{}] {}", sessionId, message);
587+
log.info("toAdmin: [{}] {}", sessionId, message);
615588

616589
// Only countdown the latch if a logout message is actually sent
617590
try {
618-
if (logoutLatch != null && message.getHeader().isSetField(MsgType.FIELD)
591+
if (logoutLatch != null && logoutLatch.getCount() > 0 && message.getHeader().isSetField(MsgType.FIELD)
619592
&& MsgType.LOGOUT.equals(message.getHeader().getString(MsgType.FIELD))) {
620593
log.info("Releasing logout latch for session [{}] with message {}", sessionId, message);
621594
logoutLatch.countDown();

0 commit comments

Comments
 (0)