-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Simplify memory availability check, review tests
- Fix required memory for etcd hosts (10 -> 20 GB), as per documentation. - Some changes to make the code more similar to the similar DiskAvailability check. - Do not raise exception for hosts that do not have a recommended memory value (those are ignored anyway through `is_active`, so that was essentially dead code). - Test that the required memory is the max of the recommended memories for all groups assigned to a host. E.g. if a host is master and node, we should check that it has enough memory to be a master, because the memory requirement for a master is higher than for a node.
- Loading branch information
1 parent
59e781b
commit 2aca8a4
Showing
3 changed files
with
87 additions
and
74 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
105 changes: 56 additions & 49 deletions
105
roles/openshift_health_checker/test/memory_availability_test.py
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,84 +1,91 @@ | ||
import pytest | ||
|
||
from openshift_checks.memory_availability import MemoryAvailability, OpenShiftCheckException | ||
from openshift_checks.memory_availability import MemoryAvailability | ||
|
||
|
||
@pytest.mark.parametrize('group_names,is_containerized,is_active', [ | ||
(['masters'], False, True), | ||
# ensure check is skipped on containerized installs | ||
(['masters'], True, True), | ||
(['nodes'], True, True), | ||
(['etcd'], False, True), | ||
(['masters', 'nodes'], False, True), | ||
(['masters', 'etcd'], False, True), | ||
([], False, False), | ||
(['lb'], False, False), | ||
(['nfs'], False, False), | ||
@pytest.mark.parametrize('group_names,is_active', [ | ||
(['masters'], True), | ||
(['nodes'], True), | ||
(['etcd'], True), | ||
(['masters', 'nodes'], True), | ||
(['masters', 'etcd'], True), | ||
([], False), | ||
(['lb'], False), | ||
(['nfs'], False), | ||
]) | ||
def test_is_active(group_names, is_containerized, is_active): | ||
def test_is_active(group_names, is_active): | ||
task_vars = dict( | ||
group_names=group_names, | ||
openshift=dict(common=dict(is_containerized=is_containerized)), | ||
) | ||
assert MemoryAvailability.is_active(task_vars=task_vars) == is_active | ||
|
||
|
||
@pytest.mark.parametrize("group_name,size_available", [ | ||
@pytest.mark.parametrize('group_names,ansible_memtotal_mb', [ | ||
( | ||
"masters", | ||
['masters'], | ||
17200, | ||
), | ||
( | ||
"nodes", | ||
['nodes'], | ||
8200, | ||
), | ||
( | ||
"etcd", | ||
12200, | ||
['etcd'], | ||
22200, | ||
), | ||
( | ||
['masters', 'nodes'], | ||
17000, | ||
), | ||
]) | ||
def test_mem_check_with_recommended_memtotal(group_name, size_available): | ||
result = MemoryAvailability(execute_module=NotImplementedError).run(tmp=None, task_vars=dict( | ||
group_names=[group_name], | ||
ansible_memtotal_mb=size_available, | ||
)) | ||
def test_succeeds_with_recommended_memory(group_names, ansible_memtotal_mb): | ||
task_vars = dict( | ||
group_names=group_names, | ||
ansible_memtotal_mb=ansible_memtotal_mb, | ||
) | ||
|
||
check = MemoryAvailability(execute_module=fake_execute_module) | ||
result = check.run(tmp=None, task_vars=task_vars) | ||
|
||
assert not result.get('failed', False) | ||
|
||
|
||
@pytest.mark.parametrize("group_name,size_available", [ | ||
@pytest.mark.parametrize('group_names,ansible_memtotal_mb,extra_words', [ | ||
( | ||
"masters", | ||
1, | ||
['masters'], | ||
0, | ||
['0.0 GB'], | ||
), | ||
( | ||
"nodes", | ||
2, | ||
['nodes'], | ||
100, | ||
['0.1 GB'], | ||
), | ||
( | ||
"etcd", | ||
3, | ||
['etcd'], | ||
-1, | ||
['0.0 GB'], | ||
), | ||
( | ||
['nodes', 'masters'], | ||
# enough memory for a node, not enough for a master | ||
11000, | ||
['11.0 GB'], | ||
), | ||
]) | ||
def test_mem_check_with_insufficient_memtotal(group_name, size_available): | ||
result = MemoryAvailability(execute_module=NotImplementedError).run(tmp=None, task_vars=dict( | ||
group_names=[group_name], | ||
ansible_memtotal_mb=size_available, | ||
)) | ||
def test_fails_with_insufficient_memory(group_names, ansible_memtotal_mb, extra_words): | ||
task_vars = dict( | ||
group_names=group_names, | ||
ansible_memtotal_mb=ansible_memtotal_mb, | ||
) | ||
|
||
assert result['failed'] | ||
assert "below recommended storage" in result['msg'] | ||
check = MemoryAvailability(execute_module=fake_execute_module) | ||
result = check.run(tmp=None, task_vars=task_vars) | ||
|
||
assert result['failed'] | ||
for word in 'below recommended'.split() + extra_words: | ||
assert word in result['msg'] | ||
|
||
def test_mem_check_with_invalid_groupname(): | ||
with pytest.raises(OpenShiftCheckException) as excinfo: | ||
result = MemoryAvailability(execute_module=NotImplementedError).run(tmp=None, task_vars=dict( | ||
openshift=dict(common=dict( | ||
service_type='origin', | ||
is_containerized=False, | ||
)), | ||
group_names=["invalid"], | ||
ansible_memtotal_mb=1234567, | ||
)) | ||
|
||
assert "'invalid'" in str(excinfo.value) | ||
def fake_execute_module(*args): | ||
raise AssertionError('this function should not be called') |