def test_downgrade_scheduler(): options = { "service": { "name": SERVICE_NAME }, "hello": { "count": 2 }, "world": { "count": 3 } } sdk_upgrade.test_downgrade(config.PACKAGE_NAME, SERVICE_NAME, 5, to_version=DOWNGRADE_TO, to_options=options) # Get the current service state to verify roles have applied. service_roles = sdk_utils.get_service_roles(SERVICE_NAME) current_task_roles = service_roles["task-roles"] # We must have some role! assert len(current_task_roles) > 0 assert len(current_task_roles) == 5 assert LEGACY_ROLE in current_task_roles.values() assert ENFORCED_ROLE not in current_task_roles.values() assert service_roles["framework-roles"] is None assert service_roles["framework-role"] == LEGACY_ROLE
def test_switch_to_legacy_role(): options = { "service": { "name": SERVICE_NAME, "role": "slave_public", "enable_role_migration": True } } sdk_upgrade.update_or_upgrade_or_downgrade( config.PACKAGE_NAME, SERVICE_NAME, expected_running_tasks=3, to_options=options, to_version=None, ) # Get the current service state to verify roles have applied. service_roles = sdk_utils.get_service_roles(SERVICE_NAME) current_task_roles = service_roles["task-roles"] # We must have some role! assert len(current_task_roles) > 0 assert LEGACY_ROLE not in current_task_roles.values() assert ENFORCED_ROLE in current_task_roles.values() assert service_roles["framework-roles"] is not None assert service_roles["framework-role"] is None assert len(service_roles["framework-roles"]) == 2 assert LEGACY_ROLE in service_roles["framework-roles"] assert ENFORCED_ROLE in service_roles["framework-roles"]
def test_disable_quota_role(): # Add new pods to service which should be launched with the new role. # Turn off legacy role. options = { "service": { "name": SERVICE_NAME, "role": "slave_public", "enable_role_migration": False } } sdk_upgrade.update_or_upgrade_or_downgrade( config.PACKAGE_NAME, SERVICE_NAME, expected_running_tasks=3, to_options=options, to_version=None, ) # Get the current service state to verify roles have applied. service_roles = sdk_utils.get_service_roles(SERVICE_NAME) current_task_roles = service_roles["task-roles"] # We must have some role! assert len(current_task_roles) > 0 assert len(current_task_roles) == 3 assert LEGACY_ROLE in current_task_roles.values() assert ENFORCED_ROLE not in current_task_roles.values() # Ensure we're not MULTI_ROLE, and only using the legacy-role. assert service_roles["framework-roles"] is None assert service_roles["framework-role"] == LEGACY_ROLE
def test_add_pods_post_update(): # Add new pods to service which should be launched with the new role. marathon_config = sdk_marathon.get_config(SERVICE_NAME) # Add an extra pod to each. marathon_config["env"]["HELLO_COUNT"] = "2" marathon_config["env"]["WORLD_COUNT"] = "3" # Update the app sdk_marathon.update_app(marathon_config) # Wait for scheduler to restart. sdk_plan.wait_for_completed_deployment(SERVICE_NAME) # Get the current service state to verify roles have applied. service_roles = sdk_utils.get_service_roles(SERVICE_NAME) current_task_roles = service_roles["task-roles"] # We must have some role! assert len(current_task_roles) > 0 assert len(current_task_roles) == 5 assert LEGACY_ROLE in current_task_roles.values() assert ENFORCED_ROLE not in current_task_roles.values() assert service_roles["framework-roles"] is None assert service_roles["framework-role"] == LEGACY_ROLE
def test_update_scheduler_role(): options = { "service": {"name": SERVICE_NAME, "role": ENFORCED_ROLE, "enable_role_migration": True} } sdk_upgrade.update_or_upgrade_or_downgrade( config.PACKAGE_NAME, SERVICE_NAME, expected_running_tasks=3, to_options=options, to_version=None, ) # Get the current service state to verify roles have applied. service_roles = sdk_utils.get_service_roles(SERVICE_NAME) current_task_roles = service_roles["task-roles"] # We must have some role! assert len(current_task_roles) > 0 assert LEGACY_ROLE in current_task_roles.values() # Pods haven't been replaced yet. assert ENFORCED_ROLE not in current_task_roles.values() # Ensure we are MULTI_ROLE. assert service_roles["framework-roles"] is not None assert service_roles["framework-role"] is None assert len(service_roles["framework-roles"]) == 2 assert LEGACY_ROLE in service_roles["framework-roles"] assert ENFORCED_ROLE in service_roles["framework-roles"]
def test_disable_quota_role(): # Add new pods to service which should be launched with the new role. marathon_config = sdk_marathon.get_config(SERVICE_NAME) # Turn off legacy role. marathon_config["env"]["ENABLE_ROLE_MIGRATION"] = "false" # Update the app sdk_marathon.update_app(marathon_config) # Wait for scheduler to restart. sdk_plan.wait_for_completed_deployment(SERVICE_NAME) # Get the current service state to verify roles have applied. service_roles = sdk_utils.get_service_roles(SERVICE_NAME) current_task_roles = service_roles["task-roles"] # We must have some role! assert len(current_task_roles) > 0 assert len(current_task_roles) == 3 assert LEGACY_ROLE in current_task_roles.values() assert ENFORCED_ROLE not in current_task_roles.values() # Ensure we're not MULTI_ROLE, and only using the legacy-role. assert service_roles["framework-roles"] is None assert service_roles["framework-role"] == LEGACY_ROLE
def _install_and_fetch_service_roles(options: dict) -> (dict, dict): # this config produces 1 hello's + 2 world's: sdk_install.install( config.PACKAGE_NAME, SERVICE_NAME, 3, additional_options=options, wait_for_deployment=True ) service_roles = sdk_utils.get_service_roles(SERVICE_NAME) current_task_roles = service_roles["task-roles"] # We must have some role! assert len(current_task_roles) > 0 return service_roles, current_task_roles
def test_replace_pods_to_legacy_role(): # Issue pod replace operations till we move the pods to the legacy role. replace_pods = ["hello-0", "world-0", "world-1"] for pod in replace_pods: # start replace and wait for it to finish sdk_cmd.svc_cli(config.PACKAGE_NAME, SERVICE_NAME, "pod replace {}".format(pod)) sdk_plan.wait_for_kicked_off_recovery( SERVICE_NAME, timeout_seconds=RECOVERY_TIMEOUT_SECONDS) sdk_plan.wait_for_completed_recovery( SERVICE_NAME, timeout_seconds=RECOVERY_TIMEOUT_SECONDS) # Get the current service state to verify roles have applied. service_roles = sdk_utils.get_service_roles(SERVICE_NAME) current_task_roles = service_roles["task-roles"] task_name = "{}-server".format(pod) # Ensure we have transitioned over to the legacy role. assert current_task_roles[task_name] == LEGACY_ROLE # Get refreshed roles after pod replace's service_roles = sdk_utils.get_service_roles(SERVICE_NAME) current_task_roles = service_roles["task-roles"] # We must have some role! assert len(current_task_roles) > 0 assert LEGACY_ROLE in current_task_roles.values() assert ENFORCED_ROLE not in current_task_roles.values() # Ensure we're MULTI_ROLE assert service_roles["framework-roles"] is not None assert service_roles["framework-role"] is None assert len(service_roles["framework-roles"]) == 2 assert LEGACY_ROLE in service_roles["framework-roles"] assert ENFORCED_ROLE in service_roles["framework-roles"]
def test_disable_enforce_role(): # Turn off enforce role sdk_cmd.run_cli("marathon group update /{} enforceRole=false".format(ENFORCED_ROLE)) # Get the current service state to verify roles have applied. service_roles = sdk_utils.get_service_roles(SERVICE_NAME) current_task_roles = service_roles["task-roles"] # We must have some role! assert len(current_task_roles) > 0 assert LEGACY_ROLE not in current_task_roles.values() assert ENFORCED_ROLE in current_task_roles.values() assert service_roles["framework-roles"] is None assert service_roles["framework-role"] == ENFORCED_ROLE
def test_initial_upgrade(): options = {"service": {"name": SERVICE_NAME}} sdk_upgrade.test_upgrade( config.PACKAGE_NAME, SERVICE_NAME, 3, from_version=UPGRADE_FROM, from_options=options ) # Get the current service state to verify roles have applied. service_roles = sdk_utils.get_service_roles(SERVICE_NAME) current_task_roles = service_roles["task-roles"] # We must have some role! assert len(current_task_roles) > 0 assert LEGACY_ROLE in current_task_roles.values() assert ENFORCED_ROLE not in current_task_roles.values() assert service_roles["framework-roles"] is None assert service_roles["framework-role"] == ENFORCED_ROLE
def test_initial_install(): # Create group without enforced roles. options = {"service": {"name": SERVICE_NAME}} # this config produces 1 hello's + 2 world's: sdk_install.install(config.PACKAGE_NAME, SERVICE_NAME, 3, additional_options=options) # Get the current service state to verify roles have applied. service_roles = sdk_utils.get_service_roles(SERVICE_NAME) current_task_roles = service_roles["task-roles"] # We must have some role! assert len(current_task_roles) > 0 assert LEGACY_ROLE not in current_task_roles.values() assert ENFORCED_ROLE in current_task_roles.values() assert service_roles["framework-roles"] is None assert service_roles["framework-role"] == ENFORCED_ROLE