generated from canonical/is-charms-template-repo
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
rework unit test to use pytest, add apt package install tests
- Loading branch information
1 parent
2ff9a8c
commit 95d2560
Showing
4 changed files
with
114 additions
and
57 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
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,19 @@ | ||
# Copyright 2024 Canonical Ltd. | ||
# See LICENSE file for licensing details. | ||
"""Fixtures for jenkins-agent charm tests.""" | ||
|
||
|
||
import pytest | ||
from ops.testing import Harness | ||
|
||
from charm import JenkinsAgentCharm | ||
|
||
|
||
@pytest.fixture(scope="function", name="harness") | ||
def harness_fixture(): | ||
"""Enable ops test framework harness.""" | ||
harness = Harness(JenkinsAgentCharm) | ||
|
||
yield harness | ||
|
||
harness.cleanup() |
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
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,40 @@ | ||
# Copyright 2024 Canonical Ltd. | ||
# See LICENSE file for licensing details. | ||
"""Test for service interaction.""" | ||
# pylint: disable=protected-access | ||
from unittest.mock import MagicMock | ||
|
||
import ops.testing | ||
import pytest | ||
from charms.operator_libs_linux.v0 import apt | ||
|
||
from charm import JenkinsAgentCharm | ||
|
||
|
||
@pytest.mark.parametrize( | ||
"f,error_thrown", | ||
[ | ||
("import_key", apt.GPGKeyError), | ||
("add_package", apt.PackageError), | ||
("add_package", apt.PackageNotFoundError), | ||
], | ||
) | ||
def test_install_apt_package_gpg_key_error( | ||
harness: ops.testing.Harness, monkeypatch: pytest.MonkeyPatch, f, error_thrown | ||
): | ||
""" | ||
arrange: Harness with mocked apt module. | ||
act: run _on_install hook with methods raising different errors. | ||
assert: The charm should be in an error state. | ||
""" | ||
harness.begin() | ||
charm: JenkinsAgentCharm = harness.charm | ||
monkeypatch.setattr(apt, "RepositoryMapping", MagicMock()) | ||
monkeypatch.setattr(apt, "import_key", MagicMock()) | ||
monkeypatch.setattr(apt, "update", MagicMock()) | ||
monkeypatch.setattr(apt, "add_package", MagicMock()) | ||
|
||
monkeypatch.setattr(apt, f, MagicMock(side_effect=[error_thrown])) | ||
|
||
with pytest.raises(RuntimeError, match="Error installing the agent service"): | ||
charm._on_install(MagicMock(spec=ops.InstallEvent)) |