Skip to content

Commit 4a0384a

Browse files
author
Carme, Pamy
committed
fix: mock unit test jic docker is not installed
Signed-off-by: Carme, Pamy <pamy.carme@sciencelogic.com>
1 parent e28622b commit 4a0384a

7 files changed

Lines changed: 66 additions & 16 deletions

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Click
2-
docker-compose==1.29.2
2+
docker-compose>=1.27.4<=1.29.2
33
pyyaml>=5.4.1
44
MarkupSafe
55
jinja2

requirements_dev.in

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ bumpversion
77
pre-commit
88
sphinx
99
sphinx_rtd_theme
10-
pip-tools
10+
pip-tools
11+
pytest-mock

tests/example_compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version: '3.3'
1+
version: '3.8'
22
services:
33
example:
44
image: registry.example/example:1.0.0

tests/example_override.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ services:
88
environment:
99
db_host: {{ DB_HOST if DB_HOST is defined else "test"}}
1010
ui:
11+
deploy:
12+
mode: replicated
13+
placement:
14+
max_replicas_per_node: 1
1115
environment:
1216
LOGLEVEL: {{ DB_HOST }}
1317
volumes:
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
version: '3.8'
2+
services:
3+
service_custom:
4+
image: sinzlab/pytorch
5+
deploy:
6+
replicas: true
7+
resources:
8+
limits:
9+
memory: 2G
10+
environment:
11+
test: test
12+
{% for i in range(8) %}
13+
notebook{{i}}:
14+
image: sinzlab/pytorch
15+
ports:
16+
- "300{{i}}:8888"
17+
environment:
18+
- NVIDIA_VISIBLE_DEVICES={{i}}
19+
volumes:
20+
- ./notebooks:/notebooks
21+
{% endfor %}

tests/test_stackconfig.py

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,20 @@
1-
import os
2-
31
import pytest
42

53
from stackconfig.stackconfig import StackConfigCompose
64
from stackconfig.utils.jinja2_utils import render_jijnja2_compose
75

86

9-
def test_merge_compose_files():
7+
@pytest.fixture()
8+
def mock_success_subprocess(mocker):
9+
mocker.patch('subprocess.getoutput', return_value={"Additional property z_dummy is not allowed": "test"})
10+
11+
12+
@pytest.fixture()
13+
def mock_error_subprocess(mocker):
14+
mocker.patch('subprocess.getoutput', return_value={"Error": "test"})
15+
16+
17+
def test_merge_compose_files(mock_success_subprocess):
1018
override_file = "tests/example_override.yml"
1119
templates = render_jijnja2_compose(
1220
[override_file], data_file="tests/data_example.yml"
@@ -15,33 +23,35 @@ def test_merge_compose_files():
1523
["tests/example_compose.yml"] + templates, "/tmp/temp_result.yml"
1624
)
1725
c.merge_stack_compose()
18-
assert c.compose_dict["version"] == "3.3"
26+
assert c.compose_dict["version"] == "3.8"
27+
assert "deploy" in c.compose_dict["services"]["ui"]
28+
assert "placement" in c.compose_dict["services"]["ui"]["deploy"]
29+
assert "max_replicas_per_node" in c.compose_dict["services"]["ui"]["deploy"]["placement"]
30+
assert c.compose_dict["services"]["ui"]["deploy"]["placement"]["max_replicas_per_node"] == 1
1931

2032

21-
def test_merge_compose_files_invalid_syntax():
33+
def test_merge_compose_files_invalid_syntax(mock_success_subprocess):
2234
override_file = "tests/example_override_invalid.yml"
2335
with pytest.raises(Exception) as err:
2436
templates = render_jijnja2_compose(
2537
[override_file], data_file="tests/data_example.yml"
2638
)
27-
c = StackConfigCompose(
28-
["tests/example_compose.yml"] + templates, "/tmp/temp_result.yml"
29-
)
30-
c.merge_stack_compose()
3139
assert f"Please be sure the template {override_file} is valid" in str(err)
3240

3341

34-
@pytest.mark.parametrize("version, version_result", [(None, "3.3"), ("3.8", "3.8")])
35-
def test_merge_compose_files_invalid(version, version_result):
42+
@pytest.mark.parametrize("version", [(None), ("3.9")])
43+
def test_merge_compose_files_invalid(version, mock_success_subprocess):
3644
c = StackConfigCompose(
3745
["tests/example_compose.yml"], "/tmp/temp_result_invalid.yml", version
3846
)
3947
c.merge_stack_compose()
40-
assert c.compose_dict["version"] == version_result
48+
if not version:
49+
version = "3.8"
50+
assert c.compose_dict["version"] == version
4151
assert "depends_on" not in c.compose_dict["services"]["api"]
4252

4353

44-
def test_merge_compose_files_syntax_error():
54+
def test_merge_compose_files_syntax_error(mock_success_subprocess):
4555
with open("/tmp/invalid-compose.yml", "+w") as file:
4656
file.writelines("{}\ntests: test_value".format("test"))
4757
with pytest.raises(Exception) as exc:
@@ -51,3 +61,16 @@ def test_merge_compose_files_syntax_error():
5161
)
5262
c.merge_stack_compose()
5363
assert "mapping values are not allowed here" in str(exc)
64+
65+
66+
def test_merge_compose_files_invalid_syntax_compose_validation(mock_error_subprocess):
67+
override_file = "tests/example_override_invalid2.yml"
68+
with pytest.raises(Exception) as err:
69+
templates = render_jijnja2_compose(
70+
[override_file], data_file="tests/data_example.yml"
71+
)
72+
c = StackConfigCompose(
73+
["tests/example_compose.yml"] + templates, "/tmp/temp_result.yml"
74+
)
75+
c.merge_stack_compose()
76+
assert f"services.service_custom.deploy.replicas contains an invalid type" in str(err)

tox.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ commands = python -m pytest -vv --junit-xml=junit_report.xml --cov-report=term -
66
deps =
77
pytest
88
pytest-cov
9+
pytest-mock
910
-rrequirements.txt

0 commit comments

Comments
 (0)