Skip to content

Commit

Permalink
Test artifacts
Browse files Browse the repository at this point in the history
  • Loading branch information
diegolovison committed Jul 29, 2024
1 parent dc4aa3a commit b92c562
Show file tree
Hide file tree
Showing 3 changed files with 676 additions and 133 deletions.
377 changes: 244 additions & 133 deletions .github/scripts/tests/kind-integration.sh
Original file line number Diff line number Diff line change
@@ -1,135 +1,246 @@
# Integration test script
# Integration test script
# -----------------------
#
# Run this command from the project root:
#
# $ GIT_WORKSPACE=$(pwd) REGISTRY_ADDRESS=<registry_address .github/scripts/tests/kind-integration.sh
#
# Parameters:
# * GIT_WORKSPACE: The project root
# * REGISTRY_ADDRESS: The location of the Image Registry where the DSPO image will be built
# * SKIP_CLEANUP: An optional flag if you want to keep the testing environment
# * USE_OPENSHIFT: Use this optional flag if you would like to run the tests against an OpenShift cluster

#!/bin/bash
set -e

if [ "$GIT_WORKSPACE" = "" ]; then
echo "GIT_WORKSPACE variable not defined. Should be the root of the source code. Example GIT_WORKSPACE=/home/dev/git/data-science-pipelines-operator" && exit
fi

if [ "$REGISTRY_ADDRESS" = "" ]; then
echo "REGISTRY_ADDRESS variable not defined." && exit
fi

# Env vars
IMAGE_REPO_DSPO="data-science-pipelines-operator"
DSPA_NAMESPACE="test-dspa"
DSPA_EXTERNAL_NAMESPACE="dspa-ext"
MINIO_NAMESPACE="test-minio"
MARIADB_NAMESPACE="test-mariadb"
PYPISERVER_NAMESPACE="test-pypiserver"
DSPA_NAME="test-dspa"
DSPA_EXTERNAL_NAME="dspa-ext"
DSPA_DEPLOY_WAIT_TIMEOUT="300"
INTEGRATION_TESTS_DIR="${GIT_WORKSPACE}/tests"
DSPA_PATH="${GIT_WORKSPACE}/tests/resources/dspa-lite.yaml"
DSPA_EXTERNAL_PATH="${GIT_WORKSPACE}/tests/resources/dspa-external-lite.yaml"
CONFIG_DIR="${GIT_WORKSPACE}/config"
RESOURCES_DIR_CRD="${GIT_WORKSPACE}/.github/resources"
DSPO_IMAGE="${REGISTRY_ADDRESS}/data-science-pipelines-operator"
OPENDATAHUB_NAMESPACE="opendatahub"
RESOURCES_DIR_PYPI="${GIT_WORKSPACE}/.github/resources/pypiserver/base"

# TODO: Consolidate testing CRDS (2 locations)
echo "---------------------------------"
echo "# Apply OCP CRDs"
echo "---------------------------------"
kubectl apply -f ${RESOURCES_DIR_CRD}/crds
kubectl apply -f "${CONFIG_DIR}/crd/external/route.openshift.io_routes.yaml"

echo "---------------------------------"
echo "Build image"
echo "---------------------------------"
( cd $GIT_WORKSPACE && make podman-build -e IMG="${DSPO_IMAGE}" )

echo "---------------------------------"
echo "Create opendatahub namespace"
echo "---------------------------------"
kubectl create namespace $OPENDATAHUB_NAMESPACE

echo "---------------------------------"
echo "Deploy Argo Lite"
echo "---------------------------------"
( cd "${GIT_WORKSPACE}/.github/resources/argo-lite" && kustomize build . | kubectl -n $OPENDATAHUB_NAMESPACE apply -f - )

echo "---------------------------------"
echo "Deploy DSPO"
echo "---------------------------------"
( cd $GIT_WORKSPACE && make podman-push -e IMG="${DSPO_IMAGE}" )
( cd $GIT_WORKSPACE && make deploy-kind -e IMG="${DSPO_IMAGE}" )

echo "---------------------------------"
echo "Create Minio Namespace"
echo "---------------------------------"
kubectl create namespace $MINIO_NAMESPACE

echo "---------------------------------"
echo "Deploy Minio"
echo "---------------------------------"
( cd "${GIT_WORKSPACE}/.github/resources/minio" && kustomize build . | kubectl -n $MINIO_NAMESPACE apply -f - )

echo "---------------------------------"
echo "Create MariaDB Namespace"
echo "---------------------------------"
kubectl create namespace $MARIADB_NAMESPACE

echo "---------------------------------"
echo "Deploy MariaDB"
echo "---------------------------------"
( cd "${GIT_WORKSPACE}/.github/resources/mariadb" && kustomize build . | kubectl -n $MARIADB_NAMESPACE apply -f - )

echo "---------------------------------"
echo "Create Pypiserver Namespace"
echo "---------------------------------"
kubectl create namespace $PYPISERVER_NAMESPACE

echo "---------------------------------"
echo "Deploy pypi-server"
echo "---------------------------------"
( cd "${GIT_WORKSPACE}/.github/resources/pypiserver/base" && kustomize build . | kubectl -n $PYPISERVER_NAMESPACE apply -f - )

echo "---------------------------------"
echo "Wait for Dependencies (DSPO, Minio, Mariadb, Pypi server)"
echo "---------------------------------"
kubectl wait -n $OPENDATAHUB_NAMESPACE --timeout=60s --for=condition=Available=true deployment data-science-pipelines-operator-controller-manager
kubectl wait -n $MARIADB_NAMESPACE --timeout=60s --for=condition=Available=true deployment mariadb
kubectl wait -n $MINIO_NAMESPACE --timeout=60s --for=condition=Available=true deployment minio
kubectl wait -n $PYPISERVER_NAMESPACE --timeout=60s --for=condition=Available=true deployment pypi-server

echo "---------------------------------"
echo "Upload Python Packages to pypi-server"
echo "---------------------------------"
( cd "${GIT_WORKSPACE}/.github/scripts/python_package_upload" && sh package_upload.sh )

echo "---------------------------------"
echo "Create DSPA Namespace"
echo "---------------------------------"
kubectl create namespace $DSPA_NAMESPACE

echo "---------------------------------"
echo "Create Namespace for DSPA with External connections"
echo "---------------------------------"
kubectl create namespace $DSPA_EXTERNAL_NAMESPACE

echo "---------------------------------"
echo "Apply MariaDB and Minio Secrets and Configmaps in the External Namespace"
echo "---------------------------------"
( cd "${GIT_WORKSPACE}/.github/resources/external-pre-reqs" && kustomize build . | oc -n $DSPA_EXTERNAL_NAMESPACE apply -f - )

echo "---------------------------------"
echo "Apply PIP Server ConfigMap"
echo "---------------------------------"
( cd "${GIT_WORKSPACE}/.github/resources/pypiserver/base" && kubectl apply -f $RESOURCES_DIR_PYPI/nginx-tls-config.yaml -n $DSPA_NAMESPACE )

echo "---------------------------------"
echo "Run tests"
echo "---------------------------------"
( cd $GIT_WORKSPACE && make integrationtest K8SAPISERVERHOST=$(oc whoami --show-server) DSPANAMESPACE=${DSPA_NAMESPACE} DSPAPATH=${DSPA_PATH} )

echo "---------------------------------"
echo "Run tests for DSPA with External Connections"
echo "---------------------------------"
( cd $GIT_WORKSPACE && make integrationtest K8SAPISERVERHOST=$(oc whoami --show-server) DSPANAMESPACE=${DSPA_EXTERNAL_NAMESPACE} DSPAPATH=${DSPA_EXTERNAL_PATH} )

echo "---------------------------------"
echo "Clean up"
echo "---------------------------------"
( cd $GIT_WORKSPACE && make undeploy-kind )
set -x

initialize_env_vars () {
if [ -z "${GIT_WORKSPACE}" ]; then
echo "GIT_WORKSPACE variable not defined. Should be the root of the source code."
echo "Example GIT_WORKSPACE=/home/dev/git/data-science-pipelines-operator"
exit
fi

if [ -z "${REGISTRY_ADDRESS}" ]; then
echo "REGISTRY_ADDRESS variable not defined."
echo "If running locally, you can set REGISTRY_ADDRESS=quay.io/<username>"
echo "NOTE: Make sure that quay.io/<username>/data-science-pipelines-operator:latest tag already exists and it can be pulled without authentication."
exit
fi

IMAGE_REPO_DSPO="data-science-pipelines-operator"
DSPA_NAMESPACE="test-dspa"
DSPA_EXTERNAL_NAMESPACE="dspa-ext"
MINIO_NAMESPACE="test-minio"
MARIADB_NAMESPACE="test-mariadb"
PYPISERVER_NAMESPACE="test-pypiserver"
DSPA_NAME="test-dspa"
DSPA_EXTERNAL_NAME="dspa-ext"
DSPA_DEPLOY_WAIT_TIMEOUT="300"
INTEGRATION_TESTS_DIR="${GIT_WORKSPACE}/tests"
DSPA_PATH="${GIT_WORKSPACE}/tests/resources/dspa-lite.yaml"
DSPA_EXTERNAL_PATH="${GIT_WORKSPACE}/tests/resources/dspa-external-lite.yaml"
CONFIG_DIR="${GIT_WORKSPACE}/config"
RESOURCES_DIR_CRD="${GIT_WORKSPACE}/.github/resources"
DSPO_IMAGE="${REGISTRY_ADDRESS}/data-science-pipelines-operator"
OPENDATAHUB_NAMESPACE="opendatahub"
RESOURCES_DIR_PYPI="${GIT_WORKSPACE}/.github/resources/pypiserver/base"
}

apply_crds () {
# TODO: Consolidate testing CRDS (2 locations)
print_task "# Apply OCP CRDs"
kubectl apply -f ${RESOURCES_DIR_CRD}/crds
kubectl apply -f "${CONFIG_DIR}/crd/external/route.openshift.io_routes.yaml"
}

build_and_push_image () {
print_task "Build and push image"
make podman-build podman-push -e IMG="${DSPO_IMAGE}"
}

create_namespace () {
print_task "Create opendatahub namespace"
kubectl create namespace $OPENDATAHUB_NAMESPACE
}

deploy_argo_lite () {
print_task "Deploy Argo Lite"
pushd "${GIT_WORKSPACE}/.github/resources/argo-lite"
kustomize build . | kubectl -n $OPENDATAHUB_NAMESPACE apply -f -
popd
}

deploy_dspo () {
print_task "Deploy DSPO"
if [ ! -v "${USE_OPENSHIFT}" ]; then
make deploy -e IMG="${DSPO_IMAGE}" OPERATOR_NS=$OPENDATAHUB_NAMESPACE
else
make deploy-kind -e IMG="${DSPO_IMAGE}" OPERATOR_NS=$OPENDATAHUB_NAMESPACE
fi
}

create_minio_namespace () {
print_task "Create Minio Namespace"
kubectl create namespace $MINIO_NAMESPACE
}

deploy_minio () {
print_task "Deploy Minio"
pushd "${GIT_WORKSPACE}/.github/resources/minio"
kustomize build . | kubectl -n $MINIO_NAMESPACE apply -f -
popd
}

create_mariadb_namespace () {
print_task "Create MariaDB Namespace"
kubectl create namespace $MARIADB_NAMESPACE
}

deploy_mariadb () {
print_task "Deploy MariaDB"
pushd "${GIT_WORKSPACE}/.github/resources/mariadb"
kustomize build . | kubectl -n $MARIADB_NAMESPACE apply -f -
popd
}

create_pypi_namespace () {
print_task "Create Pypiserver Namespace"
kubectl create namespace $PYPISERVER_NAMESPACE
}

deploy_pypi_server () {
print_task "Deploy pypi-server"
pushd "${GIT_WORKSPACE}/.github/resources/pypiserver/base"
kustomize build . | kubectl -n $PYPISERVER_NAMESPACE apply -f -
popd
}

wait_for_dependencies () {
print_task "Wait for Dependencies (DSPO, Minio, Mariadb, Pypi server)"
kubectl wait -n $OPENDATAHUB_NAMESPACE --timeout=60s --for=condition=Available=true deployment data-science-pipelines-operator-controller-manager
kubectl wait -n $MARIADB_NAMESPACE --timeout=60s --for=condition=Available=true deployment mariadb
kubectl wait -n $MINIO_NAMESPACE --timeout=60s --for=condition=Available=true deployment minio
kubectl wait -n $PYPISERVER_NAMESPACE --timeout=60s --for=condition=Available=true deployment pypi-server
}

upload_packages_to_pypi_server () {
print_task "Upload Python Packages to pypi-server"
pushd "${GIT_WORKSPACE}/.github/scripts/python_package_upload"
sh package_upload.sh
pushd
}

create_dspa_namespace () {
print_task "Create DSPA Namespace"
kubectl create namespace $DSPA_NAMESPACE
}

create_external_connection_namespace () {
print_task "Create Namespace for DSPA with External connections"

kubectl create namespace $DSPA_EXTERNAL_NAMESPACE
}

apply_mariadb_minio_resources () {
print_task "Apply MariaDB and Minio Secrets and Configmaps in the External Namespace"

pushd "${GIT_WORKSPACE}/.github/resources/external-pre-reqs"
kustomize build . | oc -n $DSPA_EXTERNAL_NAMESPACE apply -f -
popd
}

apply_pip_server_configmap () {
print_task "Apply PIP Server ConfigMap"
pushd "${GIT_WORKSPACE}/.github/resources/pypiserver/base"

kubectl apply -f $RESOURCES_DIR_PYPI/nginx-tls-config.yaml \
-n $DSPA_NAMESPACE

popd
}


run_tests () {
print_task "Run tests"

local extra_params=""
if [ ! -v "${SKIP_CLEANUP=true}" ]; then
extra_params="-skipCleanup=true"
fi

make integrationtest \
K8SAPISERVERHOST=$(oc whoami --show-server) \
DSPANAMESPACE=${DSPA_NAMESPACE} \
DSPAPATH=${DSPA_PATH} \
$extra_params
}

run_external_connection_tests () {
print_task "Run tests for DSPA with External Connections"

local extra_params=""
if [ ! -v "${SKIP_CLEANUP=true}" ]; then
extra_params="-skipCleanup=true"
fi

make integrationtest \
K8SAPISERVERHOST=$(oc whoami --show-server) \
DSPANAMESPACE=${DSPA_EXTERNAL_NAMESPACE} \
DSPAPATH=${DSPA_EXTERNAL_PATH} \
$extra_params
}

cleanup () {
print_task "Cleaning up resources"
if [ ! -v "${USE_OPENSHIFT}" ]; then
make undeploy OPERATOR_NS=$OPENDATAHUB_NAMESPACE
else
make undeploy-kind OPERATOR_NS=$OPENDATAHUB_NAMESPACE
fi
kubectl delete namespace $OPENDATAHUB_NAMESPACE --ignore-not-found
kubectl delete namespace $MINIO_NAMESPACE --ignore-not-found
kubectl delete namespace $MARIADB_NAMESPACE --ignore-not-found
kubectl delete namespace $PYPISERVER_NAMESPACE --ignore-not-found
kubectl delete namespace $DSPA_NAMESPACE --ignore-not-found
kubectl delete namespace $DSPA_EXTERNAL_NAMESPACE --ignore-not-found
}

print_task () {
local message=$1

echo "---------------------------------"
echo "# $message"
echo "---------------------------------"
}

# If this env var is present, then this script will be run on a GHA workflow.
# Skip the execution of the whole IT flow.
if [ -z "${GITHUB_ACTION}" ]; then
echo "GITHUB_ACTION env var not set. Expect to run the tests locally."
initialize_env_vars
apply_crds
build_and_push_image
create_namespace
deploy_argo_lite
deploy_dspo
create_minio_namespace
deploy_minio
create_mariadb_namespace
deploy_mariadb
create_pypi_namespace
deploy_pypi_server
wait_for_dependencies
upload_packages_to_pypi_server
create_dspa_namespace
create_external_connection_namespace
apply_mariadb_minio_resources
apply_pip_server_configmap
run_tests
run_external_connection_tests
if [ -z "${SKIP_CLEANUP}" ]; then
cleanup
fi
fi
Loading

0 comments on commit b92c562

Please sign in to comment.