Skip to content

Commit

Permalink
Update proxy_startup.py (Azure#25730)
Browse files Browse the repository at this point in the history
  • Loading branch information
ponopono0322 authored and mccoyp committed Sep 22, 2022
1 parent 9b1fce8 commit afaa18f
Showing 1 changed file with 12 additions and 57 deletions.
69 changes: 12 additions & 57 deletions tools/azure-sdk-tools/devtools_testutils/proxy_startup.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,14 @@
# Licensed under the MIT License. See License.txt in the project root for
# license information.
# --------------------------------------------------------------------------
import json

import os
import logging
import requests
import shlex
import sys
import time
import signal
from typing import TYPE_CHECKING

import pytest
import subprocess
Expand All @@ -20,9 +19,6 @@
from .helpers import is_live_and_not_recording
from .sanitizers import add_remove_header_sanitizer, set_custom_default_matcher

if TYPE_CHECKING:
from typing import Optional


_LOGGER = logging.getLogger()

Expand Down Expand Up @@ -61,23 +57,11 @@ def get_image_tag() -> str:
return image_tag


def get_container_info() -> "Optional[dict]":
"""Returns a dictionary containing the test proxy container's information, or None if the container isn't present"""
proc = subprocess.Popen(
shlex.split("docker container ls -a --format '{{json .}}' --filter name=" + CONTAINER_NAME),
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=subprocess.DEVNULL,
)

def delete_container() -> None:
"""Delete container if it remained"""
proc = subprocess.Popen(shlex.split(f"docker rm -f {CONTAINER_NAME}"))
output, stderr = proc.communicate()
try:
# This will succeed if we found a container with CONTAINER_NAME
return json.loads(output)
# We'll get a JSONDecodeError on Py3 (ValueError on Py2) if output is empty (i.e. there's no proxy container)
except ValueError:
# Didn't find a container with CONTAINER_NAME
return None
return None


def check_availability() -> None:
Expand Down Expand Up @@ -109,6 +93,8 @@ def create_container() -> None:
# Most of the time, running this script on a Windows machine will work just fine, as Docker defaults to Linux
# containers. However, in CI, Windows images default to _Windows_ containers. We cannot swap them. We can tell
# if we're in a CI build by checking for the environment variable TF_BUILD.
delete_container()

if sys.platform.startswith("win") and os.environ.get("TF_BUILD"):
image_prefix = WINDOWS_IMAGE_SOURCE_PREFIX
path_prefix = "C:"
Expand All @@ -119,19 +105,12 @@ def create_container() -> None:
linux_container_args = "--add-host=host.docker.internal:host-gateway"

image_tag = get_image_tag()
proc = subprocess.Popen(
subprocess.Popen(
shlex.split(
"docker container create -v '{}:{}/srv/testproxy' {} -p 5001:5001 -p 5000:5000 --name {} {}:{}".format(
REPO_ROOT,
path_prefix,
linux_container_args,
CONTAINER_NAME,
image_prefix,
image_tag,
)
f"docker run --rm --name {CONTAINER_NAME} -v '{REPO_ROOT}:{path_prefix}/srv/testproxy' "
f"{linux_container_args} -p 5001:5001 -p 5000:5000 {image_prefix}:{image_tag}"
)
)
proc.communicate()


def start_test_proxy() -> None:
Expand All @@ -158,23 +137,7 @@ def start_test_proxy() -> None:
os.environ[TOOL_ENV_VAR] = str(proc.pid)
else:
_LOGGER.info("Starting the test proxy container...")

container_info = get_container_info()
if container_info:
_LOGGER.debug("Found an existing instance of the test proxy container.")

if container_info["State"] == "running":
_LOGGER.debug("Proxy container is already running. Exiting...")
return

else:
_LOGGER.debug("No instance of the test proxy container found. Attempting creation...")
create_container()

_LOGGER.debug("Attempting to start the test proxy container...")

proc = subprocess.Popen(shlex.split("docker container start " + CONTAINER_NAME))
proc.communicate()
create_container()

# Wait for the proxy server to become available
check_proxy_availability()
Expand All @@ -199,15 +162,7 @@ def stop_test_proxy() -> None:

else:
_LOGGER.info("Stopping the test proxy container...")
container_info = get_container_info()
if container_info:
if container_info["State"] == "running":
_LOGGER.debug("Found a running instance of the test proxy container; shutting it down...")

proc = subprocess.Popen(shlex.split("docker container stop " + CONTAINER_NAME))
proc.communicate()
else:
_LOGGER.debug("No running instance of the test proxy container found. Exiting...")
subprocess.Popen(shlex.split("docker stop " + CONTAINER_NAME))


@pytest.fixture(scope="session")
Expand Down

0 comments on commit afaa18f

Please sign in to comment.