Skip to content

4.1.2 One to One Test Reproduction Guide

Kadosa Koltai edited this page Oct 17, 2019 · 1 revision

If you want to do this test for yourself, here is what you have to know.

Requirements

This test is designed to run on three physically separate machines, to actually have network between them.

  • The parts of the test should be started sequentially, in the order of server, receiver, sender.
  • The parts of the test should see each other based on their IP address, i.e. should either be on the same subnet or have public IP addresses.

Server

This machine runs the servers for the Arrowhead and the MQTT portions of the test.

Requirements:

  • Arrowhead System Registry, Authorization, and Orchestrator Core Systems. See the official readme or our quick guide.
  • Mosquitto. See the official download page.
  • Certain ports should be opened in the firewall.
    • For Mosquitto: 1883 by default, configurable.
    • For Arrowhead: 8440 and 8442 by default, configurable. (In their .conf files)

Beware the transitive requirements of the Arrowhead Framework.

Receiver

This machine receives the files.

Requirements:

  • Windows 10
    • Not tested on any other operating system
    • The Arrowhead portion should run on any OS that can run Java 12
    • The MQTT portion will probably run on anything that can run the Mosquitto server and Java 12, beyond that the clients should run with any other MQTT server implementation that Paho is compatible with
    • The DDS portion will probably run on anything RTI DDS Connext and Java 12 runs on
  • Java 12
    • Run the project with the -Xmx4g or -Xmx8g option. See here
    • Not tested with any other version
    • Java 11 should be compatible with everything
    • Java 8 is not
  • Eclipse IDE 2019-06
    • Not tested with any other version
    • Will probably run on older 4.* versions
    • Packing into .jar might be possible
  • Put the eu folder (unzipped from lib.zip, in the repository root) in the machine's Maven local repository
    • This is C:\Users(username).m2\repository by default
    • Maven should not be actually needed
    • Send an email to the Arrowhead Framework folks to make a client library, and publish it
  • Certain ports should be opened in the firewall
    • For the Arrowhead Receiver: 8499 by default, configurable in the Constants.java file
  • The Constants should be updated in Constants.java file
    • The SERVER_IP should be set the server's IP address
    • The *_PORT and *_NAME constants should remain consistent with other configurations
  • RTI DDS Connext
    • Was tested with 5.3.1 and 6.0.0
    • Configure RTI DDS Connext depedencies
    • Add (connext root)/lib/java/nddsjava.jar to the project as an user library

Sender

The part that sends the files and saves the data.

Requirements:

  • Windows 10
    • Not tested on any other operating system
    • The Arrowhead portion should run on any OS that can run Java 12
    • The MQTT portion will probably run on anything that can run the Mosquitto server and Java 12, beyond that the clients should run with any other MQTT server implementation that Paho is compatible with
    • The DDS portion will probably run on anything RTI DDS Connext and Java 12 runs on
  • Java 12
    • Run the project with the -Xmx4g or -Xmx8g option. See here
    • Not tested with any other version
    • Java 11 should be compatible with everything
    • Java 8 is not
  • Eclipse IDE 2019-06
    • Not tested with any other version
    • Will probably run on older 4.* versions
    • Should run in other IDEs with gradle support
    • Packing into .jar in not advised
  • Put the eu folder (unzipped from lib.zip, in the repository root) in the machine's Maven local repository
    • This is C:\Users(username).m2\repository by default
    • Maven should not be actually needed
    • Send an email to the Arrowhead Framework folks to make a client library, and publish it
  • The Constants should be updated in Constants.java file
    • The SERVER_IP should be set the server's IP address
    • The *_PORT and *_NAME constants should remain consistent with other configurations
  • RTI DDS Connext
    • Was tested with 5.3.1 and 6.0.0
    • Configure RTI DDS Connext depedencies
    • Change the location of the licence file in the USER_QOS_DEFAULTS.xml to your actual location
    • Add (connext root)/lib/java/nddsjava.jar to the project as an user library

Running the test

  1. Make sure the servers are running
  2. Start the Receivers by running the ReceiverStarter.java file as java application
  3. Start the Senders by running the SendersStarter.java file as java application

For quick reference you may want to have all three parts on the same machine. In this case, you may use the UnifiedStarter.java to start both client at the same time, and to see all their outputs in the same console. This isn't foolproof, though, because certain errors only come up between physically different machines, e.g.: firewall problems.

Configuration

If you want to choose which tests to run, instead of the random process, go into the SenderStarter (or UnifiedStarter), comment out line 23 (or 33) and set the initial value of the variable testToRun to the value corresponding to the test, as seen below in the second switch-case statement (0: Arrowhead, 1: DDS 2: MQTT).

The same is true for the test files, but with the fileToSend variable and the first switch-case statement.

To add files of your own, either broaden the switch-case statement and the random range, or write over one of the existing ones. Remember, Eclipse runs the applications with the project root directory as the working directory. Note that MQTT, by specification, is only capable of sending 256 MB of data in a message. If you want to try out bigger files than that; either not test it with MQTT, or remake the clients. In the latter case I advise you to follow the logic used in the DDS clients.

If you think that the 12 reuses thing is arbitrary and capricious, firstly; it is, secondly; if you have better (i.e.: any) data connected to this, please send it to us, thirdly; change the constant TEST_REPETITIONS in Constants.java, maybe even use a randomly generated number before each test cycle.