import sys
import os
import time
import datetime
from xmlrpc.client import DateTime
import docker
from colorama import Fore, Style
import subprocess
import calendar

# Declare variables for service name and sleep time
test_name=sys.argv[1]
timeout=int(sys.argv[2])
test_path="tests/compose/" + test_name + "/"
compose_file=test_path + "docker-compose.yml"

client = docker.APIClient(base_url='unix://var/run/docker.sock')

containers = []

# Stop containers
def stop(exit_code):
    print_logs()
    sys.stdout.flush()
    print(subprocess.check_output(f"docker compose -f {compose_file} down", shell=True).decode())
    sys.exit(exit_code)

def health_checks(deadline):
    exit_code = 0
    #Iterating trough all containers dictionary
    for container in client.containers(all=True):
        #Perform "docker container inspect" on container based on container ID and save output to a dictionary
        container_inspect = client.inspect_container(container['Id']) #Dict

        if "Health" in container_inspect['State'].keys():
            if container_inspect['State']['Health']['Status'] == "healthy":
                print(Fore.GREEN + "Health status for " + container_inspect['Name'].replace("/", "") + " : " + Fore.CYAN + container_inspect['State']['Health']['Status'] + Style.RESET_ALL)
            if container_inspect['State']['Health']['Status'] != "healthy":
                print(Fore.RED + "Container " + container_inspect['Name'].replace("/", "") + " is " + Fore.YELLOW + container_inspect['State']['Health']['Status']
                      + Fore.RED + ", FailingStreak: " + Fore.YELLOW + str(container_inspect['State']['Health']['FailingStreak'])
                      + Fore.RED + ", Log: " + Fore.YELLOW + str(container_inspect['State']['Health']['Log']) + Style.RESET_ALL)
                exit_code = 1
        else:
            if container_inspect['State']['Status'] == "running":
                print(Fore.GREEN + "Running status for " + container_inspect['Name'].replace("/", "") + " : " + Fore.BLUE + container_inspect['State']['Status'] + Style.RESET_ALL)
            if container_inspect['State']['Status'] != "running":
                print(Fore.RED + "Container " + container_inspect['Name'].replace("/", "") + " state is: " + Fore.YELLOW + container_inspect['State']['Status'] + Style.RESET_ALL)
                exit_code = 1

        #Saving Id, Name and state to a new dictionary
        containers_dict = {}
        containers_dict['Name'] = container_inspect['Name'].replace("/", "")
        containers_dict['Id'] = container_inspect['Id']
        containers_dict['State'] = container_inspect['State']

        #Adding the generated dictionary to a list
        containers.append(containers_dict)

    if exit_code == 0:
        return True
    elif exit_code != 0 and deadline < datetime.datetime.now().timestamp():
        stop(exit_code)

def print_logs():
    print("Printing logs ...")
    #Iterating through docker container inspect list and print logs
    for container in containers:
        print(Fore.LIGHTMAGENTA_EX + "Printing logs for: " + Fore.GREEN + container['Name'] + Style.RESET_ALL)
        sys.stdout.flush()
        print(subprocess.check_output('docker container logs ' + container['Name'], shell=True).decode())

#Iterating over hooks in test folder and running them
def hooks():
    print(Fore.LIGHTMAGENTA_EX + "Running hooks" + Style.RESET_ALL)
    for test_file in sorted(os.listdir(test_path)):
        try:
            if test_file.endswith(".py"):
                sys.stdout.flush()
                print(subprocess.check_output("python3 " + test_path + test_file, shell=True).decode())
            elif test_file.endswith(".sh"):
                sys.stdout.flush()
                print(subprocess.check_output("./" + test_path + test_file, shell=True).decode())
        except subprocess.CalledProcessError as e:
            sys.stderr.write("[ERROR]: output = %s, error code = %s\n" % (e.output.decode(), e.returncode))
            stop(1)

# Start up containers
sys.stdout.flush()
deadline=datetime.datetime.now()+datetime.timedelta(minutes=timeout)
deadline=calendar.timegm(deadline.timetuple())
print(subprocess.check_output(f"docker compose -f {compose_file} up -d", shell=True).decode())
print()
print(Fore.LIGHTMAGENTA_EX + "Sleeping for 10s" + Style.RESET_ALL)
time.sleep(10)
print()
sys.stdout.flush()
print(subprocess.check_output("docker ps -a", shell=True).decode())
print()
while not health_checks(deadline):
    print(Fore.LIGHTMAGENTA_EX + "Sleeping for 10s" + Style.RESET_ALL)
    sys.stdout.flush()
    time.sleep(10)
print()
hooks()
print()
stop(0)

a9b7ed0695cb511c9f1621c531a7a9252a091911
<mask token>


def stop(exit_code):
    print_logs()
    sys.stdout.flush()
    print(subprocess.check_output(f'docker compose -f {compose_file} down',
        shell=True).decode())
    sys.exit(exit_code)


def health_checks(deadline):
    exit_code = 0
    for container in client.containers(all=True):
        container_inspect = client.inspect_container(container['Id'])
        if 'Health' in container_inspect['State'].keys():
            if container_inspect['State']['Health']['Status'] == 'healthy':
                print(Fore.GREEN + 'Health status for ' + container_inspect
                    ['Name'].replace('/', '') + ' : ' + Fore.CYAN +
                    container_inspect['State']['Health']['Status'] + Style.
                    RESET_ALL)
            if container_inspect['State']['Health']['Status'] != 'healthy':
                print(Fore.RED + 'Container ' + container_inspect['Name'].
                    replace('/', '') + ' is ' + Fore.YELLOW +
                    container_inspect['State']['Health']['Status'] + Fore.
                    RED + ', FailingStreak: ' + Fore.YELLOW + str(
                    container_inspect['State']['Health']['FailingStreak']) +
                    Fore.RED + ', Log: ' + Fore.YELLOW + str(
                    container_inspect['State']['Health']['Log']) + Style.
                    RESET_ALL)
                exit_code = 1
        else:
            if container_inspect['State']['Status'] == 'running':
                print(Fore.GREEN + 'Running status for ' +
                    container_inspect['Name'].replace('/', '') + ' : ' +
                    Fore.BLUE + container_inspect['State']['Status'] +
                    Style.RESET_ALL)
            if container_inspect['State']['Status'] != 'running':
                print(Fore.RED + 'Container ' + container_inspect['Name'].
                    replace('/', '') + ' state is: ' + Fore.YELLOW +
                    container_inspect['State']['Status'] + Style.RESET_ALL)
                exit_code = 1
        containers_dict = {}
        containers_dict['Name'] = container_inspect['Name'].replace('/', '')
        containers_dict['Id'] = container_inspect['Id']
        containers_dict['State'] = container_inspect['State']
        containers.append(containers_dict)
    if exit_code == 0:
        return True
    elif exit_code != 0 and deadline < datetime.datetime.now().timestamp():
        stop(exit_code)


def print_logs():
    print('Printing logs ...')
    for container in containers:
        print(Fore.LIGHTMAGENTA_EX + 'Printing logs for: ' + Fore.GREEN +
            container['Name'] + Style.RESET_ALL)
        sys.stdout.flush()
        print(subprocess.check_output('docker container logs ' + container[
            'Name'], shell=True).decode())


def hooks():
    print(Fore.LIGHTMAGENTA_EX + 'Running hooks' + Style.RESET_ALL)
    for test_file in sorted(os.listdir(test_path)):
        try:
            if test_file.endswith('.py'):
                sys.stdout.flush()
                print(subprocess.check_output('python3 ' + test_path +
                    test_file, shell=True).decode())
            elif test_file.endswith('.sh'):
                sys.stdout.flush()
                print(subprocess.check_output('./' + test_path + test_file,
                    shell=True).decode())
        except subprocess.CalledProcessError as e:
            sys.stderr.write('[ERROR]: output = %s, error code = %s\n' % (e
                .output.decode(), e.returncode))
            stop(1)


<mask token>

<mask token>


def stop(exit_code):
    print_logs()
    sys.stdout.flush()
    print(subprocess.check_output(f'docker compose -f {compose_file} down',
        shell=True).decode())
    sys.exit(exit_code)


def health_checks(deadline):
    exit_code = 0
    for container in client.containers(all=True):
        container_inspect = client.inspect_container(container['Id'])
        if 'Health' in container_inspect['State'].keys():
            if container_inspect['State']['Health']['Status'] == 'healthy':
                print(Fore.GREEN + 'Health status for ' + container_inspect
                    ['Name'].replace('/', '') + ' : ' + Fore.CYAN +
                    container_inspect['State']['Health']['Status'] + Style.
                    RESET_ALL)
            if container_inspect['State']['Health']['Status'] != 'healthy':
                print(Fore.RED + 'Container ' + container_inspect['Name'].
                    replace('/', '') + ' is ' + Fore.YELLOW +
                    container_inspect['State']['Health']['Status'] + Fore.
                    RED + ', FailingStreak: ' + Fore.YELLOW + str(
                    container_inspect['State']['Health']['FailingStreak']) +
                    Fore.RED + ', Log: ' + Fore.YELLOW + str(
                    container_inspect['State']['Health']['Log']) + Style.
                    RESET_ALL)
                exit_code = 1
        else:
            if container_inspect['State']['Status'] == 'running':
                print(Fore.GREEN + 'Running status for ' +
                    container_inspect['Name'].replace('/', '') + ' : ' +
                    Fore.BLUE + container_inspect['State']['Status'] +
                    Style.RESET_ALL)
            if container_inspect['State']['Status'] != 'running':
                print(Fore.RED + 'Container ' + container_inspect['Name'].
                    replace('/', '') + ' state is: ' + Fore.YELLOW +
                    container_inspect['State']['Status'] + Style.RESET_ALL)
                exit_code = 1
        containers_dict = {}
        containers_dict['Name'] = container_inspect['Name'].replace('/', '')
        containers_dict['Id'] = container_inspect['Id']
        containers_dict['State'] = container_inspect['State']
        containers.append(containers_dict)
    if exit_code == 0:
        return True
    elif exit_code != 0 and deadline < datetime.datetime.now().timestamp():
        stop(exit_code)


def print_logs():
    print('Printing logs ...')
    for container in containers:
        print(Fore.LIGHTMAGENTA_EX + 'Printing logs for: ' + Fore.GREEN +
            container['Name'] + Style.RESET_ALL)
        sys.stdout.flush()
        print(subprocess.check_output('docker container logs ' + container[
            'Name'], shell=True).decode())


def hooks():
    print(Fore.LIGHTMAGENTA_EX + 'Running hooks' + Style.RESET_ALL)
    for test_file in sorted(os.listdir(test_path)):
        try:
            if test_file.endswith('.py'):
                sys.stdout.flush()
                print(subprocess.check_output('python3 ' + test_path +
                    test_file, shell=True).decode())
            elif test_file.endswith('.sh'):
                sys.stdout.flush()
                print(subprocess.check_output('./' + test_path + test_file,
                    shell=True).decode())
        except subprocess.CalledProcessError as e:
            sys.stderr.write('[ERROR]: output = %s, error code = %s\n' % (e
                .output.decode(), e.returncode))
            stop(1)


sys.stdout.flush()
<mask token>
print(subprocess.check_output(f'docker compose -f {compose_file} up -d',
    shell=True).decode())
print()
print(Fore.LIGHTMAGENTA_EX + 'Sleeping for 10s' + Style.RESET_ALL)
time.sleep(10)
print()
sys.stdout.flush()
print(subprocess.check_output('docker ps -a', shell=True).decode())
print()
while not health_checks(deadline):
    print(Fore.LIGHTMAGENTA_EX + 'Sleeping for 10s' + Style.RESET_ALL)
    sys.stdout.flush()
    time.sleep(10)
print()
hooks()
print()
stop(0)

<mask token>
test_name = sys.argv[1]
timeout = int(sys.argv[2])
test_path = 'tests/compose/' + test_name + '/'
compose_file = test_path + 'docker-compose.yml'
client = docker.APIClient(base_url='unix://var/run/docker.sock')
containers = []


def stop(exit_code):
    print_logs()
    sys.stdout.flush()
    print(subprocess.check_output(f'docker compose -f {compose_file} down',
        shell=True).decode())
    sys.exit(exit_code)


def health_checks(deadline):
    exit_code = 0
    for container in client.containers(all=True):
        container_inspect = client.inspect_container(container['Id'])
        if 'Health' in container_inspect['State'].keys():
            if container_inspect['State']['Health']['Status'] == 'healthy':
                print(Fore.GREEN + 'Health status for ' + container_inspect
                    ['Name'].replace('/', '') + ' : ' + Fore.CYAN +
                    container_inspect['State']['Health']['Status'] + Style.
                    RESET_ALL)
            if container_inspect['State']['Health']['Status'] != 'healthy':
                print(Fore.RED + 'Container ' + container_inspect['Name'].
                    replace('/', '') + ' is ' + Fore.YELLOW +
                    container_inspect['State']['Health']['Status'] + Fore.
                    RED + ', FailingStreak: ' + Fore.YELLOW + str(
                    container_inspect['State']['Health']['FailingStreak']) +
                    Fore.RED + ', Log: ' + Fore.YELLOW + str(
                    container_inspect['State']['Health']['Log']) + Style.
                    RESET_ALL)
                exit_code = 1
        else:
            if container_inspect['State']['Status'] == 'running':
                print(Fore.GREEN + 'Running status for ' +
                    container_inspect['Name'].replace('/', '') + ' : ' +
                    Fore.BLUE + container_inspect['State']['Status'] +
                    Style.RESET_ALL)
            if container_inspect['State']['Status'] != 'running':
                print(Fore.RED + 'Container ' + container_inspect['Name'].
                    replace('/', '') + ' state is: ' + Fore.YELLOW +
                    container_inspect['State']['Status'] + Style.RESET_ALL)
                exit_code = 1
        containers_dict = {}
        containers_dict['Name'] = container_inspect['Name'].replace('/', '')
        containers_dict['Id'] = container_inspect['Id']
        containers_dict['State'] = container_inspect['State']
        containers.append(containers_dict)
    if exit_code == 0:
        return True
    elif exit_code != 0 and deadline < datetime.datetime.now().timestamp():
        stop(exit_code)


def print_logs():
    print('Printing logs ...')
    for container in containers:
        print(Fore.LIGHTMAGENTA_EX + 'Printing logs for: ' + Fore.GREEN +
            container['Name'] + Style.RESET_ALL)
        sys.stdout.flush()
        print(subprocess.check_output('docker container logs ' + container[
            'Name'], shell=True).decode())


def hooks():
    print(Fore.LIGHTMAGENTA_EX + 'Running hooks' + Style.RESET_ALL)
    for test_file in sorted(os.listdir(test_path)):
        try:
            if test_file.endswith('.py'):
                sys.stdout.flush()
                print(subprocess.check_output('python3 ' + test_path +
                    test_file, shell=True).decode())
            elif test_file.endswith('.sh'):
                sys.stdout.flush()
                print(subprocess.check_output('./' + test_path + test_file,
                    shell=True).decode())
        except subprocess.CalledProcessError as e:
            sys.stderr.write('[ERROR]: output = %s, error code = %s\n' % (e
                .output.decode(), e.returncode))
            stop(1)


sys.stdout.flush()
deadline = datetime.datetime.now() + datetime.timedelta(minutes=timeout)
deadline = calendar.timegm(deadline.timetuple())
print(subprocess.check_output(f'docker compose -f {compose_file} up -d',
    shell=True).decode())
print()
print(Fore.LIGHTMAGENTA_EX + 'Sleeping for 10s' + Style.RESET_ALL)
time.sleep(10)
print()
sys.stdout.flush()
print(subprocess.check_output('docker ps -a', shell=True).decode())
print()
while not health_checks(deadline):
    print(Fore.LIGHTMAGENTA_EX + 'Sleeping for 10s' + Style.RESET_ALL)
    sys.stdout.flush()
    time.sleep(10)
print()
hooks()
print()
stop(0)

import sys
import os
import time
import datetime
from xmlrpc.client import DateTime
import docker
from colorama import Fore, Style
import subprocess
import calendar
test_name = sys.argv[1]
timeout = int(sys.argv[2])
test_path = 'tests/compose/' + test_name + '/'
compose_file = test_path + 'docker-compose.yml'
client = docker.APIClient(base_url='unix://var/run/docker.sock')
containers = []


def stop(exit_code):
    print_logs()
    sys.stdout.flush()
    print(subprocess.check_output(f'docker compose -f {compose_file} down',
        shell=True).decode())
    sys.exit(exit_code)


def health_checks(deadline):
    exit_code = 0
    for container in client.containers(all=True):
        container_inspect = client.inspect_container(container['Id'])
        if 'Health' in container_inspect['State'].keys():
            if container_inspect['State']['Health']['Status'] == 'healthy':
                print(Fore.GREEN + 'Health status for ' + container_inspect
                    ['Name'].replace('/', '') + ' : ' + Fore.CYAN +
                    container_inspect['State']['Health']['Status'] + Style.
                    RESET_ALL)
            if container_inspect['State']['Health']['Status'] != 'healthy':
                print(Fore.RED + 'Container ' + container_inspect['Name'].
                    replace('/', '') + ' is ' + Fore.YELLOW +
                    container_inspect['State']['Health']['Status'] + Fore.
                    RED + ', FailingStreak: ' + Fore.YELLOW + str(
                    container_inspect['State']['Health']['FailingStreak']) +
                    Fore.RED + ', Log: ' + Fore.YELLOW + str(
                    container_inspect['State']['Health']['Log']) + Style.
                    RESET_ALL)
                exit_code = 1
        else:
            if container_inspect['State']['Status'] == 'running':
                print(Fore.GREEN + 'Running status for ' +
                    container_inspect['Name'].replace('/', '') + ' : ' +
                    Fore.BLUE + container_inspect['State']['Status'] +
                    Style.RESET_ALL)
            if container_inspect['State']['Status'] != 'running':
                print(Fore.RED + 'Container ' + container_inspect['Name'].
                    replace('/', '') + ' state is: ' + Fore.YELLOW +
                    container_inspect['State']['Status'] + Style.RESET_ALL)
                exit_code = 1
        containers_dict = {}
        containers_dict['Name'] = container_inspect['Name'].replace('/', '')
        containers_dict['Id'] = container_inspect['Id']
        containers_dict['State'] = container_inspect['State']
        containers.append(containers_dict)
    if exit_code == 0:
        return True
    elif exit_code != 0 and deadline < datetime.datetime.now().timestamp():
        stop(exit_code)


def print_logs():
    print('Printing logs ...')
    for container in containers:
        print(Fore.LIGHTMAGENTA_EX + 'Printing logs for: ' + Fore.GREEN +
            container['Name'] + Style.RESET_ALL)
        sys.stdout.flush()
        print(subprocess.check_output('docker container logs ' + container[
            'Name'], shell=True).decode())


def hooks():
    print(Fore.LIGHTMAGENTA_EX + 'Running hooks' + Style.RESET_ALL)
    for test_file in sorted(os.listdir(test_path)):
        try:
            if test_file.endswith('.py'):
                sys.stdout.flush()
                print(subprocess.check_output('python3 ' + test_path +
                    test_file, shell=True).decode())
            elif test_file.endswith('.sh'):
                sys.stdout.flush()
                print(subprocess.check_output('./' + test_path + test_file,
                    shell=True).decode())
        except subprocess.CalledProcessError as e:
            sys.stderr.write('[ERROR]: output = %s, error code = %s\n' % (e
                .output.decode(), e.returncode))
            stop(1)


sys.stdout.flush()
deadline = datetime.datetime.now() + datetime.timedelta(minutes=timeout)
deadline = calendar.timegm(deadline.timetuple())
print(subprocess.check_output(f'docker compose -f {compose_file} up -d',
    shell=True).decode())
print()
print(Fore.LIGHTMAGENTA_EX + 'Sleeping for 10s' + Style.RESET_ALL)
time.sleep(10)
print()
sys.stdout.flush()
print(subprocess.check_output('docker ps -a', shell=True).decode())
print()
while not health_checks(deadline):
    print(Fore.LIGHTMAGENTA_EX + 'Sleeping for 10s' + Style.RESET_ALL)
    sys.stdout.flush()
    time.sleep(10)
print()
hooks()
print()
stop(0)

import sys
import os
import time
import datetime
from xmlrpc.client import DateTime
import docker
from colorama import Fore, Style
import subprocess
import calendar

# Declare variables for service name and sleep time
test_name=sys.argv[1]
timeout=int(sys.argv[2])
test_path="tests/compose/" + test_name + "/"
compose_file=test_path + "docker-compose.yml"

client = docker.APIClient(base_url='unix://var/run/docker.sock')

containers = []

# Stop containers
def stop(exit_code):
    print_logs()
    sys.stdout.flush()
    print(subprocess.check_output(f"docker compose -f {compose_file} down", shell=True).decode())
    sys.exit(exit_code)

def health_checks(deadline):
    exit_code = 0
    #Iterating trough all containers dictionary
    for container in client.containers(all=True):
        #Perform "docker container inspect" on container based on container ID and save output to a dictionary
        container_inspect = client.inspect_container(container['Id']) #Dict

        if "Health" in container_inspect['State'].keys():
            if container_inspect['State']['Health']['Status'] == "healthy":
                print(Fore.GREEN + "Health status for " + container_inspect['Name'].replace("/", "") + " : " + Fore.CYAN + container_inspect['State']['Health']['Status'] + Style.RESET_ALL)
            if container_inspect['State']['Health']['Status'] != "healthy":
                print(Fore.RED + "Container " + container_inspect['Name'].replace("/", "") + " is " + Fore.YELLOW + container_inspect['State']['Health']['Status']
                      + Fore.RED + ", FailingStreak: " + Fore.YELLOW + str(container_inspect['State']['Health']['FailingStreak'])
                      + Fore.RED + ", Log: " + Fore.YELLOW + str(container_inspect['State']['Health']['Log']) + Style.RESET_ALL)
                exit_code = 1
        else:
            if container_inspect['State']['Status'] == "running":
                print(Fore.GREEN + "Running status for " + container_inspect['Name'].replace("/", "") + " : " + Fore.BLUE + container_inspect['State']['Status'] + Style.RESET_ALL)
            if container_inspect['State']['Status'] != "running":
                print(Fore.RED + "Container " + container_inspect['Name'].replace("/", "") + " state is: " + Fore.YELLOW + container_inspect['State']['Status'] + Style.RESET_ALL)
                exit_code = 1

        #Saving Id, Name and state to a new dictionary
        containers_dict = {}
        containers_dict['Name'] = container_inspect['Name'].replace("/", "")
        containers_dict['Id'] = container_inspect['Id']
        containers_dict['State'] = container_inspect['State']

        #Adding the generated dictionary to a list
        containers.append(containers_dict)

    if exit_code == 0:
        return True
    elif exit_code != 0 and deadline < datetime.datetime.now().timestamp():
        stop(exit_code)

def print_logs():
    print("Printing logs ...")
    #Iterating through docker container inspect list and print logs
    for container in containers:
        print(Fore.LIGHTMAGENTA_EX + "Printing logs for: " + Fore.GREEN + container['Name'] + Style.RESET_ALL)
        sys.stdout.flush()
        print(subprocess.check_output('docker container logs ' + container['Name'], shell=True).decode())

#Iterating over hooks in test folder and running them
def hooks():
    print(Fore.LIGHTMAGENTA_EX + "Running hooks" + Style.RESET_ALL)
    for test_file in sorted(os.listdir(test_path)):
        try:
            if test_file.endswith(".py"):
                sys.stdout.flush()
                print(subprocess.check_output("python3 " + test_path + test_file, shell=True).decode())
            elif test_file.endswith(".sh"):
                sys.stdout.flush()
                print(subprocess.check_output("./" + test_path + test_file, shell=True).decode())
        except subprocess.CalledProcessError as e:
            sys.stderr.write("[ERROR]: output = %s, error code = %s\n" % (e.output.decode(), e.returncode))
            stop(1)

# Start up containers
sys.stdout.flush()
deadline=datetime.datetime.now()+datetime.timedelta(minutes=timeout)
deadline=calendar.timegm(deadline.timetuple())
print(subprocess.check_output(f"docker compose -f {compose_file} up -d", shell=True).decode())
print()
print(Fore.LIGHTMAGENTA_EX + "Sleeping for 10s" + Style.RESET_ALL)
time.sleep(10)
print()
sys.stdout.flush()
print(subprocess.check_output("docker ps -a", shell=True).decode())
print()
while not health_checks(deadline):
    print(Fore.LIGHTMAGENTA_EX + "Sleeping for 10s" + Style.RESET_ALL)
    sys.stdout.flush()
    time.sleep(10)
print()
hooks()
print()
stop(0)
