Skip to content

Commit

Permalink
#120 Fixed the db setup
Browse files Browse the repository at this point in the history
  • Loading branch information
ahsimb committed Jun 25, 2024
1 parent 3808530 commit 73ee2a3
Show file tree
Hide file tree
Showing 11 changed files with 70 additions and 73 deletions.
12 changes: 7 additions & 5 deletions tests/ci_tests/test_deploying_autopilot.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
from tests.ci_tests.utils.autopilot_deployment import AutopilotTestDeployment
from tests.ci_tests.utils.autopilot_polling import AutopilotTestPolling
from tests.ci_tests.utils.autopilot_training import AutopilotTestTraining
from tests.ci_tests.utils.checkers import skip_if_aws_credentials_not_set
from tests.ci_tests.utils.cleanup import cleanup
from tests.ci_tests.utils.parameters import cls_model_setup_params
from tests.ci_tests.utils.queries import DatabaseQueries
Expand Down Expand Up @@ -55,20 +54,23 @@ def _deploy_endpoint(job_name, endpoint_name, model_setup_params, ci_test_env: C
assert endpoint_name in list(map(lambda x: x[0], all_scripts))


@pytest.mark.parametrize("db_conn", [bfs.path.StorageBackend.onprem, bfs.path.StorageBackend.saas], indirect=True)
def test_deploy_autopilot_endpoint(db_conn, setup_ci_test_environment):
@pytest.mark.parametrize("db_conn,deploy_params", [
(bfs.path.StorageBackend.onprem, bfs.path.StorageBackend.onprem),
(bfs.path.StorageBackend.saas, bfs.path.StorageBackend.saas)
], indirect=True)
def test_deploy_autopilot_endpoint(db_conn, deploy_params, prepare_ci_test_environment):
curr_datetime = datetime.now().strftime("%y%m%d%H%M%S")
model_name = ''.join((cls_model_setup_params.model_type, curr_datetime))
job_name = ''.join((model_name, 'job'))
endpoint_name = ''.join((model_name, 'ep'))

# train
AutopilotTestTraining.train_autopilot_classification_job(
job_name, setup_ci_test_environment)
job_name, prepare_ci_test_environment)

# deploy
_deploy_endpoint(
job_name=job_name,
endpoint_name=endpoint_name,
model_setup_params=cls_model_setup_params,
db_conn=setup_ci_test_environment)
db_conn=prepare_ci_test_environment)
12 changes: 7 additions & 5 deletions tests/ci_tests/test_polling_autopilot.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,27 @@

from tests.ci_tests.utils.autopilot_polling import AutopilotTestPolling
from tests.ci_tests.utils.autopilot_training import AutopilotTestTraining
from tests.ci_tests.utils.checkers import skip_if_aws_credentials_not_set
from tests.ci_tests.utils.parameters import cls_model_setup_params


@pytest.mark.parametrize("db_conn", [bfs.path.StorageBackend.onprem, bfs.path.StorageBackend.saas], indirect=True)
def test_poll_autopilot_job(db_conn, setup_ci_test_environment):
@pytest.mark.parametrize("db_conn,deploy_params", [
(bfs.path.StorageBackend.onprem, bfs.path.StorageBackend.onprem),
(bfs.path.StorageBackend.saas, bfs.path.StorageBackend.saas)
], indirect=True)
def test_poll_autopilot_job(db_conn, deploy_params, prepare_ci_test_environment):
curr_datetime = datetime.now().strftime("%y%m%d%H%M%S")
model_name = ''.join((cls_model_setup_params.model_type, curr_datetime))
job_name = ''.join((model_name, 'job'))

# train
AutopilotTestTraining.train_autopilot_classification_job(
job_name, setup_ci_test_environment)
job_name, prepare_ci_test_environment)

# poll
status = AutopilotTestPolling.poll_autopilot_job(
job_name,
cls_model_setup_params.schema_name,
setup_ci_test_environment)
prepare_ci_test_environment)

assert len(status) == 1
assert len(status[0]) == 2
23 changes: 14 additions & 9 deletions tests/ci_tests/test_predicting_autopilot.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
from tests.ci_tests.utils.autopilot_polling import AutopilotTestPolling
from tests.ci_tests.utils.autopilot_prediction import AutopilotTestPrediction
from tests.ci_tests.utils.autopilot_training import AutopilotTestTraining
from tests.ci_tests.utils.checkers import skip_if_aws_credentials_not_set
from tests.ci_tests.utils.cleanup import cleanup
from tests.ci_tests.utils.parameters import cls_model_setup_params, \
reg_model_setup_params
Expand Down Expand Up @@ -56,39 +55,45 @@ def _make_prediction(job_name, endpoint_name, model_setup_params, ci_test_env: C
assert predictions


@pytest.mark.parametrize("db_conn", [bfs.path.StorageBackend.onprem, bfs.path.StorageBackend.saas], indirect=True)
def test_predict_autopilot_regression_job(db_conn, setup_ci_test_environment):
@pytest.mark.parametrize("db_conn,deploy_params", [
(bfs.path.StorageBackend.onprem, bfs.path.StorageBackend.onprem),
(bfs.path.StorageBackend.saas, bfs.path.StorageBackend.saas)
], indirect=True)
def test_predict_autopilot_regression_job(db_conn, deploy_params, prepare_ci_test_environment):
curr_datetime = datetime.now().strftime("%y%m%d%H%M%S")
model_name = ''.join((reg_model_setup_params.model_type, curr_datetime))
job_name = ''.join((model_name, 'job'))
endpoint_name = ''.join((model_name, 'ep'))

# train
AutopilotTestTraining.train_autopilot_regression_job(
job_name, setup_ci_test_environment)
job_name, prepare_ci_test_environment)

# deploy endpoint and make prediction on it
_make_prediction(
job_name=job_name,
endpoint_name=endpoint_name,
model_setup_params=reg_model_setup_params,
db_conn=setup_ci_test_environment)
db_conn=prepare_ci_test_environment)


@pytest.mark.parametrize("db_conn", [bfs.path.StorageBackend.onprem, bfs.path.StorageBackend.saas], indirect=True)
def test_predict_autopilot_classification_job(db_conn, setup_ci_test_environment):
@pytest.mark.parametrize("db_conn,deploy_params", [
(bfs.path.StorageBackend.onprem, bfs.path.StorageBackend.onprem),
(bfs.path.StorageBackend.saas, bfs.path.StorageBackend.saas)
], indirect=True)
def test_predict_autopilot_classification_job(db_conn, deploy_params, prepare_ci_test_environment):
curr_datetime = datetime.now().strftime("%y%m%d%H%M%S")
model_name = ''.join((cls_model_setup_params.model_type, curr_datetime))
job_name = ''.join((model_name, 'job'))
endpoint_name = ''.join((model_name, 'ep'))

# train
AutopilotTestTraining.train_autopilot_classification_job(
job_name, setup_ci_test_environment)
job_name, prepare_ci_test_environment)

# deploy endpoint and make prediction on it
_make_prediction(
job_name=job_name,
endpoint_name=endpoint_name,
model_setup_params=cls_model_setup_params,
db_conn=setup_ci_test_environment)
db_conn=prepare_ci_test_environment)
22 changes: 14 additions & 8 deletions tests/ci_tests/test_training_autopilot.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,33 +10,39 @@
from tests.ci_tests.utils.queries import DatabaseQueries


@pytest.mark.parametrize("db_conn", [bfs.path.StorageBackend.onprem, bfs.path.StorageBackend.saas], indirect=True)
def test_train_autopilot_regression_job(db_conn, setup_ci_test_environment):
@pytest.mark.parametrize("db_conn,deploy_params", [
(bfs.path.StorageBackend.onprem, bfs.path.StorageBackend.onprem),
(bfs.path.StorageBackend.saas, bfs.path.StorageBackend.saas)
], indirect=True)
def test_train_autopilot_regression_job(db_conn, deploy_params, prepare_ci_test_environment):
curr_datetime = datetime.now().strftime("%y%m%d%H%M%S")
model_name = ''.join((reg_model_setup_params.model_type, curr_datetime))
job_name = ''.join((model_name, 'job'))

# train
AutopilotTestTraining.train_autopilot_regression_job(
job_name, setup_ci_test_environment)
job_name, prepare_ci_test_environment)

_assert_training_job(
job_name, reg_model_setup_params, setup_ci_test_environment)
job_name, reg_model_setup_params, prepare_ci_test_environment)


@pytest.mark.parametrize("db_conn", [bfs.path.StorageBackend.onprem, bfs.path.StorageBackend.saas], indirect=True)
def test_train_autopilot_classification_job(db_conn, setup_ci_test_environment):
@pytest.mark.parametrize("db_conn,deploy_params", [
(bfs.path.StorageBackend.onprem, bfs.path.StorageBackend.onprem),
(bfs.path.StorageBackend.saas, bfs.path.StorageBackend.saas)
], indirect=True)
def test_train_autopilot_classification_job(db_conn, deploy_params, prepare_ci_test_environment):
curr_datetime = datetime.now().strftime("%y%m%d%H%M%S")
model_name = ''.join((cls_model_setup_params.model_type, curr_datetime))
job_name = ''.join((model_name, 'job'))
objective = '{ "MetricName" : "F1" }'

# train
AutopilotTestTraining.train_autopilot_classification_job(
job_name, setup_ci_test_environment, objective)
job_name, prepare_ci_test_environment, objective)

_assert_training_job(
job_name, cls_model_setup_params, setup_ci_test_environment)
job_name, cls_model_setup_params, prepare_ci_test_environment)


def _assert_training_job(job_name, model_setup_params, ci_test_env: CITestEnvironment):
Expand Down
15 changes: 0 additions & 15 deletions tests/ci_tests/utils/checkers.py

This file was deleted.

10 changes: 10 additions & 0 deletions tests/ci_tests/utils/parameters.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations
from typing import Any
from collections import namedtuple

POLLING_INTERVAL = 5 * 60 # seconds
Expand Down Expand Up @@ -26,3 +28,11 @@
aws_output_path="cls_path",
batch_size=10
)


def get_deploy_arg_list(deploy_params: dict[str, Any]) -> list[Any]:
args_list: list[Any] = []
for param_name, param_value in deploy_params.items():
args_list.append(f'--{param_name}')
args_list.append(param_value)
return args_list
1 change: 0 additions & 1 deletion tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,4 @@
"tests.fixtures.setup_database_fixture",
"tests.fixtures.prepare_environment_fixture",
"tests.fixtures.script_deployment_fixture",
"tests.fixtures.setup_ci_test_environment"
]
10 changes: 3 additions & 7 deletions tests/deployment/test_deploy_cli.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
from __future__ import annotations
from typing import Any

import pytest
from click.testing import CliRunner
import exasol.bucketfs as bfs

from exasol_sagemaker_extension.deployment import deploy_cli
from tests.ci_tests.utils.parameters import get_deploy_arg_list

DB_SCHEMA = "TEST_CLI_SCHEMA"
AUTOPILOT_TRAINING_LUA_SCRIPT_NAME = \
Expand Down Expand Up @@ -45,10 +43,8 @@ def get_all_scripts(db_conn):
], indirect=True)
def test_deploy_cli_main(db_conn, deploy_params):

args_list: list[Any] = []
for param_name, param_value in deploy_params.items():
args_list.append(f'--{param_name}')
args_list.append(param_value)
args_list = get_deploy_arg_list(deploy_params)
args_list.extend(["--schema", DB_SCHEMA])

runner = CliRunner()
result = runner.invoke(deploy_cli.main, args_list)
Expand Down
2 changes: 1 addition & 1 deletion tests/deployment/test_deploy_create_statements.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ def get_all_scripts(db_conn):
], indirect=True)
def test_deploy_create_statements(db_conn, deploy_params):

DeployCreateStatements.create_and_run(**deploy_params)
DeployCreateStatements.create_and_run(**deploy_params, schema=DB_SCHEMA)

all_schemas = get_all_schemas(db_conn)
all_scripts = get_all_scripts(db_conn)
Expand Down
28 changes: 14 additions & 14 deletions tests/fixtures/prepare_environment_fixture.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations
from typing import Any
import dataclasses
import os
from inspect import cleandoc
Expand All @@ -9,23 +11,20 @@
from click.testing import CliRunner

from exasol_sagemaker_extension.deployment import deploy_cli
from tests.integration_tests.utils.parameters import db_params
from tests.ci_tests.utils.parameters import reg_model_setup_params, cls_model_setup_params
from tests.ci_tests.utils.parameters import (
get_deploy_arg_list, reg_model_setup_params, cls_model_setup_params)


def __open_schema(db_conn, model_setup):
def __open_schema(db_conn: pyexasol.ExaConnection, model_setup):
query = "CREATE SCHEMA IF NOT EXISTS {schema_name}"
db_conn.execute(query.format(schema_name=model_setup.schema_name))


def __deploy_scripts(model_setup):
args_list = [
"--host", db_params.host,
"--port", db_params.port,
"--user", db_params.user,
"--pass", db_params.password,
"--schema", model_setup.schema_name
]
def __deploy_scripts(deploy_params: dict[str, Any], schema_name: str):

args_list = get_deploy_arg_list(deploy_params)
args_list.extend(["--schema", schema_name])

runner = CliRunner()
runner.invoke(deploy_cli.main, args_list)

Expand All @@ -47,10 +46,10 @@ def __insert_into_tables(db_conn, model_setup):
db_conn.execute(query)


def _setup_database(db_conn):
def _setup_database(db_conn: pyexasol.ExaConnection, deploy_params: dict[str, Any]):
for model_setup in [reg_model_setup_params, cls_model_setup_params]:
__open_schema(db_conn, model_setup)
__deploy_scripts(model_setup)
__deploy_scripts(deploy_params, model_setup.schema_name)
__create_tables(db_conn, model_setup)
__insert_into_tables(db_conn, model_setup)

Expand Down Expand Up @@ -198,10 +197,11 @@ def aws_bucket_uri(self) -> str:

@pytest.fixture(scope="session")
def prepare_ci_test_environment(db_conn,
deploy_params,
aws_s3_bucket,
connection_object_for_aws_credentials,
aws_sagemaker_role) -> CITestEnvironment:
_setup_database(db_conn)
_setup_database(db_conn, deploy_params)
yield CITestEnvironment(db_conn=db_conn,
aws_s3_bucket=aws_s3_bucket,
connection_object_for_aws_credentials=connection_object_for_aws_credentials,
Expand Down
8 changes: 0 additions & 8 deletions tests/fixtures/setup_ci_test_environment.py

This file was deleted.

0 comments on commit 73ee2a3

Please sign in to comment.