[Test] // Issue #282
        public void ValidateTagSpecifiedWithoutAValue()
        {
            QuickFix.DataDictionary.DataDictionary dd = new QuickFix.DataDictionary.DataDictionary();
            dd.LoadFIXSpec("FIX42");
            QuickFix.FIX42.MessageFactory f = new QuickFix.FIX42.MessageFactory();

            string[] msgFields = { "8=FIX.4.2", "9=70", "35=B", "34=3", "49=sender", "52=20110909-09:09:09.999", "56=target",
                                   "358=",      "148=", "33=0", "10=150" };
            string   msgStr = String.Join(Message.SOH, msgFields) + Message.SOH;

            string msgType     = "B";
            string beginString = "FIX.4.2";

            Message message = f.Create(beginString, msgType);

            message.FromString(msgStr, true, dd, dd);

            dd.CheckFieldsHaveValues = true;
            Assert.Throws <QuickFix.NoTagValue>(delegate { dd.Validate(message, beginString, msgType); });

            dd.CheckFieldsHaveValues = false;
            Assert.DoesNotThrow(delegate { dd.Validate(message, beginString, msgType); });
        }
        public void CheckGroupCountTest()
        {
            QuickFix.DataDictionary.DataDictionary dd = new QuickFix.DataDictionary.DataDictionary();
            dd.LoadFIXSpec("FIX42");

            QuickFix.FIX42.NewOrderSingle n = new QuickFix.FIX42.NewOrderSingle();

            string nul = Message.SOH;
            string s   = "8=FIX.4.2" + nul + "9=148" + nul + "35=D" + nul + "34=2" + nul + "49=TW" + nul + "52=20111011-15:06:23.103" + nul + "56=ISLD" + nul
                         + "11=ID" + nul + "21=1" + nul + "40=1" + nul + "54=1" + nul + "38=200.00" + nul + "55=INTC" + nul
                         + "386=3" + nul + "336=PRE-OPEN" + nul + "336=AFTER-HOURS" + nul
                         + "60=20111011-15:06:23.103" + nul
                         + "10=35" + nul;

            n.FromString(s, true, dd, dd, _defaultMsgFactory);

            //verify that FromString didn't correct the counter
            //HEY YOU, READ THIS NOW: if these fail, first check if MessageTests::FromString_DoNotCorrectCounter() passes
            Assert.AreEqual("386=3", n.NoTradingSessions.toStringField());
            StringAssert.Contains("386=3", n.ToString());

            Assert.Throws <QuickFix.RepeatingGroupCountMismatch>(delegate { dd.CheckGroupCount(n.NoTradingSessions, n, "D"); });
        }
Example #3
0
        public void DateOnlyTimeOnlyConvertProblem()
        {
            // issue 135

            var dd = new QuickFix.DataDictionary.DataDictionary();

            dd.LoadFIXSpec("FIX44");

            string[] msgFields = { "8=FIX.4.4", "9=332",           "35=W",     "34=2",                                     "49=MA",        "52=20121024-12:21:42.170", "56=xxxx",
                                   "22=4",      "48=BE0932900518", "55=[N/A]", "262=1b145288-9c9a-4911-a084-7341c69d3e6b", "762=EURO_EUR", "268=2",
                                   "269=0",     "270=97.625",      "15=EUR",   "271=1246000",                              "272=20121024", "273=07:30:47",             "276=I",  "282=BEARGB21XXX",  "299=15478575",
                                   "269=1",     "270=108.08",      "15=EUR",   "271=884000",                               "272=20121024", "273=07:30:47",             "276=I",  "282=BEARGB21XXX",  "299=15467902", "10=77" };
            string   msgStr = String.Join(Message.SOH, msgFields) + Message.SOH;

            QuickFix.FIX44.MarketDataSnapshotFullRefresh msg = new QuickFix.FIX44.MarketDataSnapshotFullRefresh();

            msg.FromString(msgStr, true, dd, dd, _defaultMsgFactory);
            QuickFix.FIX44.MarketDataIncrementalRefresh.NoMDEntriesGroup gentry1 = new QuickFix.FIX44.MarketDataIncrementalRefresh.NoMDEntriesGroup();
            msg.GetGroup(1, gentry1);
            Assert.AreEqual(new DateTime(2012, 10, 24), gentry1.MDEntryDate.getValue());
            Assert.AreEqual(new DateTime(2012, 10, 24, 7, 30, 47).TimeOfDay, gentry1.MDEntryTime.getValue().TimeOfDay);
            Assert.AreEqual(new DateTime(2012, 10, 24, 7, 30, 47), gentry1.MDEntryDate.getValue() + gentry1.MDEntryTime.getValue().TimeOfDay);
        }
Example #4
0
        public void issue56_GetGroup_by_tag_and_return()
        {
            // setup
            var dd = new QuickFix.DataDictionary.DataDictionary();

            dd.LoadFIXSpec("FIX44");
            string[] msgFields = { "8=FIX.4.2", "9=87", "35=B", "34=3", "49=CLIENT1", "52=20111012-22:15:55.474", "56=EXECUTOR", "148=AAAAAAA", "33=2", "58=L1", "58=L2", "10=016" };
            string   msgStr    = String.Join(Message.SOH, msgFields) + Message.SOH;

            QuickFix.FIX42.News msg = new QuickFix.FIX42.News();
            msg.FromString(msgStr, false, dd, dd, _defaultMsgFactory);
            Assert.AreEqual(2, msg.GroupCount(Tags.LinesOfText)); // for sanity

            // the test
            var grp1 = msg.GetGroup(1, Tags.LinesOfText);

            Assert.IsInstanceOf <QuickFix.FIX42.News.LinesOfTextGroup>(grp1);
            Assert.AreEqual("L1", (grp1 as QuickFix.FIX42.News.LinesOfTextGroup).Text.Obj);

            var grp2 = msg.GetGroup(2, Tags.LinesOfText);

            Assert.IsInstanceOf <QuickFix.FIX42.News.LinesOfTextGroup>(grp2);
            Assert.AreEqual("L2", (grp2 as QuickFix.FIX42.News.LinesOfTextGroup).Text.Obj);
        }
        public void ValidateWrongTypeInRepeatingGroup()
        {
            QuickFix.DataDictionary.DataDictionary dd = new QuickFix.DataDictionary.DataDictionary();
            dd.LoadFIXSpec("FIX44");
            QuickFix.FIX44.MessageFactory f = new QuickFix.FIX44.MessageFactory();

            string[] msgFields = { "8=FIX.4.4",   "9=111", "35=V",  "34=3", "49=sender", "52=20110909-09:09:09.999", "56=target",
                                   "262=mdreqid", "263=0", "264=5",
                                   "267=1",        // MDReqGrp
                                   "269=failboat", // should be a char
                                   "146=1",        // InstrmtMDReqGrp
                                   "55=sym",
                                   "10=91" };
            string   msgStr = String.Join(Message.SOH, msgFields) + Message.SOH;

            string msgType     = "V";
            string beginString = "FIX.4.4";

            Message message = f.Create(beginString, msgType);

            message.FromString(msgStr, true, dd, dd, f);

            Assert.That(() => dd.Validate(message, beginString, msgType), Throws.TypeOf <QuickFix.IncorrectDataFormat>());
        }
 public void BasicMessageTest()
 {
     QuickFix.DataDictionary.DataDictionary dd = new QuickFix.DataDictionary.DataDictionary();
     dd.LoadFIXSpec("FIX44");
     Assert.That(dd.Messages["3"].Fields.Count, Is.EqualTo(7));
 }
        public void CheckValidFormat()
        {
            QuickFix.DataDictionary.DataDictionary dd = new QuickFix.DataDictionary.DataDictionary();
            dd.LoadFIXSpec("FIX44");
            dd.CheckFieldsHaveValues = true;

            var goodFields = new QuickFix.Fields.StringField[] {
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.Symbol, "foo"),                            // string
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.Side, "2"),                                // char
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.LastQty, "123"),                           // int
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.AvgPx, "1.23"),                            // decimal
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.ReportToExch, "Y"),                        // bool
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.ContraTradeTime, "20011217-09:30:47.123"), // datetime
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.MDEntryDate, "20030910"),                  // dateonly
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.MDEntryTime, "13:20:00.123"),              // timeonly

                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.Symbol, "")                                // string
            };

            foreach (var datum in goodFields)
            {
                Assert.DoesNotThrow(delegate { dd.CheckValidFormat(datum); });
            }

            var badFields = new QuickFix.Fields.StringField[]
            {
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.Side, "toolong"),                // char
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.LastQty, "notint"),              // int
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.AvgPx, "notdec"),                // decimal
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.ReportToExch, "notbool"),        // bool
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.ContraTradeTime, "notdatetime"), // datetime
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.MDEntryDate, "notdate"),         // dateonly
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.MDEntryTime, "nottime")          // timeonly
            };

            foreach (var datum in badFields)
            {
                Assert.Throws(typeof(IncorrectDataFormat), delegate { dd.CheckValidFormat(datum); });
            }

            var emptyFields = new QuickFix.Fields.StringField[]
            {
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.Side, ""),            // char
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.LastQty, ""),         // int
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.AvgPx, ""),           // decimal
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.ReportToExch, ""),    // bool
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.ContraTradeTime, ""), // datetime
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.MDEntryDate, ""),     // dateonly
                new QuickFix.Fields.StringField(QuickFix.Fields.Tags.MDEntryTime, "")      // timeonly
            };

            foreach (var datum in emptyFields)
            {
                Assert.Throws(typeof(IncorrectDataFormat), delegate { dd.CheckValidFormat(datum); });
            }

            // Setting change!
            dd.CheckFieldsHaveValues = false;
            foreach (var datum in emptyFields)
            {
                Assert.DoesNotThrow(delegate { dd.CheckValidFormat(datum); });
            }
        }