Files
deb-python-dcos/integrations/cli/test_marathon.py
2015-01-31 23:50:31 +00:00

169 lines
4.2 KiB
Python

import json
from common import exec_command
def test_help():
returncode, stdout, stderr = exec_command(['dcos', 'marathon', '--help'])
assert returncode == 0
assert stdout == b"""Usage:
dcos marathon describe [--json] <app_id>
dcos marathon info
dcos marathon list
dcos marathon remove [--force] <app_id>
dcos marathon scale [--force] <app_id> <instances>
dcos marathon start <app_resource>
dcos marathon suspend [--force] <app_id>
Options:
-h, --help Show this screen
--version Show version
--force This flag disable checks in Marathon during update
operations.
--json Outputs JSON format instead of default (TOML) format
"""
def test_version():
returncode, stdout, stderr = exec_command(
['dcos', 'marathon', '--version'])
assert returncode == 0
assert stdout == b'dcos-marathon version 0.1.0\n'
assert stderr == b''
def test_info():
returncode, stdout, stderr = exec_command(['dcos', 'marathon', 'info'])
assert returncode == 0
assert stdout == b'Deploy and manage applications on Apache Mesos\n'
assert stderr == b''
def test_empty_list():
_list_apps()
def test_start_app():
_start_app('tests/data/marathon/sleep.json')
_list_apps('test-app')
_remove_app('test-app')
def test_remove_app():
_start_app('tests/data/marathon/sleep.json')
_remove_app('test-app')
_list_apps()
# TODO: Let's improve this once we have a fixed version of toml
def test_describe_app():
_start_app('tests/data/marathon/sleep.json')
returncode, stdout, stderr = exec_command(
['dcos', 'marathon', 'describe', 'test-app'])
assert returncode == 0
assert stdout != b''
assert stderr == b''
_remove_app('test-app')
def test_describe_app_in_json():
_start_app('tests/data/marathon/sleep.json')
returncode, stdout, stderr = exec_command(
['dcos', 'marathon', 'describe', '--json', 'test-app'])
result = json.loads(stdout.decode('utf-8'))
assert returncode == 0
assert isinstance(result, dict)
assert result['id'] == '/test-app'
assert stderr == b''
_remove_app('test-app')
def test_scale_app():
_start_app('tests/data/marathon/zero_instance_sleep.json')
returncode, stdout, stderr = exec_command(
['dcos', 'marathon', 'scale', 'zero-instance-app', '2'])
assert returncode == 0
assert stdout.decode('utf-8').startswith('Created deployment ')
assert stderr == b''
_remove_app('zero-instance-app')
def test_force_scale_appp():
_start_app('tests/data/marathon/sleep.json')
returncode, stdout, stderr = exec_command(
['dcos', 'marathon', 'scale', '--force', 'test-app', '2'])
assert returncode == 0
assert stdout.decode('utf-8').startswith('Created deployment ')
assert stderr == b''
_remove_app('test-app')
def test_suspend_app():
_start_app('tests/data/marathon/zero_instance_sleep.json')
returncode, stdout, stderr = exec_command(
['dcos', 'marathon', 'suspend', 'zero-instance-app'])
assert returncode == 0
assert stdout.decode('utf-8').startswith('Created deployment ')
assert stderr == b''
_remove_app('zero-instance-app')
def test_remove_missing_app():
returncode, stdout, stderr = exec_command(
['dcos', 'marathon', 'remove', 'missing-id'])
assert returncode == 1
assert stdout == b"Error: App '/missing-id' does not exist\n"
assert stderr == b''
def _start_app(file_path):
returncode, stdout, stderr = exec_command(
['dcos', 'marathon', 'start', file_path])
assert returncode == 0
assert stdout == b''
assert stderr == b''
def _list_apps(app_id=None):
returncode, stdout, stderr = exec_command(['dcos', 'marathon', 'list'])
if app_id is None:
result = b'No applications to list.\n'
elif isinstance(app_id, str):
result = '/{}\n'.format(app_id).encode('utf-8')
else:
assert False
assert returncode == 0
assert stdout == result
assert stderr == b''
def _remove_app(app_id):
returncode, stdout, stderr = exec_command(
['dcos', 'marathon', 'remove', app_id])
assert returncode == 0
assert stdout == b''
assert stderr == b''