-
Notifications
You must be signed in to change notification settings - Fork 120
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Card ID: CCT-731 - integration tests for DBus Register method"
- Loading branch information
Showing
11 changed files
with
465 additions
and
29 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,146 @@ | ||
# Integration Test for subscription-manager | ||
|
||
There are integration tests for all parts of subscription-manager | ||
in this directory. | ||
|
||
DBus tests are presented currently - they verify DBus api of *rhsm.service* | ||
see [DBus objects](https://www.candlepinproject.org/docs/subscription-manager/dbus_objects.html) | ||
|
||
The tests use pytest ecosystem. | ||
|
||
## Installation | ||
|
||
1) Run local candlepin | ||
|
||
```shell | ||
podman run -d --name canlepin -p 8080:8080 -p 8443:8443 --hostname candlepin.local ghcr.io/ptoscano/candlepin-unofficial:latest | ||
``` | ||
|
||
2) Create additional testing data in candlepin | ||
|
||
Environments for *donaldduck* organization | ||
|
||
``` | ||
curl --stderr /dev/null --insecure --user admin:admin --request POST \ | ||
--data '{"id": "env-id-1", "name": "env-name-1", "description": "Testing environment num. 1"}' \ | ||
--header 'accept: application/json' --header 'content-type: application/json' \ | ||
https://localhost:8443/candlepin/owners/donaldduck/environments | ||
curl --stderr /dev/null --insecure --user admin:admin --request POST \ | ||
--data '{"id": "env-id-2", "name": "env-name-2", "description": "Testing environment num. 2"}' \ | ||
--header 'accept: application/json' --header 'content-type: application/json' \ | ||
https://localhost:8443/candlepin/owners/donaldduck/environments | ||
``` | ||
|
||
> citation from 'man subscription-manager' | ||
> With on-premise subscription services, such as Subscription Asset | ||
> Manager, the infrastructure is more complex. The local | ||
> administrator can define independent groups called organizations | ||
> which represent physical or organizational divisions (--org). | ||
> Those organizations can be subdivided into environments. | ||
Activation keys for *donaldduck* organization | ||
|
||
> The tests use already installed test activation keys | ||
> They are: | ||
> - *default_key* | ||
> - *awesome_os_pool" | ||
## Configuration | ||
|
||
Tests use [Dynaconf](https://www.dynaconf.com/) to load config | ||
values. | ||
|
||
They are stored in a file in this directory *settings.toml* | ||
|
||
Config values for _testing_ environment | ||
|
||
```yaml | ||
[testing] | ||
candlepin.host = "localhost" | ||
candlepin.port = 8443 | ||
candlepin.insecure = true | ||
candlepin.prefix = "/candlepin" | ||
candlepin.username = "duey" | ||
candlepin.password = "password" | ||
candlepin.org = "donaldduck" | ||
candlepin.activation_keys = ["default_key","awesome_os_pool"] | ||
candlepin.environment.names = ["env-name-01","env-name-02"] | ||
candlepin.environment.ids = ["env-id-01","env-id-02"] | ||
|
||
insights.legacy_upload = false | ||
console.host = "cert.console.redhat.com" | ||
|
||
auth_proxy.host = | ||
auth_proxy.port = 3127 | ||
auth_proxy.username = "redhat" | ||
auth_proxy.password = "redhat" | ||
|
||
noauth_proxy.host = | ||
noauth_proxy.port = 3129 | ||
|
||
insights.hbi_host = "cert.console.redhat.com" | ||
``` | ||
|
||
Configuration for pytest | ||
|
||
> There is a file *pytest.ini* in the main directory of this repo. | ||
> It has nothing to do with integration-tests. It is a confiuration | ||
> for unittests. | ||
*integration-tests/pytest.ini* | ||
|
||
```ini | ||
[pytest] | ||
addopts = "-srxv --capture=sys" | ||
testpaths = "./" | ||
log_cli = true | ||
log_level = INFO | ||
``` | ||
|
||
## Python virtual environment for testing | ||
|
||
It is good practice to use python virtual environment to run the | ||
tests. All required packages for pytest are stored in | ||
*requirements.txt*. | ||
|
||
> There is a file *requirements.txt* in the main directory of the | ||
> repo. It is used by unittests. I has nothing to do with | ||
> integration-tests at all. | ||
```shell | ||
cd integration-tests | ||
python3 -mvenv venv | ||
source venv | ||
pip install -r requirements.txt | ||
deactivate | ||
``` | ||
|
||
## Running the tests | ||
|
||
```shell | ||
cd integration-tests | ||
source venv | ||
pytest | ||
deativate | ||
``` | ||
|
||
> There is a nice help for pytest in [Testing](../TESTING.md). It is | ||
> full of interesting hits to run just a few tests, to increase output | ||
> of a test run ... | ||
### Runnning integration tests using tmt | ||
|
||
You can use [Testing Farm](https://docs.testing-farm.io/Testing%20Farm/0.1/index.html) | ||
to run the tests. | ||
|
||
It suposes that the package *subscription-manager* is installed at a local box. | ||
|
||
```shell | ||
cd subscription-manager | ||
sudo tmt --feeling-safe run -vvv --all provision --how local | ||
``` | ||
|
||
> All details for tmt to run are stored at directory *systemtest* | ||
> It is a starting point for deeper investigation to understand how | ||
> the tests are run using tmt. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
import logging | ||
import os | ||
|
||
from dasbus.connection import MessageBus | ||
from gi.repository import Gio | ||
|
||
import gi | ||
|
||
gi.require_version("Gio", "2.0") | ||
|
||
logger = logging.getLogger(__name__) | ||
|
||
|
||
class RHSMPrivateBus(MessageBus): | ||
"""Representation of RHSM private bus connection that can be used as a context manager.""" | ||
|
||
def __init__(self, rhsm_register_server_proxy, *args, **kwargs): | ||
"""Representation of RHSM private bus connection that can be used as a context manager. | ||
:param rhsm_register_server_proxy: DBus proxy for the RHSM RegisterServer object | ||
""" | ||
super().__init__(*args, **kwargs) | ||
self._rhsm_register_server_proxy = rhsm_register_server_proxy | ||
self._private_bus_address = None | ||
|
||
def __enter__(self): | ||
logger.debug("subscription: starting RHSM private DBus session") | ||
locale = os.environ.get("LANG", "") | ||
self._private_bus_address = self._rhsm_register_server_proxy.Start(locale) | ||
logger.debug("subscription: RHSM private DBus session has been started") | ||
return self | ||
|
||
def __exit__(self, _exc_type, _exc_value, _exc_traceback): | ||
logger.debug("subscription: shutting down the RHSM private DBus session") | ||
self.disconnect() | ||
locale = os.environ.get("LANG", "") | ||
self._rhsm_register_server_proxy.Stop(locale) | ||
logger.debug("subscription: RHSM private DBus session has been shutdown") | ||
|
||
def _get_connection(self): | ||
"""Get a connection to RHSM private DBus session.""" | ||
# the RHSM private bus address is potentially sensitive | ||
# so we will not log it | ||
logger.info("Connecting to the RHSM private DBus session.") | ||
return self._provider.get_addressed_bus_connection( | ||
bus_address=self._private_bus_address, flags=Gio.DBusConnectionFlags.AUTHENTICATION_CLIENT | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
from dasbus.identifier import DBusObjectIdentifier, DBusServiceIdentifier | ||
from dasbus.connection import SystemMessageBus | ||
|
||
|
||
HOST_DETAILS: str = "/var/lib/insights/host-details.json" | ||
MACHINE_ID_FILE: str = "/etc/insights-client/machine-id" | ||
RHSM_CONFIG_FILE_PATH: str = "/etc/rhsm/rhsm.conf" | ||
|
||
RHSM_NAMESPACE = ("com", "redhat", "RHSM1") | ||
|
||
RHSM = DBusServiceIdentifier(namespace=RHSM_NAMESPACE, message_bus=SystemMessageBus()) | ||
|
||
RHSM_CONFIG = DBusObjectIdentifier(namespace=RHSM_NAMESPACE, basename="Config") | ||
|
||
RHSM_REGISTER_SERVER = DBusObjectIdentifier(namespace=RHSM_NAMESPACE, basename="RegisterServer") | ||
|
||
RHSM_REGISTER = DBusObjectIdentifier(namespace=RHSM_NAMESPACE, basename="Register") | ||
|
||
RHSM_UNREGISTER = DBusObjectIdentifier(namespace=RHSM_NAMESPACE, basename="Unregister") | ||
|
||
RHSM_ENTITLEMENT = DBusObjectIdentifier(namespace=RHSM_NAMESPACE, basename="Entitlement") | ||
|
||
RHSM_SYSPURPOSE = DBusObjectIdentifier(namespace=RHSM_NAMESPACE, basename="Syspurpose") | ||
|
||
RHSM_CONSUMER = DBusObjectIdentifier(namespace=RHSM_NAMESPACE, basename="Consumer") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
[pytest] | ||
addopts = "-srxv -vvv --capture=sys" | ||
testpaths = "./" | ||
log_cli = true | ||
log_level = DEBUG |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,14 @@ | ||
# the version of black is specified also in the stylish.yml github workflow; | ||
# please update the version there in case it is bumped here | ||
black==24.3.0 | ||
flake8 | ||
git+https://github.com/ptoscano/pytest-client-tools@main | ||
pytest | ||
pyyaml | ||
pytest-randomly | ||
pytest-timeout | ||
simplejson | ||
dasbus | ||
pycairo | ||
PyGObject | ||
sh | ||
iniparse | ||
funcy |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
#!/bin/bash | ||
|
||
USERNAME=admin | ||
PASSWORD=admin | ||
ORG=donaldduck | ||
|
||
|
||
# The script will create two environments for an organization. | ||
# | ||
# citation from 'man subscription-manager': | ||
# | ||
# With on-premise subscription services, such as Subscription Asset Manager, | ||
# the infrastructure is more complex. The local administrator can define | ||
# independent groups called organizations which represent physical | ||
# or organizational divisions (--org). Those organizations can be subdivided | ||
# into environments (--environment). | ||
# | ||
|
||
curl -k --request POST --user ${USERNAME}:${PASSWORD} \ | ||
--data '{"id": "env-id-01", "name": "env-name-01", "description": "Testing environment num. 1"}' \ | ||
--header 'accept: application/json' \ | ||
--header 'content-type: application/json' \ | ||
https://localhost:8443/candlepin/owners/${ORG}/environments | ||
|
||
curl -k --request POST --user ${USERNAME}:${PASSWORD} \ | ||
--data '{"id": "env-id-02", "name": "env-name-02", "description": "Testing environment num. 2"}' \ | ||
--header 'accept: application/json' \ | ||
--header 'content-type: application/json' \ | ||
https://localhost:8443/candlepin/owners/${ORG}/environments | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
#!/bin/bash | ||
# | ||
# A local candlepin is used for most of integration tests. | ||
# It is fast to run the tests and the candlepin comes with testing data. | ||
# So the environment is mostly prepared in the candlepin after we run a contianer. | ||
# | ||
# For most information see https://github.com/ptoscano/candlepin-container-unofficial | ||
# | ||
podman run -d --name candlepin -p 8080:8080 -p 8443:8443 --hostname candlepin.local ghcr.io/ptoscano/candlepin-unofficial:latest |
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.