The way that LogObjectManager transfers LogObjects to the new manager when logging is reconfigured is prone to crashes since the previous object manager can be used after the objects have been transferred out of it. The solution to this is to persist the objects in the manager for the whole of the manager's lifetime. This require adding reference counting so that multiple managers can safely share ownership of the same objects. Added a TSQA test to exercise this code path. Plugged a LogFormat leak when creating new TextLogObjects.
Add a new example plugin to demonstrate the use of TSHttpTxnServerIntercept to proxy origin requests to a secondary server. Document TSHttpTxnServerIntercept, and update surrounding documentation that references it. Add a new test, test-server-intercept, that combines the example plugin and jtest to do an end-to-end test of the intercept API.
Fix traffic_line -r by passing the correct record name. Fix traffic_line -m by initializing the record element before fetching it. In this case the response string value can be missing if it is NULL. Add an integration test (this currently fails because proxy.config.cache.ram_cache.use_seen_filter is not defined correctly).
Add the test-multicert-loading integration test to verify that SSL certificate loading does not delay the proxy coming up and serving traffic.
We always build the test tools, but for QA automation, it is useful to install them as well. Add a --enable-test-tools build option that installs the jtest and http_load tools.
Add the --enable--example-plugins build option to build example plugins. The naming of this option follows the precedent of the --enable-experimental-plugins option. The example plugins are always built, but this option will also cause them to be installed, which makes them easier to test.
Various fixes the the tsqa harness to improve output legibility. Crank up the configuration sync frequency so that we don't need to wait so long for configuration changes. Add a new integration test to ensure that SSL certificate matching works correctly for wildcards, SNI names, IP addresses and address/port combinations. Still missing is the default match; for that I need a portable way to determine a local IP address.