From f4d8306d8239b12cb275956462b2c9c136b175fe Mon Sep 17 00:00:00 2001 From: Jacob Boddey Date: Tue, 26 Sep 2023 17:47:41 +0100 Subject: [PATCH 1/2] Add docs, disable network validation by default --- docs/get_started.md | 57 +++++++++++++++--- docs/ui/device_icon.png | Bin 0 -> 933 bytes docs/ui/history_icon.png | Bin 0 -> 538 bytes docs/ui/progress_icon.png | Bin 0 -> 989 bytes docs/ui/settings_icon.png | Bin 0 -> 539 bytes docs/ui/settings_menu.png | Bin 0 -> 37230 bytes docs/ui/test_name.png | Bin 0 -> 10221 bytes framework/python/src/core/test_runner.py | 9 +-- framework/python/src/core/testrun.py | 7 ++- .../src/net_orc/network_orchestrator.py | 2 +- testing/baseline/test_baseline | 2 +- testing/tests/test_tests | 2 +- 12 files changed, 60 insertions(+), 19 deletions(-) create mode 100644 docs/ui/device_icon.png create mode 100644 docs/ui/history_icon.png create mode 100644 docs/ui/progress_icon.png create mode 100644 docs/ui/settings_icon.png create mode 100644 docs/ui/settings_menu.png create mode 100644 docs/ui/test_name.png diff --git a/docs/get_started.md b/docs/get_started.md index 31f48181c..a49598de4 100644 --- a/docs/get_started.md +++ b/docs/get_started.md @@ -1,5 +1,7 @@ # Getting Started +It is recommended that you run Testrun on a standalone machine running a fresh-install of Ubuntu 22.04.3 LTS. + ## Prerequisites ### Hardware @@ -24,29 +26,66 @@ Ensure the following software is installed on your Ubuntu LTS PC: ## Installation -1. Download the latest version of Testrun from the [releases page](https://github.com/google/test-run/releases) +1. Download the latest version of the Testrun installer from the [releases page](https://github.com/google/test-run/releases) -2. Install the package using ``sudo apt install ./testrun*.deb`` +2. Open a terminal and navigate to location of the Testrun installer (most likely your downloads folder) -## Test Your Device +3. Install the package using ``sudo apt install ./testrun*.deb`` -1. Attach network interfaces: + - Testrun will be installed under the /usr/local/testrun directory. + - Testing data will be available in the ``local/devices/{device}/reports`` folders + - Additional configuration options are available in the ``local/system.json`` file - - Connect one USB Ethernet adapter to the internet source (e.g., router or switch) using an Ethernet cable. - - Connect the other USB Ethernet adapter directly to the IoT device you want to test using an Ethernet cable. +## Start Testrun + +1. Attach network interfaces: + - Connect one USB Ethernet adapter to the internet source (e.g., router or switch) using an ethernet cable. + - Connect the other USB Ethernet adapter directly to the IoT device you want to test using an ethernet cable. **NOTE: Both adapters should be disabled in the host system (IPv4, IPv6 and general). You can do this by going to Settings > Network** 2. Start Testrun. -Start Testrun with the command `sudo testrun --no-validate` +Start Testrun with the command `sudo testrun` - To run Testrun in network-only mode (without running any tests), use the `--net-only` option. - - To skip network validation before use and not launch the faux device on startup, use the `--no-validate` option. - - To run Testrun with just one interface (connected to the device), use the ``--single-intf`` option. +## Test Your Device + +1. Once Testrun has started, open your browser to http://localhost:8080. + +2. Configure your network interfaces under the settings menu - located in the top right corner of the application. Settings can be changed at any time. + + ![](/docs/ui/settings_icon.png) + +3. Navigate to the icon to add a new device for testing. + + ![](/docs/ui/device_icon.png) + +4. Click the button 'Add Device'. + +5. Enter the MAC address, manufacturer name and model number. + +6. Select the test modules you wish to enable for this device (Hint: All are required for qualification purposes) and click save. + +7. Navigate to the Testrun progress icon and click the button 'Start New Testrun'. + + ![](/docs/ui/progress_icon.png) + +8. Select the device you would like to test. + +9. Enter the version number of the firmware running on the device. + +10. Click 'Start Testrun' + + - During testing, if you would like to stop Testrun, click 'Stop' next to the test name. + +11. On completion of the test sequence, a report will appear under the history icon. + + ![](/docs/ui/history_icon.png) + # Troubleshooting If you encounter any issues or need assistance, consider the following: diff --git a/docs/ui/device_icon.png b/docs/ui/device_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2472f7da223c4b6a29e94e830303095628d3aae6 GIT binary patch literal 933 zcmV;W16urvP)ZgXgFbngSdJ^%m%H%UZ6R9J=W zm_K})KorM+>8IN<2WD?B&cU_VIi10-O;-Pm?We1nHQF)4*w&1R%&{}f!P(atW;+=1 zP&lyFwE2AeO$WZa_l0}+-oul{VzIyr(yMVPs698ijwq?P+8Ns`|hj(`m=Vk=kvY;>q0GL0`DS|Epj^Zd8Gsd7O%KEn` z%9?_a>m;zMs$zIOK*O?ATdt`p8kUX0^&q)FC&J+C@b7?k6%k?LdC7IZ+k+;FO-)tt z< z@pz0Vj*DCXNEadfO@8&10*_n=U+r?)2(gPYfy*>F01yiqU=_cc3d2xZY5|~T)W9nhsm)56!0M?Ag)u~N zjBqvs5oI2ndvB7AHBHNO@Hh(#V_8$x(!iN9tSAa9Lh{b)QzxF60x{p3cn;-ei8&E2 zE-zAvzh)RZgXgFbngSdJ^%m#tVu*cR9J=W zmp@R#FcgP>cy8?;X3Lz;z}(^}J20y&?xG`u(1T6x68>o$9h&xcvWPX7*x3Q4}eYd!Cn=!xbzO zg7Dy&+4gTb#S*uUxh-xVcxB0;(`utE@~R7&FXmvrFHH>i?AD=;cTg}7|j9 cvyywk5BJY^UKz0?dH?_b07*qoM6N<$g68$~zW@LL literal 0 HcmV?d00001 diff --git a/docs/ui/progress_icon.png b/docs/ui/progress_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c326d185e93a58a3f2194200052daeb83e209bb3 GIT binary patch literal 989 zcmV<310wv1P)ZgXgFbngSdJ^%m%Z%IT!R9J=W zn7>ckKorNnsk(8@F>{>R_8L2kal!}`sjAefNC*j9q^kb|5@M{{5d^bMTx2HpVhZA4Ok2a#Hyzwr&_xZl}?%i_=gTY{cXJoIQ8em>~0baH(419iZiQT<@ z^rBe0Picakx9@O%aXImfqc2~vySER<*vx(x26kHa=tVKUeg7fdKfAa@pC-7vxs?L> zK?pwx(Tif-weFV-><1zGlmY;HQ7i=tf)D_}7?T1y?T0nj^JezF5HNS9C`Bm{7evU) zL?AAR5CT64XD*9{fIIFG;OOu`3d99{K0J^DbzBd9N>MdUH0&Ax;OgdfIlxZq9*i+G z>>8?;nFC^s2|??Yi8ouDIiQZ$1pru91y#!g00d#U9NYSirq;Cd|;JH5Tl1kCO;KRz8W>|!%VK6=N)r*itTPVOsMm1aY)S?3TILtC zYMK}~D_xsb7Bd6iwbJO?c5aUlg0iZj7sXORSs*_MarEgRx4)4oi^qEM%)qU*zIeTj zo0AHXMUMj!LM8%bv)~6m{|uPFT)L)Vl@RG~+_bk=EmI0aX@as^0%J@%Fj1O_7RgI% zVPGc{-Q$zf91s_zswGgGNP&(|PVw=>djOD5a91}&$Z1dYOu+ozUsDuxTrZb0F6hnH zCa#;!9MEtoi@+EIAw)Vbxn36?w=16NNfX>uU>?0}ZH}jm3o>*K{WQW^ATH=v`T~v* zOx#B=jzs^SG{H>;=FTju0z=nwDdU5Tu4!0P6e$pIRfeuffwCEr`Is3vJIE9;>;z@C z1mGcMe2`gPC2(486bcvt;=@u|Eg=X(&~%Q@0`Uwb>72oR$R@bgj{)~-A`U%1IUU)H z(u?H>!4TZ_Mw&iZgXgFbngSdJ^%m#tw}^dR9J=W znZHxQFcilho?Ehqne3^n&b0g!fPX~66>(Jm34YA#NMWYTGTY8%Z|69ul{*4yV}sXT zK2z`A>+AQDmwc0JLkJo(?s#G{o9dP+Og&rT zeY-t~#c?dn<($Lr+tG@WXCdY?j$<3Wj9|5d*?gWmf1g?!hjN55Lg2aXL43zKY$dHi zDV64zhVE*$yF^a3jiX6OHuaR!EFMJ>e8gV|^(*E8DZ?!GDSOH$vuV~U!7?bjd<|P7 zNfLN@dp()sFh{!Shnr0y6X|z*${e-eG*ufxSME~lFobm&DncrYK)^Q%y$3)002ovPDHLkV1k_3?lu4b literal 0 HcmV?d00001 diff --git a/docs/ui/settings_menu.png b/docs/ui/settings_menu.png new file mode 100644 index 0000000000000000000000000000000000000000..046526b2546214541f5c97f8635f8fb7d8c9bc8b GIT binary patch literal 37230 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 literal 0 HcmV?d00001 diff --git a/docs/ui/test_name.png b/docs/ui/test_name.png new file mode 100644 index 0000000000000000000000000000000000000000..3d18df19d031cfacd7e1befe745efc57be0109cc GIT binary patch literal 10221 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 G-G2dumwj~r literal 0 HcmV?d00001 diff --git a/framework/python/src/core/test_runner.py b/framework/python/src/core/test_runner.py index 9962c3995..f3db52eec 100644 --- a/framework/python/src/core/test_runner.py +++ b/framework/python/src/core/test_runner.py @@ -34,7 +34,7 @@ class TestRunner: def __init__(self, config_file=None, - validate=True, + validate=False, net_only=False, single_intf=False, no_ui=False): @@ -76,9 +76,10 @@ def parse_args(): help="Define the configuration file for Test Run and Network Orchestrator" ) parser.add_argument( - "--no-validate", + "--validate", + default=False, action="store_true", - help="Turn off the validation of the network after network boot") + help="Turn on the validation of the network after network boot") parser.add_argument("-net", "--net-only", action="store_true", @@ -97,7 +98,7 @@ def parse_args(): if __name__ == "__main__": args = parse_args() runner = TestRunner(config_file=args.config_file, - validate=not args.no_validate, + validate=args.validate, net_only=args.net_only, single_intf=args.single_intf, no_ui=args.no_ui) diff --git a/framework/python/src/core/testrun.py b/framework/python/src/core/testrun.py index e1b3f9aab..d66f599e3 100644 --- a/framework/python/src/core/testrun.py +++ b/framework/python/src/core/testrun.py @@ -66,7 +66,7 @@ class TestRun: # pylint: disable=too-few-public-methods def __init__(self, config_file, - validate=True, + validate=False, net_only=False, single_intf=False, no_ui=False): @@ -91,8 +91,8 @@ def __init__(self, self._session.add_runtime_param('single_intf') if net_only: self._session.add_runtime_param('net_only') - if not validate: - self._session.add_runtime_param('no-validate') + if validate: + self._session.add_runtime_param('validate') self.load_all_devices() @@ -290,6 +290,7 @@ def start(self): self.get_net_orc().start_listener() self._set_status('Waiting for Device') LOGGER.info('Waiting for devices on the network...') + time.sleep(self.get_session().get_runtime()) if not (self._test_orc.test_in_progress() or diff --git a/framework/python/src/net_orc/network_orchestrator.py b/framework/python/src/net_orc/network_orchestrator.py index 852748953..05733dfe0 100644 --- a/framework/python/src/net_orc/network_orchestrator.py +++ b/framework/python/src/net_orc/network_orchestrator.py @@ -119,7 +119,7 @@ def start_network(self): self.create_net() self.start_network_services() - if 'no-validate' not in self._session.get_runtime_params(): + if 'validate' in self._session.get_runtime_params(): # Start the validator after network is ready self.validator.start() diff --git a/testing/baseline/test_baseline b/testing/baseline/test_baseline index 4bc6d9e9f..7ecc6ba19 100755 --- a/testing/baseline/test_baseline +++ b/testing/baseline/test_baseline @@ -43,7 +43,7 @@ sudo cp testing/baseline/system.json $TESTRUN_DIR/local/system.json # Copy device configs to testrun sudo cp -r testing/device_configs/* $TESTRUN_DIR/local/devices -sudo testrun --single-intf --no-ui > $TESTRUN_OUT 2>&1 & +sudo testrun --single-intf --no-ui --validate > $TESTRUN_OUT 2>&1 & TPID=$! # Time to wait for testrun to be ready diff --git a/testing/tests/test_tests b/testing/tests/test_tests index da24d0d64..7277d3e7f 100755 --- a/testing/tests/test_tests +++ b/testing/tests/test_tests @@ -62,7 +62,7 @@ for tester in $TESTERS; do args=$(jq -r .$tester.args $MATRIX) touch $testrun_log - sudo timeout 900 testrun --single-intf --no-ui --no-validate > $testrun_log 2>&1 & + sudo timeout 900 testrun --single-intf --no-ui > $testrun_log 2>&1 & TPID=$! # Time to wait for testrun to be ready From 81ec8a1ce7b1a7611adf09567fb90ea98cd8a61f Mon Sep 17 00:00:00 2001 From: Jacob Boddey Date: Wed, 27 Sep 2023 15:07:40 +0100 Subject: [PATCH 2/2] Update docs --- README.md | 2 +- docs/get_started.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fa49f5ed4..404de4915 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ Testrun logo ## Introduction :wave: -Testrun is a tool to automate the validation of network-based functionality of IoT devices. Any device which is capable of receiving an IP address via DHCP is considered an IoT device by Testrun and can be tested. +Testrun automates specific test cases to verify network and security functionality in IoT devices. It is an open source tool which allows external manufacturers to test their devices for the purposes of Device Qualification within the BOS program. ## Motivation :bulb: Without tools like Testrun, testing labs may be maintaining a large and complex network using equipment such as: A managed layer 3 switch, an enterprise-grade network router, virtualized or physical servers to provide DNS, NTP, 802.1x etc. With this amount of moving parts, all with dynamic configuration files and constant software updates, more time is likely to be spent on preparation and clean up of functinality or penetration testing - not forgetting the number of software tools required to perform the testing. The major issues which can and should be solved: diff --git a/docs/get_started.md b/docs/get_started.md index a49598de4..f201ee8b4 100644 --- a/docs/get_started.md +++ b/docs/get_started.md @@ -60,7 +60,7 @@ Start Testrun with the command `sudo testrun` ![](/docs/ui/settings_icon.png) -3. Navigate to the icon to add a new device for testing. +3. Navigate to the device repository icon to add a new device for testing. ![](/docs/ui/device_icon.png)