Commit graph

227 commits

Author SHA1 Message Date
Christian Kellner
d4f0b169a0 composer: update to master/8ccbde8
This is right when PR-952 landed, which is what we are updating
from. This will use SSL certification and also re-enable auto
kerberos authorization via config files for composer.
2020-09-17 10:48:37 +02:00
Christian Kellner
a660b39e00 test/integration: use copy-cred.sh
Instead of manually copying credentials around, use the new
copy-creds.sh script. Also don't manually initialize kerberos,
because that is now done automatically by the worker and the
builder.
2020-09-17 10:48:37 +02:00
Christian Kellner
c782f7f350 test/integration: make composer certificates
Use test/make-certs.sh to generate osbuild composer ssl/tls certs.
2020-09-17 10:48:37 +02:00
Christian Kellner
660713a39b container/builder: configure ssl for plugin
Configure the ssl/tls cert verification. Use make-certs.sh and
copy-creds.sh from test/ to put all the ducks in the row for
this to work.
2020-09-17 10:48:37 +02:00
Christian Kellner
2fed0b7c5b test: add copy-creds.sh to copy credentials
This script is intended to be called between "run-koji-container"
and "run-builder". It will copy the kerberos keytabs out of the
temporary directory generated by "run-koji-container" as well as
copying the SSL/TLS certificates from host to the share dir so
that the plugin ca use it to authenticate itself to composer.
2020-09-17 10:48:37 +02:00
Christian Kellner
481243e628 test: add make-certs script to generate SSL certs
This will create the a certificate authority (CA) and then create
a cert for composer and another one for the worker. The worker
one can also be used by the koji plugin.
The configuration file is needed to get subjectAltName working.
2020-09-17 10:48:37 +02:00
Christian Kellner
db82105eb0 plugin/builder: TLS/SSL support (client side certs)
Add support for client side certificates via a new configuration
option: "ssl_cert", which should be a path to the certificate or
a comma separated list of paths to certificates.
Additionally, the "ssl_verify" option controls how the server
certificate is validated. This can either be a boolean ("True",
"False") or a path to a CA file.
NB: The url for the composer host must contain "https" for the
ssl/tls engine to kick in.

When used as a stand-alone koji API client, two new command
line options are provided, --cert and --ca. See their help
text for a description.
2020-09-17 10:48:37 +02:00
Christian Kellner
790462e967 plugin/builder: sync status enum with upstream
Align our status enums with the one from upstream, i.e. composer's
koji API openAPI spec as of commit 8ccbde8.
2020-09-17 10:48:37 +02:00
Christian Kellner
6b4632385a test/hub: validate the jsonschema
Validate the json schema used to validate the input arguments. So
much validation!
2020-09-17 10:48:37 +02:00
Christian Kellner
d0d167d2f8 plugin/hub: fix typo
It is schema, not schmea. That is not even a word.
2020-09-17 10:48:37 +02:00
Christian Kellner
2f5bea53f0 test: move kerberos cfg for LOCAL to test/data
This is a test specific configuration file that should not be at
the top level directory. Move it to a new test/data directory.
2020-09-17 10:48:37 +02:00
Christian Kellner
9a21c00f81 test/builder: use composer url from the plugin
Use the new DEFAULT_COMPOSER_URL constant from the plugin. This
will follow changes to e.g. SSL automatically now.
2020-09-17 10:48:37 +02:00
Christian Kellner
d4b5cae604 plugin/builder: global constants for default urls
Use a global constant for the composer and kojib hub URLs instead
of defining them in the source twice.
2020-09-17 10:48:37 +02:00
Christian Kellner
1ee0d80538 run-tests: also lint the plugins
Use pylint also for the plugins not only the tests.
2020-09-15 18:59:03 +02:00
Christian Kellner
a0c562e5c6 fixup! plugin/builder: use requests python package 2020-09-15 18:59:03 +02:00
Christian Kellner
e1edb12d11 test/builder: check a successful compose
Use the standard session and options mock object together with the
new composer mock object to simulate a successful compose:
the mock composer will accept the request and also status calls
for it, which will immediately return with success. The plugin
should then return and indicate a successful compose.
2020-09-15 18:59:03 +02:00
Christian Kellner
31885efab8 test/builder: mock composer, check a bad request
Use httpretty to mock composer responses. Create a helper method
to configure a session object that should result in a valid
compose request. Simulate a bad request by asking for an arch
that the mock composer will refuse and check the correct exception
is thrown in the builder plugin.
2020-09-15 18:59:03 +02:00
Christian Kellner
569d53c2d9 plugin/builder: use requests python package
Use the requests python package, which is more convenient to use,
and also supports sessions, where global options, like TLS certs
can be set.
Adapt the container and the spec file to install and require
the python package.
2020-09-15 18:59:03 +02:00
Christian Kellner
94d0a5f57a test: add httpretty & requests to test container
Add the requests and httpretty packages to the test environment.
The former will be used in the builder plugin and the latter for
mocking http requests.
2020-09-15 18:07:25 +02:00
Christian Kellner
385d51b2ba ci: send coverage data to codecov.io
Now that we have coverage data, send it to codecov.io, the service
already used by osbuild-composer, for visualization.
2020-09-14 17:37:35 +02:00
Christian Kellner
edb05b1683 ci: use pytest and generate coverage data
Instead of the standard unit tests module use pytest and generate
coverage data in XML form, later to be used with another service.
2020-09-14 17:37:35 +02:00
Christian Kellner
ed4e8795e5 gitignore: ignore coverage files
The intermediate as well as the output.
2020-09-14 17:37:35 +02:00
Christian Kellner
e5f563c9a1 run-tests: use pytest and generate coverage report
Use the more powerful pytest framework together with pytest-cov
to generate coverage support.
2020-09-14 17:37:35 +02:00
Christian Kellner
0efe8941c6 test/cli: check a normal invocation
Check a normal, i.e. successful, invocation and ensure relevant
functions are called with the right parameters.
2020-09-14 17:37:35 +02:00
Christian Kellner
0af2d958e3 test: add pytest to test env container
Add pytest and coverage support for it to the koji test environment
container.
2020-09-14 17:02:39 +02:00
Christian Kellner
b92e19aa1d test/cli: add unit test skeleton
Add the skeleton to run the cli plugin unit tests. As first check
ensure that exceptions are thrown for the build target checks.
2020-09-14 13:06:52 +01:00
Christian Kellner
9e98f10afc test/unit: extract common code
Create a new plugintest.PluginTest class that shares the plugin
loading code that is common to all plugin testing. Adapt the
existing (hub, builder) tests.
Also correct the name for test_builder.TestHubPlugin to
TestBuilderPlugin.
2020-09-14 13:06:52 +01:00
Christian Kellner
d8107f2347 test/builder: add unit test skeleton
Add the skeleton to run builder plugin unit tests and check that
exceptions are throw for unknown build target and unsupported
architectures.
2020-09-14 10:00:56 +02:00
Christian Kellner
c39f1d6d59 plugin/builder: properly raise exceptions
In two cases the exception was merely instantiated but not
actually thrown.
2020-09-14 10:00:56 +02:00
Christian Kellner
8b9143aae9 ci: run unit tests
Use the koji test environment container to run the unit tests.
2020-09-13 13:20:19 +02:00
Christian Kellner
7568437437 test/hub: simple input validation check
Check that an exception of `koji.ParameterError` gets raised for
invalid input.
2020-09-13 13:20:19 +02:00
Christian Kellner
5ba7028340 plugin/hub: raise ParameterError for invalid input
Convert the jsonschema.exceptions.ValidationError into the more
appropriate koji.ParameterError.
2020-09-13 13:20:19 +02:00
Christian Kellner
51f55998da run-test.sh: simple script to execute unit tests
Builds the test environment container and executes unit tests in
it.
2020-09-13 13:20:19 +02:00
Christian Kellner
272d7591ef test: add koji hub plugin unit test skeleton
Load the module, mock session and kojihub, check basic calling
osbuildImage will result in `kojihub.make_task` with the right
parameters.
2020-09-13 13:20:19 +02:00
Christian Kellner
5e074e83b9 gitignore: ignore __pycache__
Should never end up in git.
2020-09-13 13:20:19 +02:00
Christian Kellner
6d0a298492 ci: run pylint on the source
Use the new github action to run pylint on all the source code.
2020-09-12 17:22:51 +02:00
Christian Kellner
734d039089 test: add github test environment action
Create a github action that accepts any command with args and runs
it in a container that is prepared with all the dependencies for
koji (hub, builder, command line), so all tests, like pylint or
unit tests can run in it.
2020-09-12 16:00:54 +02:00
Christian Kellner
0180bce383 test: use python based integration test
Instead of creating a compose from integration.sh, use the new
python based integration tests. The integration.sh script will
this just setup the environment and the actual tests are all
found in test/integration/
2020-09-11 23:18:04 +01:00
Christian Kellner
6fbdcf505f test: add unknown tag check test
Test that we fail a compose for an unknown tag.
2020-09-11 23:18:04 +01:00
Christian Kellner
3908e5f568 test: add python based compose test 2020-09-11 23:18:04 +01:00
Christian Kellner
fa1561a9b4 pylintrc: copied from osbuilid
Only modification is the removal of an osbuild specific type
check exception.
2020-09-11 23:18:04 +01:00
Christian Kellner
0bf3c47113 plugin/hub: clean up imports
Remove an unused import and sort the imports properly.
Also silence the for the kojihub import.
2020-09-11 23:18:04 +01:00
Christian Kellner
899c2233c7 plugin/cli: silence pylint warning
We use `_running_in_bg` for now, as other plugins do. Silence the
warning for that.
2020-09-11 23:18:04 +01:00
Christian Kellner
01cf643516 plugin/cli: return a value in all code paths
Be consistent in all code paths.
2020-09-11 23:18:04 +01:00
Christian Kellner
4eeb998a60 plugin/cli: provide a bit documentation
Better describe the plugin in the file level doc-string.
2020-09-11 23:18:04 +01:00
Christian Kellner
e3ce5f7c7b plugin/builder: silence some pylint warnings
The 'koji' parameter for the compose request is called that way to
follow the OpenAPI spec, so silence the "redefined-outer-name"
warning.

The handler function needs have the actual task arguments and thus
on purpose deviates from the argument list of the base class'
handler method. So silence that.
2020-09-11 23:18:04 +01:00
Christian Kellner
6f1d685d9b plugin/builder: move argparse into main
The argparse import is only needed when the plugin is used as a
stand alone composer koji API client, therefore only include it
in main().
2020-09-11 23:18:04 +01:00
Christian Kellner
f7794daa13 plugin/builder: fix indent in cmd line arguments 2020-09-11 23:18:04 +01:00
Christian Kellner
1715558c8f plugin/builder: add more documentation
Describe the plugin itself and how it can be used as a stand-alone
executable.
2020-09-11 23:18:04 +01:00
Christian Kellner
20831a99bb plugin/builder: fix BuildError msg to include name
Fix the error message string to be a proper f-string in the
OSBuildImage.arches_for_config method, so it actually includes
the name of the tag.
2020-09-11 23:18:04 +01:00