use multiple test targets

https://gerrit.openbmc.org/c/openbmc/bmcweb/+/57648/8 is unfortunately
rejected by some CI issues where # lines covered by unit test is not
consistent.

Thus, this commit is written to bypass subdir, but still addes the
ability to run a test for a specific component. This speeds up iteration
when developers are working on a subset of the project.

For example, we can compile and run the query_param_test separately. The
speed up will be more obvious when we have better solution to deal with
the current headers and inline functions in the future.

```
meson test query_param_test -C b
ninja: Entering directory `/usr/local/google/home/nanzhou/Desktop/bmcweb/b'
ninja: no work to do.
1/1 query_param_test        OK              0.01s

Ok:                 1
Expected Fail:      0
Fail:               0
Unexpected Pass:    0
Skipped:            0
Timeout:            0
```

The compile time increases a little bit. This doesn't matter too much
given tests are disabled in Yocto builds.

```
[hi on] nanzhou@nanzhou:~/Desktop/bmcweb$ time ninja test -C b
ninja: Entering directory `b'
[49/50] Running all tests.
1/1 bmcweb_unit_test        OK              0.07s


Ok:                 1
Expected Fail:      0
Fail:               0
Unexpected Pass:    0
Skipped:            0
Timeout:            0

Full log written to /usr/local/google/home/nanzhou/Desktop/bmcweb/b/meson-logs/testlog.txt

real    1m56.361s
user    12m11.587s
sys     1m15.924s


[hi on] nanzhou@nanzhou:~/Desktop/bmcweb$ time ninja test -C b
ninja: Entering directory `b'
[247/248] Running all tests.
 1/23 crow_getroutes_test              OK              0.34s
 2/23 router_test                      OK              0.31s
 3/23 utility_test                     OK              0.29s
 4/23 dbus_utility_test                OK              0.28s
 5/23 google_service_root_test         OK              0.27s
 6/23 http_utility_test                OK              0.26s
 7/23 human_sort_test                  OK              0.24s
 8/23 multipart_test                   OK              0.21s
 9/23 openbmc_dbus_rest_test           OK              0.20s
10/23 privileges_test                  OK              0.18s
11/23 registries_test                  OK              0.17s
12/23 hex_utils_test                   OK              0.16s
13/23 ip_utils_test                    OK              0.15s
14/23 json_utils_test                  OK              0.15s
15/23 query_param_test                 OK              0.13s
16/23 stl_utils_test                   OK              0.12s
17/23 chassis_test                     OK              0.10s
18/23 service_root_test                OK              0.04s
19/23 thermal_subsystem_test           OK              0.03s
20/23 configfile_test                  OK              0.23s
21/23 lock_test                        OK              0.22s
22/23 time_utils_test                  OK              0.11s
23/23 log_services_dump_test           OK              0.07s


Ok:                 23
Expected Fail:      0
Fail:               0
Unexpected Pass:    0
Skipped:            0
Timeout:            0

Full log written to /usr/local/google/home/nanzhou/Desktop/bmcweb/b/meson-logs/testlog.txt

real    2m8.792s
user    29m15.844s
sys     3m10.264s
```


Signed-off-by: Nan Zhou <nanzhoumails@gmail.com>
Change-Id: I6f763173c1e7de96ab757673fb5ed0a73e4532f5
1 file changed
tree: 56cf1d6b7b9c5e99bf783282e30a05f38f2ae3d1
  1. .github/
  2. config/
  3. http/
  4. include/
  5. redfish-core/
  6. scripts/
  7. src/
  8. static/
  9. subprojects/
  10. test/
  11. .clang-format
  12. .clang-ignore
  13. .clang-tidy
  14. .dockerignore
  15. .gitignore
  16. .openbmc-enforce-gitlint
  17. .shellcheck
  18. CLIENTS.md
  19. COMMON_ERRORS.md
  20. DBUS_USAGE.md
  21. DEVELOPING.md
  22. HEADERS.md
  23. LICENSE
  24. meson.build
  25. meson_options.txt
  26. OEM_SCHEMAS.md
  27. OWNERS
  28. README.md
  29. Redfish.md
  30. run-ci
  31. setup.cfg
  32. TESTING.md
README.md

OpenBMC webserver

This component attempts to be a "do everything" embedded webserver for OpenBMC.

Features

The webserver implements a few distinct interfaces:

  • DBus event websocket. Allows registering on changes to specific dbus paths, properties, and will send an event from the websocket if those filters match.
  • OpenBMC DBus REST api. Allows direct, low interference, high fidelity access to dbus and the objects it represents.
  • Serial: A serial websocket for interacting with the host serial console through websockets.
  • Redfish: A protocol compliant, (Redfish.md)[DBus to Redfish translator].
  • KVM: A websocket based implementation of the RFB (VNC) frame buffer protocol intended to mate to webui-vue to provide a complete KVM implementation.

Protocols

bmcweb at a protocol level supports http and https. TLS is supported through OpenSSL.

AuthX

Authentication

Bmcweb supports multiple authentication protocols:

  • Basic authentication per RFC7617
  • Cookie based authentication for authenticating against webui-vue
  • Mutual TLS authentication based on OpenSSL
  • Session authentication through webui-vue
  • XToken based authentication conformant to Redfish DSP0266

Each of these types of authentication is able to be enabled or disabled both via runtime policy changes (through the relevant Redfish APIs) or via configure time options. All authentication mechanisms supporting username/password are routed to libpam, to allow for customization in authentication implementations.

Authorization

All authorization in bmcweb is determined at routing time, and per route, and conform to the Redfish PrivilegeRegistry.

*Note: Non-Redfish functions are mapped to the closest equivalent Redfish privilege level.

Configuration

bmcweb is configured per the meson build files. Available options are documented in meson_options.txt

Compile bmcweb with default options:

meson builddir
ninja -C builddir

If any of the dependencies are not found on the host system during configuration, meson will automatically download them via its wrap dependencies mentioned in bmcweb/subprojects.

Debug logging

bmcweb by default is compiled with runtime logging disabled, as a performance consideration. To enable it in a standalone build, add the

-Dlogging='enabled'

option to your configure flags. If building within Yocto, add the following to your local.conf.

EXTRA_OEMESON:pn-bmcweb:append = "-Dbmcweb-logging='enabled'"

Use of persistent data

bmcweb relies on some on-system data for storage of persistent data that is internal to the process. Details on the exact data stored and when it is read/written can seen from the persistent_data namespace.

TLS certificate generation

When SSL support is enabled and a usable certificate is not found, bmcweb will generate a self-signed a certificate before launching the server. Please see the bmcweb source code for details on the parameters this certificate is built with.