You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by po...@apache.org on 2021/10/09 08:51:45 UTC
[airflow] branch main updated: Fixing tests that leave traces
(users) (#18690)
This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new b9517f3 Fixing tests that leave traces (users) (#18690)
b9517f3 is described below
commit b9517f376788f08c5c297b273ced9489cefbf8b1
Author: Khalid Mammadov <xm...@hotmail.com>
AuthorDate: Sat Oct 9 09:51:07 2021 +0100
Fixing tests that leave traces (users) (#18690)
---
tests/test_utils/api_connexion_utils.py | 30 +++++++++++----
tests/www/views/test_views_acl.py | 67 ++++++++++++++++++---------------
2 files changed, 60 insertions(+), 37 deletions(-)
diff --git a/tests/test_utils/api_connexion_utils.py b/tests/test_utils/api_connexion_utils.py
index e15d288..fd75ec4 100644
--- a/tests/test_utils/api_connexion_utils.py
+++ b/tests/test_utils/api_connexion_utils.py
@@ -14,26 +14,42 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
+from contextlib import contextmanager
+
from airflow.api_connexion.exceptions import EXCEPTIONS_LINK_MAP
from airflow.www.security import EXISTING_ROLES
-def create_user(app, *, username, role_name, email=None, permissions=None):
+@contextmanager
+def create_user_scope(app, username, **kwargs):
+ """
+ Helper function designed to be used with pytest fixture mainly.
+ It will create a user and provide it for the fixture via YIELD (generator)
+ then will tidy up once test is complete
+ """
+ test_user = create_user(app, username, **kwargs)
+
+ try:
+ yield test_user
+ finally:
+ delete_user(app, username)
+
+
+def create_user(app, username, role_name=None, email=None, permissions=None):
appbuilder = app.appbuilder
# Removes user and role so each test has isolated test data.
delete_user(app, username)
- delete_role(app, role_name)
- role = create_role(app, role_name, permissions)
-
- if email is None:
- email = f"{username}@example.org"
+ role = None
+ if role_name:
+ delete_role(app, role_name)
+ role = create_role(app, role_name, permissions)
return appbuilder.sm.add_user(
username=username,
first_name=username,
last_name=username,
- email=email,
+ email=email or f"{username}@example.org",
role=role,
password=username,
)
diff --git a/tests/www/views/test_views_acl.py b/tests/www/views/test_views_acl.py
index de5a281..9402ee4 100644
--- a/tests/www/views/test_views_acl.py
+++ b/tests/www/views/test_views_acl.py
@@ -28,7 +28,7 @@ from airflow.utils.session import create_session
from airflow.utils.state import State
from airflow.utils.types import DagRunType
from airflow.www.views import FILTER_STATUS_COOKIE
-from tests.test_utils.api_connexion_utils import create_user
+from tests.test_utils.api_connexion_utils import create_user_scope
from tests.test_utils.db import clear_db_runs
from tests.test_utils.www import check_content_in_response, check_content_not_in_response, client_with_login
@@ -186,7 +186,7 @@ def all_dag_user_client(acl_app):
@pytest.fixture(scope="module")
def user_edit_one_dag(acl_app):
- return create_user(
+ with create_user_scope(
acl_app,
username="user_edit_one_dag",
role_name="role_edit_one_dag",
@@ -194,7 +194,8 @@ def user_edit_one_dag(acl_app):
(permissions.ACTION_CAN_READ, 'DAG:example_bash_operator'),
(permissions.ACTION_CAN_EDIT, 'DAG:example_bash_operator'),
],
- )
+ ) as user:
+ yield user
@pytest.mark.usefixtures("user_edit_one_dag")
@@ -219,7 +220,7 @@ def test_role_permission_associate(acl_app):
@pytest.fixture(scope="module")
def user_all_dags(acl_app):
- return create_user(
+ with create_user_scope(
acl_app,
username="user_all_dags",
role_name="role_all_dags",
@@ -227,7 +228,8 @@ def user_all_dags(acl_app):
(permissions.ACTION_CAN_READ, permissions.RESOURCE_DAG),
(permissions.ACTION_CAN_READ, permissions.RESOURCE_WEBSITE),
],
- )
+ ) as user:
+ yield user
@pytest.fixture()
@@ -310,7 +312,7 @@ def test_dag_autocomplete_status(client_all_dags, status, expected, unexpected):
@pytest.fixture(scope="module")
def user_all_dags_dagruns(acl_app):
- return create_user(
+ with create_user_scope(
acl_app,
username="user_all_dags_dagruns",
role_name="role_all_dags_dagruns",
@@ -319,7 +321,8 @@ def user_all_dags_dagruns(acl_app):
(permissions.ACTION_CAN_READ, permissions.RESOURCE_DAG_RUN),
(permissions.ACTION_CAN_READ, permissions.RESOURCE_WEBSITE),
],
- )
+ ) as user:
+ yield user
@pytest.fixture()
@@ -350,7 +353,7 @@ def test_dag_stats_success_for_all_dag_user(client_all_dags_dagruns):
@pytest.fixture(scope="module")
def user_all_dags_dagruns_tis(acl_app):
- return create_user(
+ with create_user_scope(
acl_app,
username="user_all_dags_dagruns_tis",
role_name="role_all_dags_dagruns_tis",
@@ -360,7 +363,8 @@ def user_all_dags_dagruns_tis(acl_app):
(permissions.ACTION_CAN_READ, permissions.RESOURCE_TASK_INSTANCE),
(permissions.ACTION_CAN_READ, permissions.RESOURCE_WEBSITE),
],
- )
+ ) as user:
+ yield user
@pytest.fixture()
@@ -410,7 +414,7 @@ def test_task_stats_success(
@pytest.fixture(scope="module")
def user_all_dags_codes(acl_app):
- return create_user(
+ with create_user_scope(
acl_app,
username="user_all_dags_codes",
role_name="role_all_dags_codes",
@@ -419,7 +423,8 @@ def user_all_dags_codes(acl_app):
(permissions.ACTION_CAN_READ, permissions.RESOURCE_DAG_CODE),
(permissions.ACTION_CAN_READ, permissions.RESOURCE_WEBSITE),
],
- )
+ ) as user:
+ yield user
@pytest.fixture()
@@ -478,7 +483,7 @@ def test_dag_details_success_for_all_dag_user(client_all_dags_dagruns, dag_id):
@pytest.fixture(scope="module")
def user_all_dags_tis(acl_app):
- return create_user(
+ with create_user_scope(
acl_app,
username="user_all_dags_tis",
role_name="role_all_dags_tis",
@@ -487,7 +492,8 @@ def user_all_dags_tis(acl_app):
(permissions.ACTION_CAN_READ, permissions.RESOURCE_TASK_INSTANCE),
(permissions.ACTION_CAN_READ, permissions.RESOURCE_WEBSITE),
],
- )
+ ) as user:
+ yield user
@pytest.fixture()
@@ -501,7 +507,7 @@ def client_all_dags_tis(acl_app, user_all_dags_tis):
@pytest.fixture(scope="module")
def user_all_dags_tis_xcom(acl_app):
- return create_user(
+ with create_user_scope(
acl_app,
username="user_all_dags_tis_xcom",
role_name="role_all_dags_tis_xcom",
@@ -511,7 +517,8 @@ def user_all_dags_tis_xcom(acl_app):
(permissions.ACTION_CAN_READ, permissions.RESOURCE_XCOM),
(permissions.ACTION_CAN_READ, permissions.RESOURCE_WEBSITE),
],
- )
+ ) as user:
+ yield user
@pytest.fixture()
@@ -525,7 +532,7 @@ def client_all_dags_tis_xcom(acl_app, user_all_dags_tis_xcom):
@pytest.fixture(scope="module")
def user_dags_tis_logs(acl_app):
- return create_user(
+ with create_user_scope(
acl_app,
username="user_dags_tis_logs",
role_name="role_dags_tis_logs",
@@ -535,7 +542,8 @@ def user_dags_tis_logs(acl_app):
(permissions.ACTION_CAN_READ, permissions.RESOURCE_TASK_LOG),
(permissions.ACTION_CAN_READ, permissions.RESOURCE_WEBSITE),
],
- )
+ ) as user:
+ yield user
@pytest.fixture()
@@ -692,7 +700,7 @@ def test_blocked_success_when_selecting_dags(
@pytest.fixture(scope="module")
def user_all_dags_edit_tis(acl_app):
- return create_user(
+ with create_user_scope(
acl_app,
username="user_all_dags_edit_tis",
role_name="role_all_dags_edit_tis",
@@ -701,7 +709,8 @@ def user_all_dags_edit_tis(acl_app):
(permissions.ACTION_CAN_EDIT, permissions.RESOURCE_TASK_INSTANCE),
(permissions.ACTION_CAN_READ, permissions.RESOURCE_WEBSITE),
],
- )
+ ) as user:
+ yield user
@pytest.fixture()
@@ -734,7 +743,7 @@ def test_paused_post_success(dag_test_client):
@pytest.fixture(scope="module")
def user_only_dags_tis(acl_app):
- return create_user(
+ with create_user_scope(
acl_app,
username="user_only_dags_tis",
role_name="role_only_dags_tis",
@@ -742,7 +751,8 @@ def user_only_dags_tis(acl_app):
(permissions.ACTION_CAN_READ, permissions.RESOURCE_DAG),
(permissions.ACTION_CAN_READ, permissions.RESOURCE_TASK_INSTANCE),
],
- )
+ ) as user:
+ yield user
@pytest.fixture()
@@ -796,13 +806,9 @@ def test_get_logs_with_metadata_failure(dag_faker_client):
@pytest.fixture(scope="module")
def user_no_roles(acl_app):
- user = create_user(
- acl_app,
- username="no_roles_user",
- role_name="no_roles_user_role",
- )
- user.roles = []
- return user
+ with create_user_scope(acl_app, username="no_roles_user", role_name="no_roles_user_role") as user:
+ user.roles = []
+ yield user
@pytest.fixture()
@@ -816,11 +822,12 @@ def client_no_roles(acl_app, user_no_roles):
@pytest.fixture(scope="module")
def user_no_permissions(acl_app):
- return create_user(
+ with create_user_scope(
acl_app,
username="no_permissions_user",
role_name="no_permissions_role",
- )
+ ) as user:
+ yield user
@pytest.fixture()