The Ubuntu Advantage client provides users with a simple mechanism to view, enable, and disable offerings from Canonical on their system. The following entitlements are supported:
- Common Criteria EAL2 certification artifacts provisioning
- Canonical CIS Benchmark Audit Tool
- Ubuntu Extended Security Maintenance
- FIPS 140-2 Certified Modules
- FIPS 140-2 Non-Certified Module Updates
- Livepatch Service
The client comes pre-installed on all Ubuntu systems. Users can run the
ua
command to learn more or view the manpage.
All unit and lint tests are run using tox:
tox
The client also includes built-in dep8 tests. These are run as follows:
autopkgtest -U --shell-fail . -- lxd ubuntu:xenial
ubuntu-advantage-client uses behave for its integration testing.
The integration test definitions are stored in the features/
directory and consist of two parts: .feature
files that define the
tests we want to run, and .py
files which implement the underlying
logic for those tests.
To run the tests, you can use tox
:
tox -e behave
or, if you just want to run a specific file, or a test within a file:
tox -e behave features/unattached_commands.feature
tox -e behave features/unattached_commands.feature:55
(If you're getting started with behave, we recommend at least reading through the behave tutorial to get an idea of how it works, and how tests are written.)
To make running the tests repeatedly less time-intensive, our behave
testing setup has support for reusing images between runs via two
configuration options (provided in environment variables),
UACLIENT_BEHAVE_IMAGE_CLEAN
and UACLIENT_BEHAVE_REUSE_IMAGE
.
To avoid the test framework cleaning up the image it creates, you can run it like this:
UACLIENT_BEHAVE_IMAGE_CLEAN=0 tox -e behave
which will emit a line like this above the test summary:
Image cleanup disabled, not deleting: behave-image-1572443113978755
You can then reuse that image by plugging its name into your next test run, like so:
UACLIENT_BEHAVE_REUSE_IMAGE=behave-image-1572443113978755 tox -e behave
If you've done this correctly, you should see something like
reuse_image = behave-image-1572443113978755
in the "Config options"
output, and test execution should start immediately (without the usual
image build step).
(Note that this handling is specific to our behave tests as it's
performed in features/environment.py
, so don't expect to find
documentation about it outside of this codebase.)
The packaging for the UA client package (ubuntu-advantage-tools) is in-tree, so you can build the package the way you would normally build a Debian package:
dpkg-buildpackage
or, if you want to build for a target release other than the release you're on, configure sbuild and use that for the build:
debuild -S
sbuild --dist=<target> ../ubuntu-advantage-tools_*.dsc
The ubuntu-advantage-client
code base is formatted using
black. When making changes, you should
ensure that your code is blackened, or it will be rejected by CI.
Formatting the whole codebase is as simple as running:
black uaclient/
To make it easier to avoid committing incorrectly formatted code, this
repo includes configuration for pre-commit
which will stop you from committing any code that isn't blackened. To
install the project's pre-commit hook, install pre-commit
and run:
pre-commit install
(To install black
and pre-commit
at the appropriate versions for
the project, you should install them via dev-requirements.txt
.)
On Launchpad, there is a daily build recipe, which will build the client and place it in the ua-client-daily PPA.
Users can demo the client with a local backend. This can be done with the following:
# Set up ua-contracts in a docker container in a bionic lxc on port 3000
make demo
# Set up two clients pointing at the local contract server
./demo/run-uaclient --series disco
./demo/run-uaclient --series xenial -b multipass