def test_custom_decommission(): foldered_name = sdk_utils.get_foldered_name(config.SERVICE_NAME) marathon_config = sdk_marathon.get_config(foldered_name) marathon_config["env"]["WORLD_COUNT"] = "1" sdk_marathon.update_app(marathon_config) sdk_plan.wait_for_completed_plan(foldered_name, "decommission") decommission_plan = sdk_plan.get_decommission_plan(foldered_name) log.info(sdk_plan.plan_string("decommission", decommission_plan)) custom_step_name = decommission_plan["phases"][0]["steps"][0]["name"] assert "custom_decommission_step" == custom_step_name # scale back up marathon_config = sdk_marathon.get_config(foldered_name) marathon_config["env"]["WORLD_COUNT"] = "2" sdk_marathon.update_app(marathon_config) sdk_plan.wait_for_completed_deployment(foldered_name) # Let's decommission again! marathon_config = sdk_marathon.get_config(foldered_name) marathon_config["env"]["WORLD_COUNT"] = "1" sdk_marathon.update_app(marathon_config) sdk_plan.wait_for_completed_deployment(foldered_name) sdk_plan.wait_for_completed_plan(foldered_name, "decommission") decommission_plan = sdk_plan.get_decommission_plan(foldered_name) log.info(sdk_plan.plan_string("decommission", decommission_plan)) custom_step_name = decommission_plan["phases"][0]["steps"][0]["name"] assert "custom_decommission_step" == custom_step_name
def test_deploy(): sdk_plan.wait_for_completed_deployment(config.SERVICE_NAME) deployment_plan = sdk_plan.get_deployment_plan(config.SERVICE_NAME) log.info(sdk_plan.plan_string("deploy", deployment_plan)) assert len(deployment_plan["phases"]) == 1 assert deployment_plan["phases"][0]["name"] == "hello" assert len(deployment_plan["phases"][0]["steps"]) == 1
def run_plan(plan_name, params=None): sdk_plan.start_plan(config.SERVICE_NAME, plan_name, params) started_plan = sdk_plan.get_plan(config.SERVICE_NAME, plan_name) log.info(sdk_plan.plan_string(plan_name, started_plan)) assert len(started_plan["phases"]) == 1 assert started_plan["phases"][0]["name"] == plan_name + "-deploy" assert len(started_plan["phases"][0]["steps"]) == 2 sdk_plan.wait_for_completed_plan(config.SERVICE_NAME, plan_name)
def test_sidecar(): sdk_plan.start_plan(config.SERVICE_NAME, "sidecar") started_plan = sdk_plan.get_plan(config.SERVICE_NAME, "sidecar") log.info(sdk_plan.plan_string("sidecar", started_plan)) assert len(started_plan["phases"]) == 1 assert started_plan["phases"][0]["name"] == "sidecar-deploy" assert len(started_plan["phases"][0]["steps"]) == 2 sdk_plan.wait_for_completed_plan(config.SERVICE_NAME, "sidecar")
def test_deploy(): deployment_plan = sdk_plan.get_deployment_plan(config.SERVICE_NAME) log.info(sdk_plan.plan_string("deploy", deployment_plan)) assert len(deployment_plan["phases"]) == 3 assert deployment_plan["phases"][0]["name"] == "hello-deploy" assert deployment_plan["phases"][1]["name"] == "world-server-deploy" assert deployment_plan["phases"][2]["name"] == "world-once-deploy" assert len(deployment_plan["phases"][0]["steps"]) == 2 assert len(deployment_plan["phases"][1]["steps"]) == 1 assert len(deployment_plan["phases"][2]["steps"]) == 1
def wait_for_removal_log_deploy_plan(): if not sdk_marathon.app_exists(service_name): return True # App still exists, print the deploy plan. Best effort: It is expected for the scheduler # to become unavailable once uninstall completes. try: log.info( sdk_plan.plan_string("deploy", sdk_plan.get_plan_once(service_name, "deploy")) ) except Exception: pass # best effort attempt at logging plan content return False
def test_overlay_network(): """Verify that the current deploy plan matches the expected plan from the spec.""" deployment_plan = sdk_plan.wait_for_completed_deployment( config.SERVICE_NAME) log.info(sdk_plan.plan_string("deploy", deployment_plan)) # test that the tasks are all up, which tests the overlay DNS framework_tasks = sdk_tasks.get_service_tasks(config.SERVICE_NAME) expected_running_tasks = [ "overlay-vip-0-server", "overlay-0-server", "host-vip-0-server", "host-0-server", ] assert set(expected_running_tasks) == set( [t.name for t in framework_tasks]) for task in framework_tasks: name = task.name if name.startswith("host-"): assert "ports" in task.resources.keys( ), "Task {} should have port resources".format(name) sdk_networks.check_task_network(name, expected_network_name=None) elif name.startswith("overlay-"): assert ("ports" not in task.resources.keys() ), "Task {} should NOT have port resources".format(name) sdk_networks.check_task_network(name) else: assert False, "Unknown task {}".format(name) endpoints_result = sdk_networks.get_endpoint_names(config.PACKAGE_NAME, config.SERVICE_NAME) assert len(endpoints_result) == 2, "Expected 2 endpoints, got: {}".format( endpoints_result) overlay_endpoints_result = sdk_networks.get_endpoint( config.PACKAGE_NAME, config.SERVICE_NAME, "overlay-vip") assert ("address" in overlay_endpoints_result.keys() ), "overlay endpoints missing 'address': {}".format( overlay_endpoints_result) assert len(overlay_endpoints_result["address"]) == 1 assert overlay_endpoints_result["address"][0].startswith("9") overlay_port = overlay_endpoints_result["address"][0].split(":")[-1] assert overlay_port == "4044" assert "dns" in overlay_endpoints_result.keys() assert len(overlay_endpoints_result["dns"]) == 1 assert overlay_endpoints_result["dns"][0] == sdk_hosts.autoip_host( config.SERVICE_NAME, "overlay-vip-0-server", 4044) host_endpoints_result = sdk_networks.get_endpoint(config.PACKAGE_NAME, config.SERVICE_NAME, "host-vip") assert ( "address" in host_endpoints_result.keys() ), "overlay endpoints missing 'address'" "{}".format(host_endpoints_result) assert len(host_endpoints_result["address"]) == 1 assert host_endpoints_result["address"][0].startswith("10") host_port = host_endpoints_result["address"][0].split(":")[-1] assert host_port == "4044" assert "dns" in host_endpoints_result.keys() assert len(host_endpoints_result["dns"]) == 1 assert host_endpoints_result["dns"][0] == sdk_hosts.autoip_host( config.SERVICE_NAME, "host-vip-0-server", 4044)
def test_overlay_network(): """Verify that the current deploy plan matches the expected plan from the spec.""" deployment_plan = sdk_plan.wait_for_completed_deployment(config.SERVICE_NAME) log.info(sdk_plan.plan_string("deploy", deployment_plan)) # test that the tasks are all up, which tests the overlay DNS framework_tasks = sdk_tasks.get_service_tasks(config.SERVICE_NAME) expected_running_tasks = [ "overlay-vip-0-server", "overlay-0-server", "host-vip-0-server", "host-0-server" ] assert set(expected_running_tasks) == set([t.name for t in framework_tasks]) for task in framework_tasks: name = task.name if name.startswith("host-"): assert "ports" in task.resources.keys(), "Task {} should have port resources".format( name ) sdk_networks.check_task_network(name, expected_network_name=None) elif name.startswith("overlay-"): assert ( "ports" not in task.resources.keys() ), "Task {} should NOT have port resources".format( name ) sdk_networks.check_task_network(name) else: assert False, "Unknown task {}".format(name) endpoints_result = sdk_networks.get_endpoint_names(config.PACKAGE_NAME, config.SERVICE_NAME) assert len(endpoints_result) == 2, "Expected 2 endpoints, got: {}".format(endpoints_result) overlay_endpoints_result = sdk_networks.get_endpoint( config.PACKAGE_NAME, config.SERVICE_NAME, "overlay-vip" ) assert "address" in overlay_endpoints_result.keys(), ( "overlay endpoints missing 'address': {}".format(overlay_endpoints_result) ) assert len(overlay_endpoints_result["address"]) == 1 assert overlay_endpoints_result["address"][0].startswith("9") overlay_port = overlay_endpoints_result["address"][0].split(":")[-1] assert overlay_port == "4044" assert "dns" in overlay_endpoints_result.keys() assert len(overlay_endpoints_result["dns"]) == 1 assert overlay_endpoints_result["dns"][0] == sdk_hosts.autoip_host( config.SERVICE_NAME, "overlay-vip-0-server", 4044 ) host_endpoints_result = sdk_networks.get_endpoint( config.PACKAGE_NAME, config.SERVICE_NAME, "host-vip" ) assert "address" in host_endpoints_result.keys(), ( "overlay endpoints missing 'address'" "{}".format(host_endpoints_result) ) assert len(host_endpoints_result["address"]) == 1 assert host_endpoints_result["address"][0].startswith("10") host_port = host_endpoints_result["address"][0].split(":")[-1] assert host_port == "4044" assert "dns" in host_endpoints_result.keys() assert len(host_endpoints_result["dns"]) == 1 assert host_endpoints_result["dns"][0] == sdk_hosts.autoip_host( config.SERVICE_NAME, "host-vip-0-server", 4044 )