def create_mock_config(cls, is_cron=False): # TODO(wfarner): Consider using a real AuroraConfig object for this. mock_config = create_autospec(spec=AuroraConfig, spec_set=True, instance=True) raw_config = Job(cron_schedule='something' if is_cron else Empty) mock_config.raw = Mock(return_value=raw_config) mock_config.cluster = Mock(return_value=cls.TEST_CLUSTER) return mock_config
def test_dedicated_portmap(): base_job = Job(name='hello_world', role='john_doe', cluster='test-cluster', task=Task(name='main', processes=[], resources=Resources(cpu=0.1, ram=64 * MB, disk=64 * MB))) config._validate_announce_configuration(AuroraConfig(base_job)) config._validate_announce_configuration( AuroraConfig(base_job(constraints={'dedicated': 'mesos-team'}))) config._validate_announce_configuration( AuroraConfig( base_job(constraints={'dedicated': 'mesos-team'}, announce=Announcer(portmap={'http': 80})))) with pytest.raises(ValueError): config._validate_announce_configuration( AuroraConfig(base_job(announce=Announcer(portmap={'http': 80})))) with pytest.raises(ValueError): config._validate_announce_configuration( AuroraConfig( base_job(announce=Announcer(portmap={'http': 80}), constraints={'foo': 'bar'})))
def create_mock_config(cls, is_cron=False): mock_config = create_autospec(spec=AuroraConfig, spec_set=True, instance=True) raw_config = Job(cron_schedule='something' if is_cron else Empty) mock_config.raw = Mock(return_value=raw_config) mock_config.cluster = Mock(return_value=cls.TEST_CLUSTER) return mock_config
def test_update_config_passes_with_default_values(): base_job = Job(name='hello_world', role='john_doe', cluster='test-cluster', task=Task(name='main', processes=[], resources=Resources(cpu=0.1, ram=64 * MB, disk=64 * MB))) config._validate_update_config(AuroraConfig(base_job))
def test_update_config_passes_with_min_consecutive_successes_zero(): base_job = Job( name='hello_world', role='john_doe', cluster='test-cluster', health_check_config=HealthCheckConfig(min_consecutive_successes=0), task=Task(name='main', processes=[], resources=Resources(cpu=0.1, ram=64 * MB, disk=64 * MB))) config._validate_update_config(AuroraConfig(base_job))
def test_health_check_config_http_ok(): base_job = Job(name='hello_bond', role='james', cluster='marine-cluster', health_check_config=HealthCheckConfig( max_consecutive_failures=1, ), task=Task(name='main', processes=[], resources=Resources(cpu=0.1, ram=64 * MB, disk=64 * MB))) config._validate_health_check_config(AuroraConfig(base_job))
def test_update_config_fails_with_min_consecutive_successes_negative(): base_job = Job( name='hello_world', role='john_doe', cluster='test-cluster', health_check_config=HealthCheckConfig(min_consecutive_successes=-1), task=Task(name='main', processes=[], resources=Resources(cpu=0.1, ram=64 * MB, disk=64 * MB))) with pytest.raises(SystemExit): config._validate_update_config(AuroraConfig(base_job))
def test_update_config_passes_with_min_requirement_values(): base_job = Job( name='hello_world', role='john_doe', cluster='test-cluster', update_config=UpdateConfig(watch_secs=26), health_check_config=HealthCheckConfig(max_consecutive_failures=1), task=Task(name='main', processes=[], resources=Resources(cpu=0.1, ram=64 * MB, disk=64 * MB))) config._validate_update_config(AuroraConfig(base_job))
def test_health_check_config_invalid_type(): # Must be 'shell' or 'http' type of config. with pytest.raises(ValueError): Job(name='hello_bond', role='james', cluster='marine-cluster', health_check_config=HealthCheckConfig( max_consecutive_failures=1, health_checker='foo', ), task=Task(name='main', processes=[], resources=Resources(cpu=0.1, ram=64 * MB, disk=64 * MB)))
def test_update_config_fails_insufficient_watch_secs_less_than_target(): base_job = Job(name='hello_world', role='john_doe', cluster='test-cluster', update_config=UpdateConfig(watch_secs=10), task=Task(name='main', processes=[], resources=Resources(cpu=0.1, ram=64 * MB, disk=64 * MB))) with pytest.raises(SystemExit): config._validate_update_config(AuroraConfig(base_job))
def test_update_config_fails_insufficient_watch_secs_equal_to_target(): base_job = Job( name='hello_world', role='john_doe', cluster='test-cluster', update_config=UpdateConfig(watch_secs=25), health_check_config=HealthCheckConfig(max_consecutive_failures=1), task=Task(name='main', processes=[], resources=Resources(cpu=0.1, ram=64 * MB, disk=64 * MB))) with pytest.raises(SystemExit): config._validate_update_config(AuroraConfig(base_job))
def get_job_config(self): return AuroraConfig(job=Job( cluster='west', role='bozo', environment='test', name='the_job', service=False, task=Task(name='task', processes=[Process(cmdline='ls -la', name='process')], resources=Resources( cpu=1.0, ram=1024 * MB, disk=1024 * MB)), contact='*****@*****.**', instances=3, cron_schedule='* * * * *'))
def test_health_check_config_shell_no_command(): # If we chose shell config, we must define shell_command. base_job = Job( name='hello_bond', role='james', cluster='marine-cluster', health_check_config=HealthCheckConfig( max_consecutive_failures=1, health_checker=HealthCheckerConfig(shell=ShellHealthChecker())), task=Task(name='main', processes=[], resources=Resources(cpu=0.1, ram=64 * MB, disk=64 * MB))) with pytest.raises(SystemExit): config._validate_health_check_config(AuroraConfig(base_job))
def get_job_config(self, is_cron=False): return AuroraConfig(job=Job( cluster='west', role='bozo', environment='test', name='the_job', service=True if not is_cron else False, cron_schedule='* * * * *' if is_cron else Empty, task=Task(name='task', processes=[Process(cmdline='ls -la', name='process')], resources=Resources( cpu=1.0, ram=1024 * MB, disk=1024 * MB)), instances=3, ))
def make_config(announce, *ports): process = Process(name='hello', cmdline=' '.join('{{thermos.ports[%s]}}' % port for port in ports)) return AuroraConfig( Job(name='hello_world', environment='staging42', role='john_doe', cluster='smf1-test', announce=announce, task=Task(name='main', processes=[process], resources=Resources(cpu=0.1, ram=64 * 1048576, disk=64 * 1048576))))
def test_validate_deprecated_config_adds_warning_for_production(): job = Job(name='hello_world', role='john_doe', cluster='test-cluster', environment='test', task=Task(name='main', processes=[ Process(cmdline='echo {{_unbound_}}', name='eco') ], resources=Resources(cpu=0.1, ram=64 * MB, disk=64 * MB)), production='true') with mock.patch( 'apache.aurora.client.config.deprecation_warning') as mock_warning: config._validate_deprecated_config(AuroraConfig(job)) mock_warning.assert_called_once_with(PRODUCTION_DEPRECATED_WARNING)
def test_inject_default_environment(): base_job = Job(name='hello_world', role='john_doe', cluster='test-cluster', task=Task(name='main', processes=[], resources=Resources(cpu=0.1, ram=64 * MB, disk=64 * MB))) no_env_config = AuroraConfig(base_job) config._inject_default_environment(no_env_config) assert no_env_config.environment() == DEFAULT_ENVIRONMENT test_env_config = AuroraConfig(base_job(environment='test')) config._inject_default_environment(test_env_config) assert test_env_config.environment() == 'test'
def test_validate_deprecated_config_adds_no_warning_when_tier_is_set(): job = Job(name='hello_world', role='john_doe', cluster='test-cluster', environment='test', task=Task(name='main', processes=[ Process(cmdline='echo {{_unbound_}}', name='eco') ], resources=Resources(cpu=0.1, ram=64 * MB, disk=64 * MB)), production='true', tier='preferred') with mock.patch( 'apache.aurora.client.config.deprecation_warning') as mock_warning: config._validate_deprecated_config(AuroraConfig(job)) assert mock_warning.call_count == 0
def make_job(role, environment, name, primary_port, portmap): from apache.aurora.config.schema.base import ( Announcer, Job, Process, Resources, Task, ) task = Task(name='ignore2', processes=[Process(name='ignore3', cmdline='ignore4')], resources=Resources(cpu=1, ram=1, disk=1)) job = Job(role=role, environment=environment, name=name, cluster='ignore1', task=task, announce=Announcer(primary_port=primary_port, portmap=portmap)) return job
def test_environment_names(): base_job = Job(name='hello_world', role='john_doe', cluster='test-cluster', task=Task(name='main', processes=[], resources=Resources(cpu=0.1, ram=64 * MB, disk=64 * MB))) with pytest.raises(ValueError): config._validate_environment_name(AuroraConfig(base_job)) for env_name in GOOD_ENV: config._validate_environment_name( AuroraConfig(base_job(environment=env_name))) for env_name in BAD_ENV: with pytest.raises(ValueError): config._validate_environment_name( AuroraConfig(base_job(environment=env_name)))
def test_health_check_config_deprecate_message(monkeypatch): base_job = Job(name='hello_bond', role='james', cluster='marine-cluster', health_check_config=HealthCheckConfig( max_consecutive_failures=1, endpoint='/to_be_deprecated'), task=Task(name='main', processes=[], resources=Resources(cpu=0.1, ram=64 * MB, disk=64 * MB))) log_items = [] def capture_log(msg): log_items.append(msg) monkeypatch.setattr(log, 'warn', capture_log) config._validate_health_check_config(AuroraConfig(base_job)) assert log_items == [HTTP_DEPRECATION_WARNING]
def test_environment_names(): BAD = ('Prod', ' prod', 'prod ', 'tEst', 'production', 'staging 2', 'stagingA') GOOD = ('prod', 'devel', 'test', 'staging', 'staging001', 'staging1', 'staging1234') base_job = Job(name='hello_world', role='john_doe', cluster='test-cluster', task=Task(name='main', processes=[], resources=Resources(cpu=0.1, ram=64 * MB, disk=64 * MB))) with pytest.raises(ValueError): config._validate_environment_name(AuroraConfig(base_job)) for env_name in GOOD: config._validate_environment_name( AuroraConfig(base_job(environment=env_name))) for env_name in BAD: with pytest.raises(ValueError): config._validate_environment_name( AuroraConfig(base_job(environment=env_name)))
max_failures = 100), Process(name = 'hello_world_fails_200', cmdline = 'echo hello world', max_failures = 200)], resources = Resources(cpu = 0.1, ram = 64 * 1048576, disk = 64 * 1048576), ) ) jobs = [HELLO_WORLD] """ REIFIED_CONFIG = Job(name='hello_world', role='john_doe', environment='staging42', cluster='smf1-test', task=Task( name='main', processes=[ Process(name='hello_world', cmdline='echo {{mesos.instance}}') ], resources=Resources(cpu=0.1, ram=64 * 1048576, disk=64 * 1048576), )) REIFIED_LIMITED_CONFIG = Job(name='hello_world', role='john_doe', environment='staging42', cluster='smf1-test', task=Task( name='main', processes=[ Process(name='hello_world_fails_0',
from apache.aurora.config import AuroraConfig from apache.aurora.config.schema.base import HealthCheckConfig, Job, SimpleTask from apache.aurora.config.thrift import convert as convert_pystachio_to_thrift from apache.aurora.config.thrift import InvalidConfig, task_instance_from_job from apache.thermos.config.schema import Process, Resources, Task from gen.apache.aurora.api.constants import GOOD_IDENTIFIER_PATTERN_PYTHON from gen.apache.aurora.api.ttypes import CronCollisionPolicy, Identity, JobKey from gen.apache.aurora.test.constants import INVALID_IDENTIFIERS, VALID_IDENTIFIERS HELLO_WORLD = Job( name='hello_world', role='john_doe', environment='staging66', cluster='smf1-test', task=Task( name='main', processes=[Process(name='hello_world', cmdline='echo {{mesos.instance}}')], resources=Resources(cpu=0.1, ram=64 * 1048576, disk=64 * 1048576), ) ) def test_simple_config(): job = convert_pystachio_to_thrift(HELLO_WORLD) expected_key = JobKey( role=HELLO_WORLD.role().get(), environment=HELLO_WORLD.environment().get(), name=HELLO_WORLD.name().get()) assert job.instanceCount == 1 tti = job.taskConfig
def test_task_instance_from_job(): instance = task_instance_from_job(Job(health_check_config=HealthCheckConfig(interval_secs=30)), 0) assert instance is not None
def test_task_instance_from_job(): instance = task_instance_from_job(Job(health_check_interval_secs=30), 0) assert instance is not None