Skip to content

Commit

Permalink
Bring in custom acceptance tests for the resend request chunk size, i…
Browse files Browse the repository at this point in the history
…n order to avoid copying a quickfix bug where the newseqno field of a gapfill message was being treated incorrectly.
  • Loading branch information
RichardWarburton committed Feb 4, 2021
1 parent 5029a1a commit 616249a
Show file tree
Hide file tree
Showing 10 changed files with 251 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,11 @@
@RunWith(Parameterized.class)
public class Fix42ResendRequestChunkSizeAcceptanceTest extends AbstractFixSpecAcceptanceTest
{
private static final String QUICKFIX_4_2_ROOT_PATH = QUICKFIX_RESEND_REQUEST_CHUNK_SIZE_DEFINITIONS + "/fix42";

@Parameterized.Parameters(name = "Acceptance: {1}")
public static Collection<Object[]> data()
{
return testsFor(
QUICKFIX_4_2_ROOT_PATH,
CUSTOM_ROOT_PATH + "/fix42",
QUICKFIX_RESEND_CHUNK_INCLUDE_LIST,
() -> Environment.fix42(new NewOrderSingleClonerImpl(), RESEND_REQUEST_CHUNK_SIZE));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# If message sequence number is too high, send a resend request for
# missing messages

iCONNECT
I8=FIX.4.235=A34=149=TW52=<TIME>56=ISLD98=0108=30
E8=FIX.4.29=5735=A34=149=ISLD52=00000000-00:00:0056=TW98=0108=3010=0

I8=FIX.4.235=D34=249=TW52=<TIME>56=ISLD11=ID21=338=10040=154=155=INTC60=<TIME>
E8=FIX.4.29=8135=D34=249=ISLD52=00000000-00:00:0056=TW11=ID21=338=10040=154=155=INTC10=0

I8=FIX.4.235=D34=349=TW52=<TIME>56=ISLD11=ID21=338=10040=154=155=INTC60=<TIME>
E8=FIX.4.29=8135=D34=349=ISLD52=00000000-00:00:0056=TW11=ID21=338=10040=154=155=INTC10=0

# Sending message 10 when last message sent was 3
I8=FIX.4.235=034=1049=TW52=<TIME>56=ISLD

# Receive Resend request for messages 4 to (4+5-1 = 8)
E8=FIX.4.29=5435=234=449=ISLD52=00000000-00:00:0056=TW7=416=810=0
I8=FIX.4.235=D34=449=TW52=<TIME>56=ISLD97=Y11=ID21=338=10040=154=155=INTC60=<TIME>
I8=FIX.4.235=D34=549=TW52=<TIME>56=ISLD97=Y11=ID21=338=10040=154=155=INTC60=<TIME>
I8=FIX.4.235=D34=649=TW52=<TIME>56=ISLD97=Y11=ID21=338=10040=154=155=INTC60=<TIME>
I8=FIX.4.235=D34=749=TW52=<TIME>56=ISLD97=Y11=ID21=338=10040=154=155=INTC60=<TIME>
I8=FIX.4.235=D34=849=TW52=<TIME>56=ISLD97=Y11=ID21=338=10040=154=155=INTC60=<TIME>

# Receive Resend request for messages 9 to infinity
E8=FIX.4.29=5535=234=549=ISLD52=00000000-00:00:0056=TW7=916=010=0
I8=FIX.4.235=D34=949=TW52=<TIME>56=ISLD97=Y11=ID21=338=10040=154=155=INTC60=<TIME>

#Sent test request to validate no seq num issue
I8=FIX.4.235=134=1149=TW52=<TIME>56=ISLD112=TEST
E8=FIX.4.29=5435=034=649=ISLD52=00000000-00:00:0056=TW112=TEST10=0

# logout message and response
I8=FIX.4.235=534=1249=TW52=<TIME>56=ISLD
E8=FIX.4.29=4535=534=749=ISLD52=00000000-00:00:0056=TW10=0

eDISCONNECT
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# If message sequence number is too high, send a resend request for
# missing messages

# Modified from quickfix because the newSeqNo field on a gap fill should refer to the sequence number of the next message

iCONNECT
I8=FIX.4.235=A34=149=TW52=<TIME>56=ISLD98=0108=30
E8=FIX.4.29=5735=A34=149=ISLD52=00000000-00:00:0056=TW98=0108=3010=0

I8=FIX.4.235=D34=249=TW52=<TIME>56=ISLD11=ID21=338=10040=154=155=INTC60=<TIME>
E8=FIX.4.29=8135=D34=249=ISLD52=00000000-00:00:0056=TW11=ID21=338=10040=154=155=INTC10=0

I8=FIX.4.235=D34=349=TW52=<TIME>56=ISLD11=ID21=338=10040=154=155=INTC60=<TIME>
E8=FIX.4.29=8135=D34=349=ISLD52=00000000-00:00:0056=TW11=ID21=338=10040=154=155=INTC10=0

# Sending message 15 when last message sent was 3
I8=FIX.4.235=034=1549=TW52=<TIME>56=ISLD

# Receive Resend request for messages 4 to (4+5-1 = 8)
E8=FIX.4.29=5435=234=449=ISLD52=00000000-00:00:0056=TW7=416=810=0
# Send a GapFill up to the last message 8
I8=FIX.4.235=434=449=TW52=<TIME>56=ISLD123=Y36=9

# Receive Resend request for messages 8 to (8+5-1 = 12)
E8=FIX.4.29=5535=234=549=ISLD52=00000000-00:00:0056=TW7=916=1310=0
# Send a GapFill up to the last message 12
I8=FIX.4.235=434=949=TW52=<TIME>56=ISLD123=Y36=14

# Receive Resend request for messages 12 to 15)
E8=FIX.4.29=6035=234=649=ISLD52=00000000-00:00:0056=TW7=1416=010=0
# Send a GapFill up to the last message 15
I8=FIX.4.235=434=1449=TW52=<TIME>56=ISLD123=Y36=16

#Sent test request to validate no seq num issue
I8=FIX.4.235=134=1649=TW52=<TIME>56=ISLD112=TEST
E8=FIX.4.29=5435=034=749=ISLD52=00000000-00:00:0056=TW112=TEST10=0


# logout message and response
I8=FIX.4.235=534=1749=TW52=<TIME>56=ISLD
E8=FIX.4.29=4535=534=849=ISLD52=00000000-00:00:0056=TW10=0

eDISCONNECT
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,11 @@
@RunWith(Parameterized.class)
public class Fix44ResendRequestChunkSizeAcceptanceTest extends AbstractFixSpecAcceptanceTest
{
private static final String QUICKFIX_4_4_ROOT_PATH = QUICKFIX_RESEND_REQUEST_CHUNK_SIZE_DEFINITIONS + "/fix44";

@Parameterized.Parameters(name = "Acceptance: {1}")
public static Collection<Object[]> data()
{
return testsFor(
QUICKFIX_4_4_ROOT_PATH,
CUSTOM_ROOT_PATH + "/fix44",
QUICKFIX_RESEND_CHUNK_INCLUDE_LIST,
() -> Environment.fix44(new NewOrderSingleClonerImpl(), RESEND_REQUEST_CHUNK_SIZE));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# If message sequence number is too high, send a resend request for
# missing messages

iCONNECT
I8=FIX.4.435=A34=149=TW52=<TIME>56=ISLD98=0108=30
E8=FIX.4.49=5735=A34=149=ISLD52=00000000-00:00:0056=TW98=0108=3010=0

I8=FIX.4.435=D34=249=TW52=<TIME>56=ISLD11=ID21=338=10040=154=155=INTC60=<TIME>
E8=FIX.4.49=8135=D34=249=ISLD52=00000000-00:00:0056=TW11=ID21=338=10040=154=155=INTC10=0

I8=FIX.4.435=D34=349=TW52=<TIME>56=ISLD11=ID21=338=10040=154=155=INTC60=<TIME>
E8=FIX.4.49=8135=D34=349=ISLD52=00000000-00:00:0056=TW11=ID21=338=10040=154=155=INTC10=0

# Sending message 10 when last message sent was 3
I8=FIX.4.435=034=1049=TW52=<TIME>56=ISLD

# Receive Resend request for messages 4 to (4+5-1 = 8)
E8=FIX.4.49=5435=234=449=ISLD52=00000000-00:00:0056=TW7=416=810=0
I8=FIX.4.435=D34=449=TW52=<TIME>56=ISLD97=Y11=ID21=338=10040=154=155=INTC60=<TIME>
I8=FIX.4.435=D34=549=TW52=<TIME>56=ISLD97=Y11=ID21=338=10040=154=155=INTC60=<TIME>
I8=FIX.4.435=D34=649=TW52=<TIME>56=ISLD97=Y11=ID21=338=10040=154=155=INTC60=<TIME>
I8=FIX.4.435=D34=749=TW52=<TIME>56=ISLD97=Y11=ID21=338=10040=154=155=INTC60=<TIME>
I8=FIX.4.435=D34=849=TW52=<TIME>56=ISLD97=Y11=ID21=338=10040=154=155=INTC60=<TIME>

# Receive Resend request for messages 9 to infinity
E8=FIX.4.49=5535=234=549=ISLD52=00000000-00:00:0056=TW7=916=010=0
I8=FIX.4.435=D34=949=TW52=<TIME>56=ISLD97=Y11=ID21=338=10040=154=155=INTC60=<TIME>

#Sent test request to validate no seq num issue
I8=FIX.4.435=134=1149=TW52=<TIME>56=ISLD112=TEST
E8=FIX.4.49=5435=034=649=ISLD52=00000000-00:00:0056=TW112=TEST10=0

# logout message and response
I8=FIX.4.435=534=1249=TW52=<TIME>56=ISLD
E8=FIX.4.49=4535=534=749=ISLD52=00000000-00:00:0056=TW10=0

eDISCONNECT
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# If message sequence number is too high, send a resend request for
# missing messages

# Modified from quickfix because the newSeqNo field on a gap fill should refer to the sequence number of the next message

iCONNECT
I8=FIX.4.435=A34=149=TW52=<TIME>56=ISLD98=0108=30
E8=FIX.4.49=5735=A34=149=ISLD52=00000000-00:00:0056=TW98=0108=3010=0

I8=FIX.4.435=D34=249=TW52=<TIME>56=ISLD11=ID21=338=10040=154=155=INTC60=<TIME>
E8=FIX.4.49=8135=D34=249=ISLD52=00000000-00:00:0056=TW11=ID21=338=10040=154=155=INTC10=0

I8=FIX.4.435=D34=349=TW52=<TIME>56=ISLD11=ID21=338=10040=154=155=INTC60=<TIME>
E8=FIX.4.49=8135=D34=349=ISLD52=00000000-00:00:0056=TW11=ID21=338=10040=154=155=INTC10=0

# Sending message 15 when last message sent was 3
I8=FIX.4.435=034=1549=TW52=<TIME>56=ISLD

# Receive Resend request for messages 4 to (4+5-1 = 8)
E8=FIX.4.49=5435=234=449=ISLD52=00000000-00:00:0056=TW7=416=810=0
# Send a GapFill up to the last message 8
I8=FIX.4.435=434=449=TW52=<TIME>56=ISLD123=Y36=9

# Receive Resend request for messages 8 to (8+5-1 = 12)
E8=FIX.4.49=5535=234=549=ISLD52=00000000-00:00:0056=TW7=916=1310=0
# Send a GapFill up to the last message 12
I8=FIX.4.435=434=949=TW52=<TIME>56=ISLD123=Y36=14

# Receive Resend request for messages 12 to 15)
E8=FIX.4.49=6035=234=649=ISLD52=00000000-00:00:0056=TW7=1416=010=0
# Send a GapFill up to the last message 15
I8=FIX.4.435=434=1449=TW52=<TIME>56=ISLD123=Y36=16

#Sent test request to validate no seq num issue
I8=FIX.4.435=134=1649=TW52=<TIME>56=ISLD112=TEST
E8=FIX.4.49=5435=034=749=ISLD52=00000000-00:00:0056=TW112=TEST10=0


# logout message and response
I8=FIX.4.435=534=1749=TW52=<TIME>56=ISLD
E8=FIX.4.49=4535=534=849=ISLD52=00000000-00:00:0056=TW10=0

eDISCONNECT
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,12 @@
@RunWith(Parameterized.class)
public class Fix50ResendRequestChunkSizeAcceptanceTest extends AbstractFixSpecAcceptanceTest
{
private static final String QUICKFIX_5_0_ROOT_PATH = QUICKFIX_RESEND_REQUEST_CHUNK_SIZE_DEFINITIONS + "/fix50";

@Parameterized.Parameters(name = "Acceptance: {1}")
public static Collection<Object[]> data()
{
return testsFor(
QUICKFIX_5_0_ROOT_PATH, QUICKFIX_RESEND_CHUNK_INCLUDE_LIST,
CUSTOM_ROOT_PATH + "/fix50",
QUICKFIX_RESEND_CHUNK_INCLUDE_LIST,
() -> Environment.fix50(
new Fix50SessionCustomizationStrategy(),
new NewOrderSingleClonerImpl(),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# If message sequence number is too high, send a resend request for
# missing messages

iCONNECT
I8=FIXT.1.135=A34=149=TW52=<TIME>56=ISLD98=0108=301137=7
E8=FIXT.1.19=6435=A34=149=ISLD52=00000000-00:00:0056=TW98=0108=301137=710=0

I8=FIXT.1.135=D34=249=TW52=<TIME>56=ISLD11=ID21=338=10040=154=155=INTC60=<TIME>
E8=FIXT.1.19=8135=D34=249=ISLD52=00000000-00:00:0056=TW11=ID21=338=10040=154=155=INTC10=0

I8=FIXT.1.135=D34=349=TW52=<TIME>56=ISLD11=ID21=338=10040=154=155=INTC60=<TIME>
E8=FIXT.1.19=8135=D34=349=ISLD52=00000000-00:00:0056=TW11=ID21=338=10040=154=155=INTC10=0

# Sending message 10 when last message sent was 3
I8=FIXT.1.135=034=1049=TW52=<TIME>56=ISLD

# Receive Resend request for messages 4 to (4+5-1 = 8)
E8=FIXT.1.19=5435=234=449=ISLD52=00000000-00:00:0056=TW7=416=810=0
I8=FIXT.1.135=D34=449=TW52=<TIME>56=ISLD97=Y11=ID21=338=10040=154=155=INTC60=<TIME>
I8=FIXT.1.135=D34=549=TW52=<TIME>56=ISLD97=Y11=ID21=338=10040=154=155=INTC60=<TIME>
I8=FIXT.1.135=D34=649=TW52=<TIME>56=ISLD97=Y11=ID21=338=10040=154=155=INTC60=<TIME>
I8=FIXT.1.135=D34=749=TW52=<TIME>56=ISLD97=Y11=ID21=338=10040=154=155=INTC60=<TIME>
I8=FIXT.1.135=D34=849=TW52=<TIME>56=ISLD97=Y11=ID21=338=10040=154=155=INTC60=<TIME>

# Receive Resend request for messages 9 to infinity
E8=FIXT.1.19=5535=234=549=ISLD52=00000000-00:00:0056=TW7=916=010=0
I8=FIXT.1.135=D34=949=TW52=<TIME>56=ISLD97=Y11=ID21=338=10040=154=155=INTC60=<TIME>

#Sent test request to validate no seq num issue
I8=FIXT.1.135=134=1149=TW52=<TIME>56=ISLD112=TEST
E8=FIXT.1.19=5435=034=649=ISLD52=00000000-00:00:0056=TW112=TEST10=0

# logout message and response
I8=FIXT.1.135=534=1249=TW52=<TIME>56=ISLD
E8=FIXT.1.19=4535=534=749=ISLD52=00000000-00:00:0056=TW10=0

eDISCONNECT
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# If message sequence number is too high, send a resend request for
# missing messages

# Modified from quickfix because the newSeqNo field on a gap fill should refer to the sequence number of the next message

iCONNECT
I8=FIXT.1.135=A34=149=TW52=<TIME>56=ISLD98=0108=21137=7
E8=FIXT.1.19=5735=A34=149=ISLD52=00000000-00:00:0056=TW98=0108=21137=710=0

I8=FIXT.1.135=D34=249=TW52=<TIME>56=ISLD11=ID21=338=10040=154=155=INTC60=<TIME>
E8=FIXT.1.19=8135=D34=249=ISLD52=00000000-00:00:0056=TW11=ID21=338=10040=154=155=INTC10=0

I8=FIXT.1.135=D34=349=TW52=<TIME>56=ISLD11=ID21=338=10040=154=155=INTC60=<TIME>
E8=FIXT.1.19=8135=D34=349=ISLD52=00000000-00:00:0056=TW11=ID21=338=10040=154=155=INTC10=0

# Sending message 15 when last message sent was 3
I8=FIXT.1.135=034=1549=TW52=<TIME>56=ISLD

# Receive Resend request for messages 4 to (4+5-1 = 8)
E8=FIXT.1.19=5435=234=449=ISLD52=00000000-00:00:0056=TW7=416=810=0
# Send a GapFill up to the last message 8
I8=FIXT.1.135=434=449=TW52=<TIME>56=ISLD123=Y36=9

# Receive Resend request for messages 8 to (8+5-1 = 12)
E8=FIXT.1.19=5535=234=549=ISLD52=00000000-00:00:0056=TW7=916=1310=0
# Send a GapFill up to the last message 12
I8=FIXT.1.135=434=949=TW52=<TIME>56=ISLD123=Y36=14

# Receive Resend request for messages 12 to 15)
E8=FIXT.1.19=6035=234=649=ISLD52=00000000-00:00:0056=TW7=1416=010=0
# Send a GapFill up to the last message 15
I8=FIXT.1.135=434=1449=TW52=<TIME>56=ISLD123=Y36=16

#Sent test request to validate no seq num issue
I8=FIXT.1.135=134=1649=TW52=<TIME>56=ISLD112=TEST
E8=FIXT.1.19=5435=034=749=ISLD52=00000000-00:00:0056=TW112=TEST10=0


# logout message and response
I8=FIXT.1.135=534=1749=TW52=<TIME>56=ISLD
E8=FIXT.1.19=4535=534=849=ISLD52=00000000-00:00:0056=TW10=0

eDISCONNECT
Original file line number Diff line number Diff line change
Expand Up @@ -49,18 +49,23 @@ public abstract class AbstractFixSpecAcceptanceTest
@Rule
public Timeout timeout = Timeout.millis(Long.getLong(FIX_TEST_TIMEOUT_PROP, FIX_TEST_TIMEOUT_DEFAULT));

protected static List<Object[]> testsFor(
protected static List<Object[]> testsFor(
final String rootDirPath, final List<String> files, final Supplier<Environment> environment)
{
final String rootDir = getCorrectDirectory(rootDirPath);

return files
.stream()
.map((file) -> Paths.get(rootDir, file))
.map((path) -> new Object[]{ path, path.getFileName(), environment })
.map((path) -> testFor(path, environment))
.collect(toList());
}

protected static Object[] testFor(final Path path, final Supplier<Environment> environment)
{
return new Object[]{path, path.getFileName(), environment};
}

private static String getCorrectDirectory(final String rootDirPath)
{
final File rootDirFile = new File(rootDirPath);
Expand Down

0 comments on commit 616249a

Please sign in to comment.