Exemple #1
0
 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
Exemple #2
0
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'})))
Exemple #3
0
 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
Exemple #4
0
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))
Exemple #5
0
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))
Exemple #6
0
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))
Exemple #7
0
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))
Exemple #8
0
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))
Exemple #9
0
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)))
Exemple #10
0
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))
Exemple #11
0
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))
Exemple #12
0
 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='* * * * *'))
Exemple #13
0
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))
Exemple #14
0
 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))))
Exemple #16
0
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)
Exemple #17
0
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'
Exemple #18
0
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
Exemple #20
0
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)))
Exemple #21
0
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]
Exemple #22
0
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