diff --git a/.github/workflows/_integration.yml b/.github/workflows/_integration.yml index 968ddc86..73a6f324 100644 --- a/.github/workflows/_integration.yml +++ b/.github/workflows/_integration.yml @@ -38,7 +38,7 @@ jobs: fail-fast: false matrix: juju-channel: ["3.6/stable"] - scenario: ["tls_full", "tls_external", "tls_internal", "tls_none"] + scenario: ["risk_upgrades", "tls_full", "tls_external", "tls_internal", "tls_none"] steps: - name: Checkout uses: actions/checkout@v4 diff --git a/tests/integration/cos/risk_upgrades/test_track_3_cos_lite_upgrade_risk.py b/tests/integration/cos/risk_upgrades/test_track_3_cos_lite_upgrade_risk.py new file mode 100644 index 00000000..54f6b9ae --- /dev/null +++ b/tests/integration/cos/risk_upgrades/test_track_3_cos_lite_upgrade_risk.py @@ -0,0 +1,43 @@ +import os +from pathlib import Path + +import jubilant +from helpers import generic_assertions + +TF_FILE = Path(__file__).parent.parent.resolve() / "tls_full/track-3.0.tf" +S3_ENDPOINT = { + "s3_endpoint": os.getenv("S3_ENDPOINT"), + "s3_secret_key": os.getenv("S3_SECRET_KEY"), + "s3_access_key": os.getenv("S3_ACCESS_KEY"), +} + + +def test_envvars(): + assert all(S3_ENDPOINT.values()), ( + f"export the following env vars (upper case) before running this test: {S3_ENDPOINT.keys()}" + ) + + +def test_deploy_from_stable( + tf_manager, ca_model: jubilant.Juju, cos_model: jubilant.Juju, tmp_path +): + # GIVEN a module deployed with a "stable" risk + tf_manager.init(TF_FILE) + tf_manager.apply( + ca_model=ca_model.model, cos_model=cos_model.model, risk="stable", **S3_ENDPOINT + ) + generic_assertions(cos_model, ca_model, tmp_path) + + +def test_upgrade_path( + tf_manager, ca_model: jubilant.Juju, cos_model: jubilant.Juju, tmp_path +): + # WHEN upgraded to higher risk + for risk in ["candidate", "beta", "edge"]: + tf_manager.init(TF_FILE) + tf_manager.apply( + ca_model=ca_model.model, cos_model=cos_model.model, risk=risk, **S3_ENDPOINT + ) + + # THEN the model is upgraded and is healthy + generic_assertions(cos_model, ca_model, tmp_path) diff --git a/tests/integration/cos/tls_full/track-3.0.tf b/tests/integration/cos/tls_full/track-3.0.tf index 53dd53e6..55f3642f 100644 --- a/tests/integration/cos/tls_full/track-3.0.tf +++ b/tests/integration/cos/tls_full/track-3.0.tf @@ -46,7 +46,7 @@ module "ssc" { module "cos" { source = "git::https://github.com/canonical/observability-stack//terraform/cos?ref=track/3.0" model = { uuid = data.juju_model.cos-model.uuid } - risk = "edge" + risk = var.risk internal_tls = true external_certificates_offer_url = "admin/${var.ca_model}.certificates" external_ca_cert_offer_url = "admin/${var.ca_model}.send-ca-cert" @@ -64,3 +64,9 @@ module "cos" { tempo_coordinator = { units = 1 } tempo_worker = { compactor_units = 1, distributor_units = 1, ingester_units = 1, metrics_generator_units = 1, querier_units = 1, query_frontend_units = 1 } } + +# This is used by ../risk_upgrades +variable "risk" { + type = string + default = "edge" +} diff --git a/tests/integration/cos_lite/risk_upgrades/test_track_3_cos_lite_upgrade_risk.py b/tests/integration/cos_lite/risk_upgrades/test_track_3_cos_lite_upgrade_risk.py new file mode 100644 index 00000000..34664c7d --- /dev/null +++ b/tests/integration/cos_lite/risk_upgrades/test_track_3_cos_lite_upgrade_risk.py @@ -0,0 +1,27 @@ +from pathlib import Path + +import jubilant +from helpers import generic_assertions + +TF_FILE = Path(__file__).parent.parent.resolve() / "tls_full/track-3.0.tf" + + +def test_deploy_from_stable( + tf_manager, ca_model: jubilant.Juju, cos_model: jubilant.Juju, tmp_path +): + # GIVEN a module deployed with a "stable" risk + tf_manager.init(TF_FILE) + tf_manager.apply(ca_model=ca_model.model, cos_model=cos_model.model, risk="stable") + generic_assertions(cos_model, ca_model, tmp_path) + + +def test_upgrade_path( + tf_manager, ca_model: jubilant.Juju, cos_model: jubilant.Juju, tmp_path +): + # WHEN upgraded to higher risk + for risk in ["candidate", "beta", "edge"]: + tf_manager.init(TF_FILE) + tf_manager.apply(ca_model=ca_model.model, cos_model=cos_model.model, risk=risk) + + # THEN the model is upgraded and is healthy + generic_assertions(cos_model, ca_model, tmp_path) diff --git a/tests/integration/cos_lite/tls_full/track-3.0.tf b/tests/integration/cos_lite/tls_full/track-3.0.tf index 13f2e83f..c53d0b5b 100644 --- a/tests/integration/cos_lite/tls_full/track-3.0.tf +++ b/tests/integration/cos_lite/tls_full/track-3.0.tf @@ -34,8 +34,14 @@ module "ssc" { module "cos-lite" { source = "git::https://github.com/canonical/observability-stack//terraform/cos-lite?ref=track/3.0" model = { uuid = data.juju_model.cos-model.uuid } - risk = "edge" + risk = var.risk internal_tls = true external_certificates_offer_url = "admin/${var.ca_model}.certificates" external_ca_cert_offer_url = "admin/${var.ca_model}.send-ca-cert" } + +# This is used by ../risk_upgrades +variable "risk" { + type = string + default = "edge" +} diff --git a/tests/integration/cos_lite/tls_internal/track-3.0.tf b/tests/integration/cos_lite/tls_internal/track-3.0.tf index 3c12880c..0ee23478 100644 --- a/tests/integration/cos_lite/tls_internal/track-3.0.tf +++ b/tests/integration/cos_lite/tls_internal/track-3.0.tf @@ -20,6 +20,6 @@ data "juju_model" "model" { module "cos-lite" { source = "git::https://github.com/canonical/observability-stack//terraform/cos-lite?ref=track/3.0" model = { uuid = data.juju_model.model.uuid } - risk = "edge" + risk = "stable" internal_tls = true }