Files
deb-python-dcos/cli/tests/integrations/test_marathon_groups.py
Kevin Klues 6ec07dfa53 Fixed broken integration tests on windows.
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.
2017-06-20 18:28:35 -07:00

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()