| # OpenBMC Webserver Testing |
| |
| This doc describes what type of functional testing, which contributors should |
| perform before requesting code reviews, and tips for each type. Contributors |
| should add types of testing they performed and their results as "Tested" footers |
| in commit messages. |
| |
| ## General Methodology |
| |
| There are a variety of ways to develop and test bmcweb software changes. Here |
| are the steps for using the SDK and QEMU. |
| |
| - Follow all |
| [development environment setup](https://github.com/openbmc/docs/blob/master/development/dev-environment.md) |
| directions in the development environment setup document. This will get QEMU |
| started up and you in the SDK environment. |
| - Follow all of the |
| [gerrit setup](https://github.com/openbmc/docs/blob/master/development/gerrit-setup.md) |
| directions in the gerrit setup document. |
| - Clone bmcweb from gerrit |
| |
| ```sh |
| git clone ssh://openbmc.gerrit/openbmc/bmcweb/ |
| ``` |
| |
| - Follow directions in |
| [README.md](https://github.com/openbmc/bmcweb#configuration) to compile |
| |
| - Reduce binary size by stripping it when ready for testing |
| |
| ```sh |
| arm-openbmc-linux-gnueabi-strip bmcweb |
| ``` |
| |
| **Note:** Stripping is not required and having the debug symbols could be |
| useful depending on your testing. Leaving them will drastically increase your |
| transfer time to the BMC. |
| |
| - Copy your bmcweb you want to test to /tmp/ in QEMU |
| |
| ```sh |
| scp -P 2222 bmcweb root@127.0.0.1:/tmp/ |
| ``` |
| |
| **Special Notes:** The address and port shown here (127.0.0.1 and 2222) |
| reaches the QEMU session you set up in your development environment as |
| described above. |
| |
| - Stop bmcweb service within your QEMU session |
| |
| ```sh |
| systemctl stop bmcweb |
| ``` |
| |
| **Note:** bmcweb supports being started directly in parallel with the bmcweb |
| running as a service. The standalone bmcweb will be available on port 18080. |
| An advantage of this is you can compare between the two easily for testing. In |
| QEMU you would need to open up port 18080 when starting QEMU. Your curl |
| commands would need to use 18080 to communicate. |
| |
| - If running within a system that has read-only /usr/ filesystem, issue the |
| following commands one time per QEMU boot to make the filesystem writeable |
| |
| ```sh |
| mkdir -p /var/persist/usr |
| mkdir -p /var/persist/work/usr |
| mount -t overlay -o lowerdir=/usr,upperdir=/var/persist/usr,workdir=/var/persist/work/usr overlay /usr |
| ``` |
| |
| - Remove the existing bmcweb from the filesystem in QEMU |
| |
| ```sh |
| rm /usr/bin/bmcweb |
| ``` |
| |
| - Link to your new bmcweb in /tmp/ |
| |
| ```sh |
| ln -sf /tmp/bmcweb /usr/bin/bmcweb |
| ``` |
| |
| - Test your changes. bmcweb will be started automatically upon your first REST |
| or Redfish command |
| |
| ```sh |
| curl -c cjar -b cjar -k -H "Content-Type: application/json" -X POST https://127.0.0.1:2443/login -d "{\"data\": [ \"root\", \"0penBmc\" ] }" |
| curl -c cjar -b cjar -k -X GET https://127.0.0.1:2443/xyz/openbmc_project/state/bmc0 |
| ``` |
| |
| - Stop the bmcweb service and scp new file over to /tmp/ each time you want to |
| retest a change. |
| |
| See the [REST](https://github.com/openbmc/docs/blob/master/REST-cheatsheet.md) |
| and |
| [Redfish](https://github.com/openbmc/docs/blob/master/REDFISH-cheatsheet.md) |
| cheatsheets for valid commands. |
| |
| ## Types of Changes to Run |
| |
| A committer should run tests that exercise all paths changed in the patchset. If |
| making changes to the http core, that are expected to effect all types of |
| routes, testing one route of each class (websocket, HTTP get, HTTP post) is |
| required. |
| |
| ## Typical Types of Changes |
| |
| ### Basic Redfish Robot Test on QEMU |
| |
| Run the |
| [upstream Robot QEMU test](https://github.com/openbmc/openbmc-build-scripts/blob/master/run-qemu-robot-test.sh). |
| This test is performed automatically when bumping SRCREV. Ensuring this test |
| passing makes your CL less likely to be rolled back while bumping SRCREV of |
| bmcweb. |
| |
| ### Websocket |
| |
| Turn on the `rest` meson option which provides a websocket route. |
| |
| ```bash |
| # run the websocket testing script and verify results |
| $ python scripts/websocket_test.py --host 1.2.3.4:443 --ssl |
| ``` |
| |
| ### Redfish Validator |
| |
| Commiters are required to run the |
| [Redfish Validator](https://github.com/DMTF/Redfish-Service-Validator.git) |
| anytime they make a change to the GET behavior of the redfish tree. The test |
| must run on real hardware since the resource tree will be more complete. |
| |
| ```bash |
| $ git clone https://github.com/DMTF/Redfish-Service-Validator.git |
| |
| # run validator and inspect the report for failures |
| $ python3 RedfishServiceValidator.py \ |
| --auth Session -i https://1.2.3.4:443 \ |
| -u root -p 0penBmc |
| ``` |
| |
| Your change should not introduce any new validator errors. Please include |
| something to the effect of "Redfish service validator passing" in your commit |
| message. |
| |
| ### Error Status |
| |
| Test error status for your newly added resources or core codes, e.g., 4xx client |
| errors, 5xx server errors. |