fix-over-tcp
Version:
Custom TCP FIX protocol(beta
257 lines (245 loc) • 10.8 kB
JavaScript
import FIXParser from './../src/FIXParser';
import Field from './../src/fields/Field';
import {
BeginString,
BodyLength,
CheckSum,
MsgType,
MsgSeqNum,
SenderCompID,
SendingTime,
TargetCompID,
RawDataLength,
RawData,
EncryptMethod,
HeartBtInt,
TestReqID
} from './../src/constants/ConstantsField';
import { TestRequest } from './../src/constants/ConstantsMessage';
describe('FIXEncoder', () => {
const fixParser = new FIXParser();
describe('#encode: tag ordering', () => {
const fixString =
'8=FIX.5.0SP2|9=34|35=1|49=ABC|56=XYZ|34=1|112=reqId|10=106|';
it('should have encoded the FIX message in correct order 1', () => {
const message = fixParser.createMessage(
new Field(MsgType, TestRequest),
new Field(SenderCompID, 'ABC'),
new Field(TargetCompID, 'XYZ'),
new Field(MsgSeqNum, fixParser.getNextTargetMsgSeqNum()),
new Field(TestReqID, 'reqId')
);
expect(message.encode().replace(/\x01/g, '|')).toEqual(fixString);
});
it('should have encoded the FIX message in correct order 2', () => {
const message = fixParser.createMessage(
new Field(SenderCompID, 'ABC'),
new Field(TargetCompID, 'XYZ'),
new Field(MsgSeqNum, fixParser.getNextTargetMsgSeqNum()),
new Field(TestReqID, 'reqId'),
new Field(MsgType, TestRequest)
);
expect(message.encode().replace(/\x01/g, '|')).toEqual(fixString);
});
});
describe('#encode: Heartbeat', () => {
const fixString =
'8=FIX.5.0SP2|9=51|35=0|34=703|49=ABC|52=20100130-10:53:40.830|56=XYZ|10=205|';
it('should have encoded the FIX message', () => {
const message = fixParser.createMessage(
new Field(MsgType, 0),
new Field(MsgSeqNum, fixParser.setNextTargetMsgSeqNum(703)),
new Field(SenderCompID, 'ABC'),
new Field(
SendingTime,
fixParser.getTimestamp(
new Date(Date.UTC(2010, 0, 30, 10, 53, 40, 830))
)
),
new Field(TargetCompID, 'XYZ')
);
expect(message.encode().replace(/\x01/g, '|')).toEqual(fixString);
});
});
describe('#encode: Logon', () => {
const fixString =
'8=FIX.5.0SP2|9=76|35=A|34=702|49=ABC|52=20100130-10:52:40.663|56=XYZ|95=4|96=1234|98=0|108=60|10=090|';
it('should have encoded the FIX message', () => {
const message = fixParser.createMessage(
new Field(MsgType, 'A'),
new Field(MsgSeqNum, fixParser.setNextTargetMsgSeqNum(702)),
new Field(SenderCompID, 'ABC'),
new Field(
SendingTime,
fixParser.getTimestamp(
new Date(Date.UTC(2010, 0, 30, 10, 52, 40, 663))
)
),
new Field(TargetCompID, 'XYZ'),
new Field(RawDataLength, 4),
new Field(RawData, 1234),
new Field(EncryptMethod, 0),
new Field(HeartBtInt, 60)
);
expect(message.encode().replace(/\x01/g, '|')).toEqual(fixString);
});
});
describe('#encode: Custom header/trailer', () => {
let fixString = null;
it('should have encoded the FIX message with custom FIX version', () => {
fixString =
'8=FIX.4.3|9=76|35=A|34=702|49=ABC|52=20100130-10:52:40.663|56=XYZ|95=4|96=1234|98=0|108=60|10=135|';
const message = fixParser.createMessage(
new Field(BeginString, 'FIX.4.3'),
new Field(MsgType, 'A'),
new Field(MsgSeqNum, fixParser.setNextTargetMsgSeqNum(702)),
new Field(SenderCompID, 'ABC'),
new Field(
SendingTime,
fixParser.getTimestamp(
new Date(Date.UTC(2010, 0, 30, 10, 52, 40, 663))
)
),
new Field(TargetCompID, 'XYZ'),
new Field(RawDataLength, 4),
new Field(RawData, 1234),
new Field(EncryptMethod, 0),
new Field(HeartBtInt, 60)
);
expect(message.encode().replace(/\x01/g, '|')).toEqual(fixString);
});
it('should have encoded the FIX message with custom BodyLength', () => {
fixString =
'8=FIX.5.0SP2|9=123456|35=A|34=702|49=ABC|52=20100130-10:52:40.663|56=XYZ|95=4|96=1234|98=0|108=60|10=034|';
const message = fixParser.createMessage(
new Field(MsgType, 'A'),
new Field(MsgSeqNum, fixParser.setNextTargetMsgSeqNum(702)),
new Field(SenderCompID, 'ABC'),
new Field(
SendingTime,
fixParser.getTimestamp(
new Date(Date.UTC(2010, 0, 30, 10, 52, 40, 663))
)
),
new Field(BodyLength, 123456),
new Field(TargetCompID, 'XYZ'),
new Field(RawDataLength, 4),
new Field(RawData, 1234),
new Field(EncryptMethod, 0),
new Field(HeartBtInt, 60)
);
expect(message.encode().replace(/\x01/g, '|')).toEqual(fixString);
});
it('should have encoded the FIX message with custom CheckSum', () => {
fixString =
'8=FIX.5.0SP2|9=76|35=A|34=702|49=ABC|52=20100130-10:52:40.663|56=XYZ|95=4|96=1234|98=0|108=60|10=999|';
const message = fixParser.createMessage(
new Field(CheckSum, 999),
new Field(MsgType, 'A'),
new Field(MsgSeqNum, fixParser.setNextTargetMsgSeqNum(702)),
new Field(SenderCompID, 'ABC'),
new Field(
SendingTime,
fixParser.getTimestamp(
new Date(Date.UTC(2010, 0, 30, 10, 52, 40, 663))
)
),
new Field(TargetCompID, 'XYZ'),
new Field(RawDataLength, 4),
new Field(RawData, 1234),
new Field(EncryptMethod, 0),
new Field(HeartBtInt, 60)
);
expect(message.encode().replace(/\x01/g, '|')).toEqual(fixString);
});
});
describe('#encode: Multiple encode', () => {
let fixString =
'8=FIX.4.3|9=76|35=A|34=702|49=ABC|52=20100130-10:52:40.663|56=XYZ|95=4|96=1234|98=0|108=60|10=135|';
it('should have encoded the FIX message', () => {
const message = fixParser.createMessage(
new Field(BeginString, 'FIX.4.3'),
new Field(MsgType, 'A'),
new Field(MsgSeqNum, fixParser.setNextTargetMsgSeqNum(702)),
new Field(SenderCompID, 'ABC'),
new Field(
SendingTime,
fixParser.getTimestamp(
new Date(Date.UTC(2010, 0, 30, 10, 52, 40, 663))
)
),
new Field(TargetCompID, 'XYZ'),
new Field(RawDataLength, 4),
new Field(RawData, 1234),
new Field(EncryptMethod, 0),
new Field(HeartBtInt, 60)
);
const encodedMessage0 = message.encode().replace(/\x01/g, '|');
const encodedMessage1 = message.encode();
const encodedMessage2 = message.encode();
expect(encodedMessage0).toEqual(fixString);
expect(encodedMessage1).toEqual(encodedMessage2);
});
it('should have encoded the FIX message', () => {
fixString =
'8=FIX.5.0SP2|9=76|35=A|34=702|49=ABC|52=20100130-10:52:40.663|56=XYZ|95=4|96=1234|98=0|108=60|10=090|';
const message = fixParser.createMessage(
new Field(MsgType, 'A'),
new Field(MsgSeqNum, fixParser.setNextTargetMsgSeqNum(702)),
new Field(SenderCompID, 'ABC'),
new Field(
SendingTime,
fixParser.getTimestamp(
new Date(Date.UTC(2010, 0, 30, 10, 52, 40, 663))
)
),
new Field(TargetCompID, 'XYZ'),
new Field(RawDataLength, 4),
new Field(RawData, 1234),
new Field(EncryptMethod, 0),
new Field(HeartBtInt, 60)
);
expect(message.encode().replace(/\x01/g, '|')).toEqual(fixString);
expect(
fixParser
.parse(message.encode())[0]
.string.replace(/\x01/g, '|')
).toEqual(fixString);
message.encode('-');
expect(message.encode().replace(/\x01/g, '|')).toEqual(fixString);
expect(message.encode().replace(/\x01/g, '|')).toEqual(fixString);
expect(message.encode().replace(/\x01/g, '|')).toEqual(fixString);
expect(message.encode().replace(/\x01/g, '|')).toEqual(fixString);
expect(message.encode().replace(/\x01/g, '|')).toEqual(fixString);
expect(message.encode().replace(/\x01/g, '|')).toEqual(fixString);
expect(
fixParser
.parse(message.encode())[0]
.string.replace(/\x01/g, '|')
).toEqual(fixString);
message.encode('/');
expect(message.encode().replace(/\x01/g, '|')).toEqual(fixString);
expect(
fixParser
.parse(message.encode())[0]
.string.replace(/\x01/g, '|')
).toEqual(fixString);
message.encode('_');
expect(message.encode().replace(/\x01/g, '|')).toEqual(fixString);
expect(
fixParser
.parse(message.encode())[0]
.string.replace(/\x01/g, '|')
).toEqual(fixString);
message.encode('*');
expect(message.encode().replace(/\x01/g, '|')).toEqual(fixString);
expect(
fixParser
.parse(message.encode())[0]
.string.replace(/\x01/g, '|')
).toEqual(fixString);
message.encode('$');
expect(message.encode().replace(/\x01/g, '|')).toEqual(fixString);
});
});
});