Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Add tests for KubeAPIVersion * Legibility improvements for KubevirtVM tests * Create units.utils.kubevirt with common stuff * Add some VMIRS unit tests
- Loading branch information
1 parent
cf528c5
commit 0629256
Showing
4 changed files
with
153 additions
and
76 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,40 @@ | ||
import pytest | ||
|
||
openshiftdynamic = pytest.importorskip("openshift.dynamic") | ||
|
||
from units.modules.utils import set_module_args | ||
from units.utils.kubevirt_fixtures import base_fixture, RESOURCE_DEFAULT_ARGS, AnsibleExitJson | ||
|
||
from ansible.module_utils.k8s.raw import KubernetesRawModule | ||
from ansible.module_utils.kubevirt import KubeVirtRawModule | ||
from ansible.modules.cloud.kubevirt import kubevirt_rs as mymodule | ||
|
||
KIND = 'VirtualMachineInstanceReplicaSet' | ||
|
||
|
||
@pytest.mark.usefixtures("base_fixture") | ||
@pytest.mark.parametrize("_replicas, _changed", ((1, True), | ||
(3, True), | ||
(2, False), | ||
(5, True),)) | ||
def test_scale_rs_nowait(_replicas, _changed): | ||
_name = 'test-rs' | ||
# Desired state: | ||
args = dict(name=_name, namespace='vms', replicas=_replicas, wait=False) | ||
set_module_args(args) | ||
|
||
# Mock pre-change state: | ||
resource_args = dict(kind=KIND, **RESOURCE_DEFAULT_ARGS) | ||
mymodule.KubeVirtVMIRS.find_supported_resource.return_value = openshiftdynamic.Resource(**resource_args) | ||
res_inst = openshiftdynamic.ResourceInstance('', dict(kind=KIND, metadata={'name': _name}, spec={'replicas': 2})) | ||
openshiftdynamic.Resource.get.return_value = res_inst | ||
openshiftdynamic.Resource.search.return_value = [res_inst] | ||
KubernetesRawModule.patch_resource.return_value = dict(kind=KIND, metadata={'name': _name}, | ||
spec={'replicas': _replicas}), None | ||
|
||
# Run code: | ||
with pytest.raises(AnsibleExitJson) as result: | ||
mymodule.KubeVirtVMIRS().execute_module() | ||
|
||
# Verify result: | ||
assert result.value['changed'] == _changed |
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,68 @@ | ||
import json | ||
import pytest | ||
|
||
from units.compat.mock import MagicMock | ||
|
||
from ansible.module_utils.k8s.common import K8sAnsibleMixin | ||
from ansible.module_utils.k8s.raw import KubernetesRawModule | ||
from ansible.module_utils.kubevirt import KubeVirtRawModule | ||
|
||
import openshift.dynamic | ||
|
||
RESOURCE_DEFAULT_ARGS = {'api_version': 'v1alpha3', 'group': 'kubevirt.io', | ||
'prefix': 'apis', 'namespaced': True} | ||
|
||
|
||
class AnsibleExitJson(Exception): | ||
"""Exception class to be raised by module.exit_json and caught | ||
by the test case""" | ||
def __init__(self, **kwargs): | ||
for k in kwargs: | ||
setattr(self, k, kwargs[k]) | ||
|
||
def __getitem__(self, attr): | ||
return getattr(self, attr) | ||
|
||
|
||
class AnsibleFailJson(Exception): | ||
"""Exception class to be raised by module.fail_json and caught | ||
by the test case""" | ||
def __init__(self, **kwargs): | ||
for k in kwargs: | ||
setattr(self, k, kwargs[k]) | ||
|
||
def __getitem__(self, attr): | ||
return getattr(self, attr) | ||
|
||
|
||
def exit_json(*args, **kwargs): | ||
if 'changed' not in kwargs: | ||
kwargs['changed'] = False | ||
raise AnsibleExitJson(**kwargs) | ||
|
||
|
||
def fail_json(*args, **kwargs): | ||
raise AnsibleFailJson(**kwargs) | ||
|
||
|
||
@pytest.fixture() | ||
def base_fixture(monkeypatch): | ||
monkeypatch.setattr( | ||
KubernetesRawModule, "exit_json", exit_json) | ||
monkeypatch.setattr( | ||
KubernetesRawModule, "fail_json", fail_json) | ||
# Create mock methods in Resource directly, otherwise dyn client | ||
# tries binding those to corresponding methods in DynamicClient | ||
# (with partial()), which is more problematic to intercept | ||
openshift.dynamic.Resource.get = MagicMock() | ||
openshift.dynamic.Resource.create = MagicMock() | ||
openshift.dynamic.Resource.delete = MagicMock() | ||
openshift.dynamic.Resource.patch = MagicMock() | ||
openshift.dynamic.Resource.search = MagicMock() | ||
# Globally mock some methods, since all tests will use this | ||
KubernetesRawModule.patch_resource = MagicMock() | ||
KubernetesRawModule.patch_resource.return_value = ({}, None) | ||
K8sAnsibleMixin.get_api_client = MagicMock() | ||
K8sAnsibleMixin.get_api_client.return_value = None | ||
K8sAnsibleMixin.find_resource = MagicMock() | ||
KubeVirtRawModule.find_supported_resource = MagicMock() |