diff --git a/README.md b/README.md index 6602705..f9f8de9 100644 --- a/README.md +++ b/README.md @@ -46,10 +46,6 @@ Initiially the project was based only on regex filters, and also now the main fu # TODO: -## Until merge of dev branch to main - -- Fix/Improve Benchmark && Benchmark readme - ## Next points - Create hijacking port to proxy diff --git a/docs/FiregexBenchmark.png b/docs/FiregexBenchmark.png deleted file mode 100755 index c6a4455..0000000 Binary files a/docs/FiregexBenchmark.png and /dev/null differ diff --git a/docs/FiregexInternals.png b/docs/FiregexInternals.png old mode 100755 new mode 100644 index bce3432..d924e3f Binary files a/docs/FiregexInternals.png and b/docs/FiregexInternals.png differ diff --git a/docs/FiregexWorking.png b/docs/FiregexWorking.png deleted file mode 100755 index ab73746..0000000 Binary files a/docs/FiregexWorking.png and /dev/null differ diff --git a/tests/README.md b/tests/README.md index 25b27b6..2f0a6b2 100644 --- a/tests/README.md +++ b/tests/README.md @@ -6,79 +6,82 @@ Tests are a quick and dirty way to check if your modification to the backend cod # Running all the tests If you are working on the same machine firegex is running on, you can just run run_tests.sh - $ ./run_tests.sh +```bash +$ ./run_tests.sh +``` It will automatically perform a general API test, Netfilter and Proxy Regex test. You can also run tests manually: - $ ./api_test.py -h - usage: api_test.py [-h] [--address ADDRESS] --password PASSWORD +```bash +$ ./api_test.py -h +usage: api_test.py [-h] [--address ADDRESS] --password PASSWORD - $ ./nf_test.py -h - usage: nf_test.py [-h] [--address ADDRESS] --password PASSWORD [--service_name SERVICE_NAME] [--port PORT] - [--ipv6] [--proto {tcp,udp}] +$ ./nf_test.py -h +usage: nf_test.py [-h] [--address ADDRESS] --password PASSWORD [--service_name SERVICE_NAME] [--port PORT] + [--ipv6] [--proto {tcp,udp}] - optional arguments: - -h, --help show this help message and exit - --address ADDRESS, -a ADDRESS - Address of firegex backend - --password PASSWORD, -p PASSWORD - Firegex password - --service_name SERVICE_NAME, -n SERVICE_NAME - Name of the test service - --port PORT, -P PORT Port of the test service - --ipv6, -6 Test Ipv6 - --proto {tcp,udp}, -m {tcp,udp} - Select the protocol +optional arguments: +-h, --help show this help message and exit +--address ADDRESS, -a ADDRESS + Address of firegex backend +--password PASSWORD, -p PASSWORD + Firegex password +--service_name SERVICE_NAME, -n SERVICE_NAME + Name of the test service +--port PORT, -P PORT Port of the test service +--ipv6, -6 Test Ipv6 +--proto {tcp,udp}, -m {tcp,udp} + Select the protocol - $ ./px_test.py -h - usage: px_test.py [-h] [--address ADDRESS] --password PASSWORD [--service_name SERVICE_NAME] [--port PORT] - - optional arguments: - -h, --help show this help message and exit - --address ADDRESS, -a ADDRESS - Address of firegex backend - --password PASSWORD, -p PASSWORD - Firegex password - --service_name SERVICE_NAME, -n SERVICE_NAME - Name of the test service - --port PORT, -P PORT Port of the test service +$ ./px_test.py -h +usage: px_test.py [-h] [--address ADDRESS] --password PASSWORD [--service_name SERVICE_NAME] [--port PORT] +optional arguments: +-h, --help show this help message and exit +--address ADDRESS, -a ADDRESS + Address of firegex backend +--password PASSWORD, -p PASSWORD + Firegex password +--service_name SERVICE_NAME, -n SERVICE_NAME + Name of the test service +--port PORT, -P PORT Port of the test service +``` # Running a Benchmark - ./benchmark.py - options: - -h, --help show this help message and exit - --address ADDRESS, -a ADDRESS - Address of firegex backend - --port PORT, -P PORT Port of the Benchmark service - --internal-port INTERNAL_PORT, -I INTERNAL_PORT - Internal port of the Benchmark service - --service-name SERVICE_NAME, -n SERVICE_NAME - Name of the Benchmark service - --password PASSWORD, -p PASSWORD - Firegex password - --num-of-regexes NUM_OF_REGEXES, -r NUM_OF_REGEXES - Number of regexes to benchmark with - --duration DURATION, -d DURATION - Duration of the Benchmark in seconds - --output-file OUTPUT_FILE, -o OUTPUT_FILE - Output results csv file - --num-of-streams NUM_OF_STREAMS, -s NUM_OF_STREAMS - Output results csv file - --mode {netfilter,proxy}, -m {netfilter,proxy} - Type of filtering - +```bash +./benchmark.py +options: +-h, --help show this help message and exit +--address ADDRESS, -a ADDRESS + Address of firegex backend +--port PORT, -P PORT Port of the Benchmark service +--internal-port INTERNAL_PORT, -I INTERNAL_PORT + Internal port of the Benchmark service +--service-name SERVICE_NAME, -n SERVICE_NAME + Name of the Benchmark service +--password PASSWORD, -p PASSWORD + Firegex password +--num-of-regexes NUM_OF_REGEXES, -r NUM_OF_REGEXES + Number of regexes to benchmark with +--duration DURATION, -d DURATION + Duration of the Benchmark in seconds +--output-file OUTPUT_FILE, -o OUTPUT_FILE + Output results csv file +--num-of-streams NUM_OF_STREAMS, -s NUM_OF_STREAMS + Output results csv file +--mode {netfilter,proxy}, -m {netfilter,proxy} + Type of filtering +``` Benchmarks let you evaluate the performance of the filters. You can run one by typing in a shell ```test.py -p FIREGEX_PASSWORD -r NUM_OF_REGEX -d BENCHMARK_DURATION -m proxy``` to benchmark the Proxy based regex filter, or ``` -m netfilter ``` to benchmark the Netfilter based regex filtering. It uses iperf3 to benchmark the throughput in MB/s of the server, both with filters, without filters, and for each new added regex. It will automatically add a new random regex untill it has reached NUM_OF_REGEX specified in the arguments. You will find a new benchmark.csv file containg the results. # Firegex Performance Results -TODO: Update with new graphs The test was performed on: -- AMD Ryzen 7 3700X (16 thread) @ 3.600GHz -- RAM Speed: 3200 MT/s (Dual Channel) -- Kernel: 5.18.5-arch1-1 +- Bedrock Linux 0.7.27 Poki x86_64 +- Intel i5-7200U (4) @ 3.100GHz +- 8GB RAM DDR4 2133 MT/s -Command: `python3 benchmark.py -r 100 -d 1 -s 50` +Command: `./benchmark.py -p testpassword -r 50 -d 1 -s 60` -![Firegex Benchmark](/docs/FiregexBenchmark.png) +![Firegex Benchmark](results/Benchmark-chart.png) diff --git a/tests/results/.~lock.netfilter-single.csv# b/tests/results/.~lock.netfilter-single.csv# deleted file mode 100644 index 2fa8da2..0000000 --- a/tests/results/.~lock.netfilter-single.csv# +++ /dev/null @@ -1 +0,0 @@ -,nik,nik-deb,03.08.2022 12:06,file:///home/nik/.config/libreoffice/4; \ No newline at end of file diff --git a/tests/results/Benchmark-chart.png b/tests/results/Benchmark-chart.png new file mode 100644 index 0000000..ca554f2 Binary files /dev/null and b/tests/results/Benchmark-chart.png differ diff --git a/tests/results/test-firegex.xlsx b/tests/results/test-firegex.xlsx new file mode 100644 index 0000000..3158443 Binary files /dev/null and b/tests/results/test-firegex.xlsx differ