FIXYL is a tool for testing and verifying software that uses the FIX protocol.

Overview

FIXYL

logo.png

FIXYL is a tool for testing and verifying software that uses the FIX protocol. It allows establishing FIX sessions and exchanging (and manipulating) FIX messages. As this tool can currently only act as a FIX client, it can only be used to test applications that act as a FIX server.

The tool is based on the message definition format used in QuickFix and the tool provides support for all standard and custom FIX dictionaries across version 4.x and 5.x of the FIX protocol. It features a wide variety of options to support the testing and debugging of FIX gateways. You can find a sample definition here.

This tool is created using React, is based on Electron and supports cross-platform builds.

Installation

Installing from binaries

Pre-built binaries can be downloaded from the Releases Page. Make sure to use the installer for your operating system.

OS Instructions
Windows Download the .exe file
Mac Download the .dmg file
Linux Download the .AppImage file

Building from source

Building from source requires NodeJS 12 or higher. Note that this step can be initiated from all major operating systems (Linux, Windows, MacOS) and produces an installer for that operating system.

For production:

npm install
npm run build

Once the build is complete, the installer can be found inside the dist directory.

build_screenshot.jpg

For development:

npm install
npm run start

This launches a React development server on localhost:3000, and starts an Electron application instance pointing to it. Make sure that port 3000 is not already occupied by some other program.

Usage

First start-up

Once you start the application for the first time, it will ask for a working directory to store configuration files. Set this to a valid directory.

This directory is used for storing user configurations such as profiles and favorites. Deleting this directory manually would remove such configurations and would cause the application to prompt for a working directory the next time it is launched.

start_screenshot.jpg

Adding a new profile

A profile contains all of the information required for creating a new FIX session. You may open the profile creation form by clicking on the Profile menu item and clicking the + button on the top of the opened panel.

Once this form is opened, you should enter the following information of the target FIX server:

Field Description
Name Name of the profile
IP Address IP address of the targetserver
Port Port address of the target server
HB Interval Heartbeat interval for the session
SenderCompId Username to use for the login and sender identification
Password Password of the above user to use for login
TargetCompId Target system/firm identification
Dictionary Location Location of the FIX dictionary definition XML file

Pressing Save will create a new profile with the entered information.

existing_profile_screenshot.jpg

The profile information will be saved in a configuration file inside the working directory set for the application.

Starting a FIX session

Open the Profile menu and click the connet button of the profile that you have previously created. This will open a TCP connection to the FIX server mentioned in the profile, A new tab will be opened in the main window for the established session.

If the connection is successfull, the connection indicator will turn green and the state will be presented as CONNECTED.

new_session_screenshot.jpg

FIX Session Management

Each FIX session tab consists of the following 3 sections:

  1. Session management
  2. Message streams
  3. Message preview

Session Management

This section provides an overview of the session and tools required to interact with the active session. The following tabs are available in this section.

Section Description Screenshot
General Provides basic information on the FIX session, such as connection details and the status. It also provides the functionality to connect and disconnect the session. general_section_screenshot.jpg
New Message Use this to send a new message through your FIX session. A message definition can be found using the dropdown menu (which supports auto complete). Selecting a messsage definition will prompt a form to fill the relevant fields before sending the message. You can also add the message you have saved to your favorites for later use. Refer FIX Message Form for more information.
Raw Data This is another way of sending a message. If you have a raw FIX message with printable field separators, use this tab to send it. raw_data_section_screenshot.jpg
Favorites All the favorites that you have saved previously are listed here. You can select a saved favorite message and send it. favorite_section_screenshot.jpg
Scenarios [EXPERIMATAL] This section gives users the ability to add automated testing for a message flow to cover a scenario. Refer Scenario Configuration section for more information.

Message Stream

This section shows all incoming and outgoing messages of the session. You can filter by Heartbeat , In-coming and Out-going messages.

You can select a message to get a preview of it. You can also select two messages (by selecting while pressing Ctrl) and click View Diff to compare the selected two messages in the message stream.

diff_view_screenshot.jpg

Message Preview

This section visualizes a message selected in the message stream.

message_preview_screenshot.jpg

Each message is shown in two formats.

  1. Decoded format where fields are shown in a tabular manner.
  2. Raw format where raw data of the message is shown. Raw data of the message can be copied by clicking on this section.

FIX Message Form

This form is used for editing messages before they are sent on the session. It can also be used for adding a configured message to the list of favorites for later use.

Following are some noteworthy features of this form:

  1. If you press Ctrl + F you will get a search panel for searching through message fields.
  2. The form also supports auto-generated fields. In order to use this, set the value of the field to {auto-gen}. Currently, auto generation of values are only supported on FIX fields of type string, char, int, float, utctimestamp, monthyear, utcdateonly, and utctimeonly. For example, if a date/time field is set to auto generate, the field value would be auto populated with the date always being set to the current date.

Scenario Configuration

This section gives the user the abiity to configure test scenarios. A scenario can have multiple stages and each stage has an input and an output. Both input and output can have mutiple messages and each can be selected either from your favorites or manually.

scenarios_screenshot.jpg

Execution is done stage by stage and the application will send each message in the input list and check the received messages against the ones mentioned in the output list. Each output message should have the field values that you want to check when the actual message is received. You can exempt a field from this validation by not having them in the output messages.

You can also capture field values from the output message and use it in an input message. In the above screenshot, the order stage contains an input message for submitting a new order and the output message as the execution report that can be recieved if the order submittion is successful.

scenarios_output_screenshot.jpg

The values recieved from the execution report can be captured using {get: <unique name>} tag.

The captured values are used in the next stage of this example by using {set: <unique name>} to send an order cancellation request.

scenarios_input_screenshot.jpg

IMPORTANT: This feature is currently in an experimental stage so you may find some issues.

License

License

Contribution

You may contribute to this project in any of the following manners.

  • Use it in your work, and tell us about your experience. You can suggest changes, propose new features and report bugs.
  • Better yet, fix bugs and implement features and submit your contribution as a pull request. We will review and merge. Note that all code contributed in this manner would be published under the same license terms as the main project.

Copyright 2022 Yaala Labs

yl_logo.png

You might also like...

A RESP 'Redis Serialization Protocol' library implementation to generate a server, uses a similar approach to express to define you serer, making it easy and fast.

A RESP 'Redis Serialization Protocol' library implementation to generate a server, uses a similar approach to express to define you serer, making it easy and fast.

RESPRESS A RESP 'Redis Serialization Protocol' library implementation to generate a server, uses a similar approach to express to define you serer, ma

Aug 29, 2022

To-do List Software testing

To-do List đź“‘ Project description This is a minimalist version of a To-do List website. đź›  Built with HTML5 CSS3 ES6 Webpack đź“ş Live Demo Live version

Mar 31, 2022

Nutrition tracking software that uses machine learning to help you reach your body composition goals.

Nutrition tracking software that uses machine learning to help you reach your body composition goals.

LogSmarter - Machine Learning Nutrition Tracker Description LogSmarter LogSmarter™ is not just another calorie counter. It is an AI nutrition coach th

Sep 4, 2022

Find and fix dangling files and unused dependencies in your JavaScript projects.

Find and fix dangling files and unused dependencies in your JavaScript projects.

unimported Find unused source files in javascript / typescript projects. While adding new code to our projects, we might forget to remove the old code

Jan 4, 2023

Auto-Fix Hundreds of Grammarly Errors With This Script

Auto-Fix Hundreds of Grammarly Errors With This Script

This script automatically applies your Grammarly suggestions. Use case: Large document with 100+ errors How to use: Go to Grammarly Web app Go to Edit

Jan 3, 2023

Fix your mistake when you forget to change your keyboard language!

Fix your mistake when you forget to change your keyboard language!

Persian Typo Mistake 🇮🇷 Introduction With this extension, you can fix your text that is written in Persian but on an English keyboard. this extensio

Nov 23, 2022

Debug express.js server code with Ray to fix problems faster

Debug express.js server code with Ray to fix problems faster

express-ray Install this package in any Express.js project to provide an exceptional debugging experience using the Ray app by Spatie. Installation In

Nov 3, 2022

fix out-of-memory actions at colors@^1.4.1

What's it for? colors@^1.4.1 has action of out-of-memory: https://github.com/Marak/colors.js/commit/5d2d242f656103ac38086d6b26433a09f1c38c75. https://

Jan 11, 2022

Fix for Object.hasOwnProperty, which normally just returns a boolean, which is not good when you care about strong typing.

Fix for Object.hasOwnProperty, which normally just returns a boolean, which is not good when you care about strong typing.

Welcome to ts-has-own-property đź‘‹ Fix for Object.hasOwnProperty, which normally just returns a boolean, which is not good when you care about strong t

Jul 4, 2022
Comments
  • FIX Dictionary

    FIX Dictionary

    Hi, I am interested in this project, and potentially collaborating. Do you have a valid FIX 4.2 Dictionary file I can use as a starting point? I cannot seem to get any to load without exceptions. Thank you.

    question 
    opened by duncanesson 2
  • Add a version alert to settings panel

    Add a version alert to settings panel

    • Added a basic network class to manage REST calls.
    • Added a REST call in AppManagementService constructor to get the latest release version.
      • This is an unauthenticated API and the rate limit is 60 requests per hour. Assumption here is that a user will not close and re-open FIXYL 60 times within an hour.
    • Added an info alert in the bottom area of Settings drawer to indicate if there is a newer version available.

    version-available

    opened by Chevindu 1
  • Party Role Qualifier(2376) tag is misplaced in Parties Component Block when displayed

    Party Role Qualifier(2376) tag is misplaced in Parties Component Block when displayed

    When displaying Party IDs, the Party Role Qualifier(2376) tag is misplaced. It should be shown on the proper block.

    Raw message: 8=FIX.4.49=52135=AE34=1249=P8PTGW52=20221020-15:13:28.76156=sw.pt.am217=YHA9-BDAL-QCQS22=431=88.830032=1000000.0048=US45777VAE7455=COSICE_6.75_07/10/31_144A60=20221020-15:13:26.15963=364=20221024423=1487=0571=T648-ABXG-DTNW829=1001880=2RNR-GTDD-464K1123=0552=154=115=USD921=891487.50118=891557.50159=3187.50528=A1724=512=70.0037=PSLA-GPN9-YVLQ453=6448=sw_am2447=D452=36448=AM2447=D452=1448=LESI447=D452=17448=4561447=P452=122376=24448=4561447=P452=1222376=24448=LELEGB22XXX447=B452=1010=106

    What's displayed:

    Screenshot 2022-10-20 at 9 07 31 PM

    opened by samithwimalana 1
  • Fix console errors and warnings

    Fix console errors and warnings

    An attempt to fix following console errors and warnings

    Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function. at LoadingScreen

    react-intl-universal format message failed for key='message_diff_viewer.raw_msg_desc'. Expected argNameOrNumber but "<" found.

    opened by Chevindu 0
Releases(v1.0.5)
Grupprojekt för kurserna 'Javascript med Ramverk' och 'Agil Utveckling'

JavaScript-med-Ramverk-Laboration-3 Grupprojektet för kurserna Javascript med Ramverk och Agil Utveckling. Utvecklingsguide För information om hur utv

Svante Jonsson IT-Högskolan 3 May 18, 2022
Hemsida för personer i Sverige som kan och vill erbjuda boende till människor på flykt

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

null 4 May 3, 2022
Kurs-repo för kursen Webbserver och Databaser

Webbserver och databaser This repository is meant for CME students to access exercises and codealongs that happen throughout the course. I hope you wi

null 14 Jan 3, 2023
zkPoB is a mobile compatible tool that lets anyone prove they own a Bufficorn (or any NFT) without revealing which Buffi they own or the address they are verifying themselves with

zkPoB is a mobile compatible tool that lets anyone prove they own a Bufficorn (or any NFT) without revealing which Buffi they own or the address they are verifying themselves with

Marto.eth 10 Aug 25, 2022
A testing focused Remix Stack, that integrates E2E & Unit testing with Playwright, Vitest, MSW and Testing Library. Driven by Prisma ORM. Deploys to Fly.io

Live Demo · Twitter A testing focused Remix Stack, that integrates E2E & Unit testing with Playwright, Vitest, MSW and Testing Library. Driven by Pris

Remix Stacks 18 Oct 31, 2022
How often do you get asked about the gadgets or software that you use? If the answer is quite often, you should be trying show off out. Curate the list of gadgets and software and share it with your fans and followers.

Show Off - Showcase your setup! How often do you get asked about the gadgets or software that you use? If the answer is quite often, you should be try

Adithya Sreyaj 15 Nov 24, 2022
Digital Identifier is a secure, decentralized, anonymous and tampered proof way of maintaining and verifying all essential identity-based documents to create a unique digital identity of a person.

Digital Identifier ?? To design and develop a secure, decentralized, anonymous and tampered proof way of maintaining and verifying all essential ident

Mukul Kolpe 4 Dec 17, 2022
Node.js module for verifying Plumo proofs and reading states based on it

plumo-verifier Node.js module for verifying Plumo proofs and reading states based on it. Plumo is a SNARK-based light client verifier for the Celo blo

Celo 3 Dec 15, 2022
AREX: It is a “Differential Testing” and “Record and Replay Testing” Tool.

AREX: It is a “Differential Testing” and “Record and Replay Testing” Tool. Test restful API by record, replay and stub request/response. Differential

ArexTest 15 Nov 1, 2022
Container Image Signing & Verifying on Ethereum [Testnet]

cosigneth An experimental decentralized application for storing and verifying container image signatures as an NFT on Ethereum cosigneth, is a decentr

Furkan TĂĽrkal 17 Jul 4, 2022