University of Hamburg
Department of InformaticsWorking group Security in Distributed Systems
architecture

How to test and debug plug-ins

[back]

Note that this Tutorial is a stub and only provides basic information.

In this tutorial we assume you have already setup a development environment (see this tutorial on how to setup a development environment).

The Framework contains a class (evaluation.localTest.LocalTest.java) that can be used to run several mixes and clients in the same virtual machine (communication is handeled via the loopback device). We suggest you test your plug-ins locally first before testing them via network. Further, the plug-ins should be tested in simplex mode before testing duplex (parameter GLOBAL_IS_DUPLEX in generalConfig.txt). Specify the number of clients and mixes as well as the traffic model to use for your tests via the config files ./inputOutput/loadGenerator/loadGeneratorConfig.txt and ./inputOutput/anonNode/generalConfig.txt.

Make sure you enable assertions when you test your code (java parameter -ea). The framework contains many assertions that may provide helpful information on unexpected runtime behaviour of your (or our) code. Please help us improve the framework code and report the bugs you find.

Set GLOBAL_DEBUG_MODE_ON in generalConfig.txt to TRUE to get further debug output via console.

Make sure GLOBAL_LOCAL_MODE_ON in generalConfig.txt is set to TRUE for testing locally. This will make the framework ignore the IP addresses specified in the config files and set them to localhost.

Make sure to not use the load generator in AFAP (as fast as possible) mode (see the config file ./inputOutput/loadGenerator/loadGeneratorConfig.txt) to prevent the console from getting flooded with debug messages.

When testing layer 1 plug-ins you may also want to set LoadGenerator.VALIDATE_IO to TRUE. This mechanism can be used to compare the data sent and received at different layers and anon nodes. Use the Open Call Hierarchy feature of Eclipse on the LoadGenerator.VALIDATE_IO variable to find usage examples. The basic idea is to compare the data sent and received by clients and mixes at different locations in the framework for equality. You may want to choose two points in the framework that shuld see the same data (e.g. the payload of a message before client-side encryption should be the same as after mix-side decryption. If that is not the case, the mechanism will throw an Exception.). Note that this mechanism severely decrease performance and should be turned off after debugging.

[back to top] [back to tutorial overview] [report bug]

News

06.27.2015
New gMix VM and Tutorials are online [URL]

05.01.2015
New version of gMix framework available on GitHub [URL]

05.01.2015
New website is online

02.13.2015
Paper accepted for Elsevier Computers & Security journal :-)

10.22.2014
Experiment descriptions, executables and source code for the paper Workload Modelling for Mix-based Anonymity Services are online now [URL]

06.13.2014
Paper about EncDNS accepted at ESORICS 2014 :-)

See more...