def test_raise_error_when_cmd_missing(self, system_paasta_config): service_name = "service_name" instance_name = "instance_name" cluster = "cluster" service_configs = [ NativeServiceConfig( service=service_name, instance=instance_name, cluster=cluster, config_dict={ "cpus": 0.1, "mem": 50, "instances": 3, "drain_method": "test" }, branch_dict={ 'docker_image': 'busybox', 'desired_state': 'start', }, ) ] with pytest.raises(UnknownNativeServiceError): adhoc_scheduler.AdhocScheduler( service_name=service_name, instance_name=instance_name, cluster=cluster, system_paasta_config=system_paasta_config, service_config=service_configs[0], dry_run=False, reconcile_start_time=0, staging_timeout=30, )
def test_raise_error_when_cmd_missing(self, system_paasta_config): service_name = "service_name" instance_name = "instance_name" cluster = "cluster" service_configs = [ NativeServiceConfig( service=service_name, instance=instance_name, cluster=cluster, config_dict={ "cpus": 0.1, "mem": 50, "instances": 3, "drain_method": "test", }, branch_dict={"docker_image": "busybox", "desired_state": "start"}, soa_dir="/nail/etc/services", ) ] with pytest.raises(UnknownNativeServiceError): adhoc_scheduler.AdhocScheduler( service_name=service_name, instance_name=instance_name, cluster=cluster, system_paasta_config=system_paasta_config, service_config=service_configs[0], dry_run=False, reconcile_start_time=0, staging_timeout=30, task_store_type=DictTaskStore, )
def test_can_only_launch_task_once(self, system_paasta_config): service_name = "service_name" instance_name = "instance_name" cluster = "cluster" service_configs = [ NativeServiceConfig( service=service_name, instance=instance_name, cluster=cluster, config_dict={ "cpus": 0.1, "mem": 50, "instances": 3, "cmd": 'sleep 50', "drain_method": "test" }, branch_dict={ 'docker_image': 'busybox', 'desired_state': 'start', }, ) ] scheduler = adhoc_scheduler.AdhocScheduler( service_name=service_name, instance_name=instance_name, cluster=cluster, system_paasta_config=system_paasta_config, service_config=service_configs[0], dry_run=False, reconcile_start_time=0, staging_timeout=30, ) fake_driver = mock.Mock() # Check that offers with invalid pool don't get accepted tasks, _ = scheduler.tasks_and_state_for_offer( fake_driver, make_fake_offer(pool='notdefault'), {}) assert len(tasks) == 0 tasks, _ = scheduler.tasks_and_state_for_offer( fake_driver, make_fake_offer(pool=None), {}) assert len(tasks) == 0 tasks = scheduler.launch_tasks_for_offers(fake_driver, [make_fake_offer()]) task_id = tasks[0].task_id.value task_name = tasks[0].name assert len(scheduler.tasks_with_flags) == 1 assert len(tasks) == 1 assert scheduler.need_more_tasks(task_name, scheduler.tasks_with_flags, []) is False assert scheduler.need_to_stop() is False no_tasks = scheduler.launch_tasks_for_offers(fake_driver, [make_fake_offer()]) assert len(scheduler.tasks_with_flags) == 1 assert len(no_tasks) == 0 assert scheduler.need_to_stop() is False scheduler.statusUpdate( fake_driver, mock.Mock(task_id=mock.Mock(value=task_id), state=native_scheduler.TASK_FINISHED)) assert len(scheduler.tasks_with_flags) == 1 assert scheduler.tasks_with_flags[task_id].marked_for_gc is True assert scheduler.need_to_stop() is True
def test_can_run_multiple_copies(self, system_paasta_config): service_name = "service_name" instance_name = "instance_name" cluster = "cluster" service_configs = [ NativeServiceConfig( service=service_name, instance=instance_name, cluster=cluster, config_dict={ "cpus": 0.1, "mem": 50, "instances": 3, "cmd": 'sleep 50', "drain_method": "test" }, branch_dict={ 'docker_image': 'busybox', 'desired_state': 'start', }, ) ] scheduler = adhoc_scheduler.AdhocScheduler( service_name=service_name, instance_name=instance_name, cluster=cluster, system_paasta_config=system_paasta_config, service_config=service_configs[0], dry_run=False, reconcile_start_time=0, staging_timeout=30, service_config_overrides={'instances': 5}) fake_driver = mock.Mock() tasks = scheduler.launch_tasks_for_offers(fake_driver, [make_fake_offer()]) task_name = tasks[0].name task_ids = [t.task_id.value for t in tasks] assert len(scheduler.tasks_with_flags) == 5 assert len(tasks) == 5 assert scheduler.need_more_tasks(task_name, scheduler.tasks_with_flags, []) is False assert scheduler.need_to_stop() is False no_tasks = scheduler.launch_tasks_for_offers(fake_driver, [make_fake_offer()]) assert len(scheduler.tasks_with_flags) == 5 assert len(no_tasks) == 0 assert scheduler.need_to_stop() is False for idx, task_id in enumerate(task_ids): scheduler.statusUpdate( fake_driver, mock.Mock(task_id=mock.Mock(value=task_id), state=native_scheduler.TASK_FINISHED)) assert len(scheduler.tasks_with_flags) == 5 - idx assert scheduler.tasks_with_flags[task_id].marked_for_gc is True assert scheduler.need_to_stop() is (idx == 4)
def test_can_only_launch_task_once(self, mock_log, system_paasta_config): service_name = "service_name" instance_name = "instance_name" cluster = "cluster" service_configs = [ NativeServiceConfig( service=service_name, instance=instance_name, cluster=cluster, config_dict={ "cpus": 0.1, "mem": 50, "instances": 3, "cmd": 'sleep 50', "drain_method": "test", }, branch_dict={ 'docker_image': 'busybox', 'desired_state': 'start', 'force_bounce': None, }, soa_dir='/nail/etc/services', ), ] scheduler = adhoc_scheduler.AdhocScheduler( service_name=service_name, instance_name=instance_name, cluster=cluster, system_paasta_config=system_paasta_config, service_config=service_configs[0], dry_run=False, reconcile_start_time=0, staging_timeout=30, task_store_type=DictTaskStore, ) fake_driver = mock.Mock() scheduler.registered( driver=fake_driver, frameworkId={'value': 'foo'}, masterInfo=mock.Mock(), ) with mock.patch( 'paasta_tools.utils.load_system_paasta_config', autospec=True, return_value=system_paasta_config, ): # Check that offers with invalid pool don't get accepted tasks, _ = scheduler.tasks_and_state_for_offer( fake_driver, make_fake_offer(pool='notdefault'), {}, ) assert len(tasks) == 0 tasks, _ = scheduler.tasks_and_state_for_offer( fake_driver, make_fake_offer(pool=None), {}, ) assert len(tasks) == 0 tasks = scheduler.launch_tasks_for_offers(fake_driver, [make_fake_offer()]) task_id = tasks[0]['task_id']['value'] task_name = tasks[0]['name'] assert len(scheduler.task_store.get_all_tasks()) == 1 assert len(tasks) == 1 assert scheduler.need_more_tasks( task_name, scheduler.task_store.get_all_tasks(), []) is False assert scheduler.need_to_stop() is False no_tasks = scheduler.launch_tasks_for_offers( fake_driver, [make_fake_offer()]) assert len(scheduler.task_store.get_all_tasks()) == 1 assert len(no_tasks) == 0 assert scheduler.need_to_stop() is False scheduler.statusUpdate( fake_driver, { 'task_id': { 'value': task_id }, 'state': native_scheduler.TASK_FINISHED }, ) assert len(scheduler.task_store.get_all_tasks()) == 1 assert scheduler.need_to_stop() is True
def test_can_run_multiple_copies(self, mock_log, system_paasta_config): service_name = "service_name" instance_name = "instance_name" cluster = "cluster" service_configs = [ NativeServiceConfig( service=service_name, instance=instance_name, cluster=cluster, config_dict={ "cpus": 0.1, "mem": 50, "instances": 3, "cmd": 'sleep 50', "drain_method": "test", }, branch_dict={ 'docker_image': 'busybox', 'desired_state': 'start', 'force_bounce': None, }, soa_dir='/nail/etc/services', ), ] scheduler = adhoc_scheduler.AdhocScheduler( service_name=service_name, instance_name=instance_name, cluster=cluster, system_paasta_config=system_paasta_config, service_config=service_configs[0], dry_run=False, reconcile_start_time=0, staging_timeout=30, service_config_overrides={'instances': 5}, task_store_type=DictTaskStore, ) fake_driver = mock.Mock() scheduler.registered( driver=fake_driver, frameworkId={'value': 'foo'}, masterInfo=mock.Mock(), ) with mock.patch( 'paasta_tools.utils.load_system_paasta_config', autospec=True, return_value=system_paasta_config, ): tasks = scheduler.launch_tasks_for_offers(fake_driver, [make_fake_offer()]) task_name = tasks[0]['name'] task_ids = [t['task_id']['value'] for t in tasks] assert len(scheduler.task_store.get_all_tasks()) == 5 assert len(tasks) == 5 assert scheduler.need_more_tasks( task_name, scheduler.task_store.get_all_tasks(), []) is False assert scheduler.need_to_stop() is False no_tasks = scheduler.launch_tasks_for_offers( fake_driver, [make_fake_offer()]) assert len(scheduler.task_store.get_all_tasks()) == 5 assert len(no_tasks) == 0 assert scheduler.need_to_stop() is False for idx, task_id in enumerate(task_ids): scheduler.statusUpdate( fake_driver, { 'task_id': { 'value': task_id }, 'state': native_scheduler.TASK_FINISHED }, ) assert scheduler.need_to_stop() is (idx == 4)