From 4ea8ab20a7b233d341977aa67a0487cad29e3e80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Radoi?= <103035318+reneradoi@users.noreply.github.com> Date: Thu, 4 Jul 2024 09:18:35 +0200 Subject: [PATCH] [DPE-4808] Update integration tests (#92) * use redis-image:5 in release.yaml * remove integration test for relating redis to the `discourse-charmers-discourse-k8s` charm as this has been discontinued * disable integration test `test-redis-relation` with multiple units because of https://github.com/canonical/discourse-k8s-operator/issues/268 --- .github/workflows/ci.yaml | 4 +- tests/integration/test_redis_relation.py | 66 +++++------------------- 2 files changed, 17 insertions(+), 53 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 5cda3dc..7b40f9a 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -48,7 +48,9 @@ jobs: tox-environments: - integration-charm - integration-password - - integration-redis-relation + # Skipping until issues in `discourse-k8s-operator` are resolved. Issue: + # "https://github.com/canonical/discourse-k8s-operator/issues/268" + # - integration-redis-relation name: ${{ matrix.tox-environments }} needs: - lint diff --git a/tests/integration/test_redis_relation.py b/tests/integration/test_redis_relation.py index 41d52a7..003ce29 100644 --- a/tests/integration/test_redis_relation.py +++ b/tests/integration/test_redis_relation.py @@ -16,12 +16,10 @@ check_application_status, get_address, get_unit_map, - get_unit_number, query_url, ) -FIRST_DISCOURSE_APP_NAME = "discourse-k8s" -SECOND_DISCOURSE_APP_NAME = "discourse-charmers-discourse-k8s" +DISCOURSE_APP_NAME = "discourse-k8s" POSTGRESQL_APP_NAME = "postgresql-k8s" logger = logging.getLogger(__name__) @@ -59,7 +57,10 @@ async def test_build_and_deploy(ops_test: OpsTest, num_units: int): series="focal", ), ops_test.model.deploy( - FIRST_DISCOURSE_APP_NAME, application_name=FIRST_DISCOURSE_APP_NAME, series="focal" + DISCOURSE_APP_NAME, + application_name=DISCOURSE_APP_NAME, + series="focal", + channel="latest/stable", ), ops_test.model.deploy( POSTGRESQL_APP_NAME, @@ -74,12 +75,10 @@ async def test_build_and_deploy(ops_test: OpsTest, num_units: int): ) # Discourse becomes blocked waiting for relations. await ops_test.model.wait_for_idle( - apps=[FIRST_DISCOURSE_APP_NAME], status="waiting", idle_period=20, timeout=3000 + apps=[DISCOURSE_APP_NAME], status="waiting", idle_period=20, timeout=3000 ) - assert ( - ops_test.model.applications[FIRST_DISCOURSE_APP_NAME].units[0].workload_status == "waiting" - ) + assert ops_test.model.applications[DISCOURSE_APP_NAME].units[0].workload_status == "waiting" assert ops_test.model.applications[POSTGRESQL_APP_NAME].units[0].workload_status == "active" @@ -88,14 +87,14 @@ async def test_discourse_relation(ops_test: OpsTest): # Test the first Discourse charm. # Add both relations to Discourse (PostgreSQL and Redis) # and wait for it to be ready. - await ops_test.model.relate(f"{POSTGRESQL_APP_NAME}:database", FIRST_DISCOURSE_APP_NAME) + await ops_test.model.relate(f"{POSTGRESQL_APP_NAME}:database", DISCOURSE_APP_NAME) # Wait until discourse handles all relation events related to postgresql - await ops_test.model.relate(APP_NAME, FIRST_DISCOURSE_APP_NAME) + await ops_test.model.relate(APP_NAME, DISCOURSE_APP_NAME) # This won't work: model.applications[app_name].units[0].workload_status returns wrong status """ await ops_test.model.wait_for_idle( - apps=[APP_NAME, FIRST_DISCOURSE_APP_NAME, POSTGRESQL_APP_NAME], + apps=[APP_NAME, DISCOURSE_APP_NAME, POSTGRESQL_APP_NAME], status="active", idle_period=30, timeout=3000, # Discourse takes a longer time to become active (a lot of setup). @@ -103,7 +102,7 @@ async def test_discourse_relation(ops_test: OpsTest): """ await ops_test.model.block_until( - lambda: check_application_status(ops_test, FIRST_DISCOURSE_APP_NAME) == "active", + lambda: check_application_status(ops_test, DISCOURSE_APP_NAME) == "active", timeout=900, wait_period=5, ) @@ -116,7 +115,7 @@ async def test_discourse_relation(ops_test: OpsTest): async def test_discourse_request(ops_test: OpsTest): """Try to connect to discourse after the bundle is deployed.""" - discourse_ip = await get_address(ops_test, app_name=FIRST_DISCOURSE_APP_NAME) + discourse_ip = await get_address(ops_test, app_name=DISCOURSE_APP_NAME) url = f"http://{discourse_ip}:3000/site.json" response = query_url(url) @@ -141,52 +140,15 @@ async def test_delete_redis_pod(ops_test: OpsTest): apps=[APP_NAME], status="active", timeout=1000, idle_period=60 ) await ops_test.model.block_until( - lambda: check_application_status(ops_test, FIRST_DISCOURSE_APP_NAME) == "active", + lambda: check_application_status(ops_test, DISCOURSE_APP_NAME) == "active", timeout=1200, wait_period=5, ) redis_ip_after = await get_address(ops_test, app_name=APP_NAME, unit_num=leader_unit_num) - discourse_ip = await get_address(ops_test, app_name=FIRST_DISCOURSE_APP_NAME) + discourse_ip = await get_address(ops_test, app_name=DISCOURSE_APP_NAME) url = f"http://{discourse_ip}:3000/site.json" response = query_url(url) assert redis_ip_before != redis_ip_after assert response.status == 200 - - -async def test_discourse_from_discourse_charmers(ops_test: OpsTest): - """Test the second Discourse charm.""" - unit_map = await get_unit_map(ops_test) - - # Get the Redis instance IP address. - redis_host = await get_address(ops_test, unit_num=get_unit_number(unit_map["leader"])) - - # Deploy Discourse and wait for it to be blocked waiting for database relation. - await ops_test.model.deploy( - SECOND_DISCOURSE_APP_NAME, - application_name=SECOND_DISCOURSE_APP_NAME, - config={ - "redis_host": redis_host, - "developer_emails": "user@foo.internal", - "external_hostname": "foo.internal", - "smtp_address": "127.0.0.1", - "smtp_domain": "foo.internal", - }, - series="focal", - ) - # Discourse becomes blocked waiting for PostgreSQL relation. - await ops_test.model.wait_for_idle( - apps=[SECOND_DISCOURSE_APP_NAME], status="blocked", timeout=3000 - ) - - # Relate PostgreSQL and Discourse, waiting for Discourse to be ready. - await ops_test.model.add_relation( - f"{POSTGRESQL_APP_NAME}:db-admin", - SECOND_DISCOURSE_APP_NAME, - ) - await ops_test.model.wait_for_idle( - apps=[POSTGRESQL_APP_NAME, SECOND_DISCOURSE_APP_NAME, APP_NAME], - status="active", - timeout=3000, # Discourse takes a longer time to become active (a lot of setup). - )