Skip to content

Commit

Permalink
Tests all the velero versions
Browse files Browse the repository at this point in the history
Adds integration tests for all the currently supported velero
versions.
  • Loading branch information
claudiubelu committed Jul 24, 2024
1 parent b936b12 commit 9cecc59
Showing 1 changed file with 40 additions and 18 deletions.
58 changes: 40 additions & 18 deletions tests/integration/test_velero.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,17 @@

from k8s_test_harness import harness
from k8s_test_harness.util import env_util, k8s_util
from packaging import version

LOG = logging.getLogger(__name__)

DIR = Path(__file__).absolute().parent
MANIFESTS_DIR = DIR / ".." / "templates"


def _get_velero_helm_cmd():
def _get_velero_helm_cmd(velero_version, chart_version):
velero_rock = env_util.get_build_meta_info_for_rock_version(
"velero", "1.13.2", "amd64"
"velero", velero_version, "amd64"
)
kubectl_rock = env_util.get_build_meta_info_for_rock_version(
"kubectl", "1.30.2", "amd64"
Expand All @@ -33,13 +34,21 @@ def _get_velero_helm_cmd():
"""
minio_url = "http://minio.velero.svc:9000"

# Velero chart version 4.0.0 introduced multiple backup storage locations.
# Previously, the configuration.provider configuration was different.
index = ""
provider = "provider"
if version.Version(chart_version) >= version.Version("4.0.0"):
index = "[0]"
provider = "backupStorageLocation[0].provider"

set_configs = [
f"credentials.secretContents.cloud={credentials}",
"configuration.backupStorageLocation[0].provider=aws",
"configuration.backupStorageLocation[0].bucket=velero",
"configuration.backupStorageLocation[0].config.region=minio",
"configuration.backupStorageLocation[0].config.s3ForcePathStyle=true",
f"configuration.backupStorageLocation[0].config.s3Url={minio_url}",
f"configuration.{provider}=aws",
f"configuration.backupStorageLocation{index}.bucket=velero",
f"configuration.backupStorageLocation{index}.config.region=minio",
f"configuration.backupStorageLocation{index}.config.s3ForcePathStyle=true",
f"configuration.backupStorageLocation{index}.config.s3Url={minio_url}",
"snapshotsEnabled=false",
"initContainers[0].name=velero-plugin-for-aws",
"initContainers[0].image=velero/velero-plugin-for-aws:v1.2.1",
Expand All @@ -54,6 +63,7 @@ def _get_velero_helm_cmd():
repository="https://vmware-tanzu.github.io/helm-charts",
images=images,
set_configs=set_configs,
chart_version=chart_version,
)


Expand All @@ -74,34 +84,34 @@ def _exec_velero_cmd(instance, deployment_name, namespace, *cmd):
)


def test_integration_velero(module_instance: harness.Instance):
def _test_integration_velero(instance: harness.Instance, velero_version, chart_version):
# Setup Minio first, which is an S3-compatible storage service. We'll use
# it to test out Velero's functionality with it.
manifest = MANIFESTS_DIR / "minio-deployment.yaml"
module_instance.exec(
instance.exec(
["k8s", "kubectl", "apply", "-f", "-"],
input=Path(manifest).read_bytes(),
)

k8s_util.wait_for_deployment(module_instance, "minio", "velero")
k8s_util.wait_for_deployment(instance, "minio", "velero")

# Deploy Velero rock.
module_instance.exec(_get_velero_helm_cmd())
k8s_util.wait_for_deployment(module_instance, "velero", "velero")
instance.exec(_get_velero_helm_cmd(velero_version, chart_version))
k8s_util.wait_for_deployment(instance, "velero", "velero")

# Deploy an nginx app which we'll back up.
manifest = MANIFESTS_DIR / "nginx-deployment.yaml"
module_instance.exec(
instance.exec(
["k8s", "kubectl", "apply", "-f", "-"],
input=Path(manifest).read_bytes(),
)

k8s_util.wait_for_deployment(module_instance, "nginx-deployment", "nginx-example")
k8s_util.wait_for_deployment(instance, "nginx-deployment", "nginx-example")

# Back the nginx app.
backup_name = f"nginx-backup-{uuid.uuid4()}"
_exec_velero_cmd(
module_instance,
instance,
"velero",
"velero",
"backup",
Expand All @@ -112,7 +122,7 @@ def test_integration_velero(module_instance: harness.Instance):
)

# Delete the nginx app, we should be able to restore it.
module_instance.exec(
instance.exec(
[
"k8s",
"kubectl",
Expand All @@ -127,7 +137,7 @@ def test_integration_velero(module_instance: harness.Instance):

# Restore it, and expect it to become available.
_exec_velero_cmd(
module_instance,
instance,
"velero",
"velero",
"restore",
Expand All @@ -136,4 +146,16 @@ def test_integration_velero(module_instance: harness.Instance):
backup_name,
)

k8s_util.wait_for_deployment(module_instance, "nginx-deployment", "nginx-example")
k8s_util.wait_for_deployment(instance, "nginx-deployment", "nginx-example")


def test_integration_velero_1_13_2(function_instance: harness.Instance):
_test_integration_velero(function_instance, "1.13.2", "6.7.0")


def test_integration_velero_1_12_1(function_instance: harness.Instance):
_test_integration_velero(function_instance, "1.12.1", "5.2.2")


def test_integration_velero_1_9_5(function_instance: harness.Instance):
_test_integration_velero(function_instance, "1.9.5", "2.32.6")

0 comments on commit 9cecc59

Please sign in to comment.