A number of marathon tests were failing on windows and blocking PRs from being merged. After looking at the tests and fixing them, it's not clear how they were ever working (even on linux/mac). I've updated them to be more stable both on linux/mac and on windows.
134 lines
4.4 KiB
Python
134 lines
4.4 KiB
Python
import json
|
|
import re
|
|
|
|
from .helpers.common import assert_command, assert_lines, exec_command
|
|
from .helpers.marathon import (group, remove_group, show_app,
|
|
watch_all_deployments)
|
|
|
|
|
|
GOOD_GROUP = 'tests/data/marathon/groups/good.json'
|
|
SCALE_GROUP = 'tests/data/marathon/groups/scale.json'
|
|
|
|
|
|
def test_add_group_by_stdin():
|
|
_add_group_by_stdin(GOOD_GROUP)
|
|
remove_group('test-group')
|
|
|
|
|
|
def test_group_list_table():
|
|
with group(GOOD_GROUP, 'test-group'):
|
|
assert_lines(['dcos', 'marathon', 'group', 'list'], 3)
|
|
|
|
|
|
def test_validate_complicated_group_and_app():
|
|
with group('tests/data/marathon/groups/complicated.json', 'test-group'):
|
|
pass
|
|
|
|
|
|
def test_add_existing_group():
|
|
with group(GOOD_GROUP, 'test-group'):
|
|
with open(GOOD_GROUP) as fd:
|
|
stderr = b"Group '/test-group' already exists\n"
|
|
assert_command(['dcos', 'marathon', 'group', 'add'],
|
|
returncode=1,
|
|
stderr=stderr,
|
|
stdin=fd)
|
|
|
|
|
|
def test_add_bad_complicated_group():
|
|
with open('tests/data/marathon/groups/complicated_bad.json') as fd:
|
|
returncode, stdout, stderr = exec_command(
|
|
['dcos', 'marathon', 'group', 'add'],
|
|
stdin=fd)
|
|
|
|
stderr_end = b"""{"message":"Invalid JSON","details":[{"path":"/groups(0)/apps(0)/id","errors":["\'id\' is undefined on object: {}"]}]}""" # noqa: E501
|
|
|
|
assert returncode == 1
|
|
assert stderr_end in stderr
|
|
assert stdout == b''
|
|
|
|
|
|
def test_update_group_from_stdin():
|
|
with group(GOOD_GROUP, 'test-group'):
|
|
_update_group(
|
|
'test-group',
|
|
'tests/data/marathon/groups/update_good.json')
|
|
show_app('test-group/updated')
|
|
|
|
|
|
def test_update_missing_group():
|
|
assert_command(['dcos', 'marathon', 'group', 'update', 'missing-id'],
|
|
stderr=b"Error: Group '/missing-id' does not exist\n",
|
|
returncode=1)
|
|
|
|
|
|
def test_scale_group():
|
|
with group(SCALE_GROUP, 'scale-group'):
|
|
returncode, stdout, stderr = exec_command(
|
|
['dcos', 'marathon', 'group', 'scale', 'scale-group', '2'])
|
|
assert stderr == b''
|
|
assert returncode == 0
|
|
watch_all_deployments()
|
|
returncode, stdout, stderr = exec_command(
|
|
['dcos', 'marathon', 'group', 'show', 'scale-group'])
|
|
res = json.loads(stdout.decode('utf-8'))
|
|
|
|
assert res['groups'][0]['apps'][0]['instances'] == 2
|
|
|
|
|
|
def test_scale_group_not_exist():
|
|
returncode, stdout, stderr = exec_command(['dcos', 'marathon', 'group',
|
|
'scale', 'scale-group', '2'])
|
|
assert stderr == b''
|
|
watch_all_deployments()
|
|
returncode, stdout, stderr = exec_command(
|
|
['dcos', 'marathon', 'group', 'show',
|
|
'scale-group'])
|
|
res = json.loads(stdout.decode('utf-8'))
|
|
|
|
assert len(res['apps']) == 0
|
|
remove_group('scale-group')
|
|
|
|
|
|
def test_scale_group_when_scale_factor_negative():
|
|
with group(SCALE_GROUP, 'scale-group'):
|
|
returncode, stdout, stderr = exec_command(
|
|
['dcos', 'marathon', 'group', 'scale', 'scale-group', '-2'])
|
|
assert b'Command not recognized' in stdout
|
|
assert returncode == 1
|
|
|
|
|
|
def test_scale_group_when_scale_factor_not_float():
|
|
with group(SCALE_GROUP, 'scale-group'):
|
|
returncode, stdout, stderr = exec_command(
|
|
['dcos', 'marathon', 'group', 'scale', 'scale-group', '1.a'])
|
|
assert stderr == b'Error parsing string as float\n'
|
|
assert returncode == 1
|
|
|
|
|
|
def _add_group_by_stdin(file_path):
|
|
with open(file_path) as fd:
|
|
cmd = ['dcos', 'marathon', 'group', 'add']
|
|
returncode, stdout, stderr = exec_command(cmd, stdin=fd)
|
|
assert returncode == 0
|
|
assert re.fullmatch('Created deployment \S+\n',
|
|
stdout.decode('utf-8'))
|
|
assert stderr == b''
|
|
|
|
# Let's make sure that we don't return until the deployment has finished
|
|
watch_all_deployments()
|
|
|
|
|
|
def _update_group(group_id, file_path):
|
|
with open(file_path) as fd:
|
|
returncode, stdout, stderr = exec_command(
|
|
['dcos', 'marathon', 'group', 'update', group_id],
|
|
stdin=fd)
|
|
|
|
assert returncode == 0
|
|
assert stdout.decode().startswith('Created deployment ')
|
|
assert stderr == b''
|
|
|
|
# Let's make sure that we don't return until the deployment has finished
|
|
watch_all_deployments()
|