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 d42df9f Fix a test case inside tests/models that leaves a trace in
the DB (#20881)
d42df9f is described below
commit d42df9f757e8d58c4902728a80dfed184f6de996
Author: Khalid Mammadov <[email protected]>
AuthorDate: Tue Jan 18 16:38:59 2022 +0000
Fix a test case inside tests/models that leaves a trace in the DB (#20881)
---
tests/models/test_dagbag.py | 24 ++++++++++++------------
tests/test_utils/db.py | 19 +++++++++++++++++++
tests/test_utils/permissions.py | 38 --------------------------------------
3 files changed, 31 insertions(+), 50 deletions(-)
diff --git a/tests/models/test_dagbag.py b/tests/models/test_dagbag.py
index c45d104..8a15661 100644
--- a/tests/models/test_dagbag.py
+++ b/tests/models/test_dagbag.py
@@ -44,27 +44,25 @@ from tests.models import TEST_DAGS_FOLDER
from tests.test_utils import db
from tests.test_utils.asserts import assert_queries_count
from tests.test_utils.config import conf_vars
-from tests.test_utils.permissions import delete_dag_specific_permissions
+
+
+def db_clean_up():
+ db.clear_db_dags()
+ db.clear_db_runs()
+ db.clear_db_serialized_dags()
+ db.clear_dag_specific_permissions()
class TestDagBag:
@classmethod
def setup_class(cls):
cls.empty_dir = mkdtemp()
+ db_clean_up()
@classmethod
def teardown_class(cls):
shutil.rmtree(cls.empty_dir)
-
- def setup_methods(self) -> None:
- db.clear_db_dags()
- db.clear_db_runs()
- db.clear_db_serialized_dags()
-
- def teardown_method(self) -> None:
- db.clear_db_dags()
- db.clear_db_runs()
- db.clear_db_serialized_dags()
+ db_clean_up()
def test_get_existing_dag(self):
"""
@@ -787,6 +785,7 @@ class TestDagBag:
Test that dagbag.sync_to_db will sync DAG specific permissions when a
DAG is
new or updated
"""
+ db_clean_up()
session = settings.Session()
with freeze_time(tz.datetime(2020, 1, 5, 0, 0, 0)) as frozen_time:
dagbag = DagBag(
@@ -820,7 +819,7 @@ class TestDagBag:
Test that dagbag._sync_perm_for_dag will call
ApplessAirflowSecurityManager.sync_perm_for_dag
when DAG specific perm views don't exist already or the DAG has
access_control set.
"""
- delete_dag_specific_permissions()
+ db_clean_up()
with create_session() as session:
security_manager = ApplessAirflowSecurityManager(session)
mock_sync_perm_for_dag =
mock_security_manager.return_value.sync_perm_for_dag
@@ -892,6 +891,7 @@ class TestDagBag:
def test_collect_dags_from_db(self):
"""DAGs are collected from Database"""
+ db.clear_db_dags()
example_dags_folder = airflow.example_dags.__path__[0]
dagbag = DagBag(example_dags_folder)
diff --git a/tests/test_utils/db.py b/tests/test_utils/db.py
index c6559b8..2c0d0ae 100644
--- a/tests/test_utils/db.py
+++ b/tests/test_utils/db.py
@@ -36,8 +36,10 @@ from airflow.models import (
)
from airflow.models.dagcode import DagCode
from airflow.models.serialized_dag import SerializedDagModel
+from airflow.security.permissions import RESOURCE_DAG_PREFIX
from airflow.utils.db import add_default_pool_if_not_exists,
create_default_connections
from airflow.utils.session import create_session
+from airflow.www.fab_security.sqla.models import Permission, Resource,
assoc_permission_role
def clear_db_runs():
@@ -126,3 +128,20 @@ def clear_db_task_fail():
def clear_db_task_reschedule():
with create_session() as session:
session.query(TaskReschedule).delete()
+
+
+def clear_dag_specific_permissions():
+ with create_session() as session:
+ dag_resources =
session.query(Resource).filter(Resource.name.like(f"{RESOURCE_DAG_PREFIX}%")).all()
+ dag_resource_ids = [d.id for d in dag_resources]
+
+ dag_permissions =
session.query(Permission).filter(Permission.resource_id.in_(dag_resource_ids)).all()
+ dag_permission_ids = [d.id for d in dag_permissions]
+
+ session.query(assoc_permission_role).filter(
+ assoc_permission_role.c.permission_view_id.in_(dag_permission_ids)
+ ).delete(synchronize_session=False)
+
session.query(Permission).filter(Permission.resource_id.in_(dag_resource_ids)).delete(
+ synchronize_session=False
+ )
+
session.query(Resource).filter(Resource.id.in_(dag_resource_ids)).delete(synchronize_session=False)
diff --git a/tests/test_utils/permissions.py b/tests/test_utils/permissions.py
deleted file mode 100644
index eabc64c..0000000
--- a/tests/test_utils/permissions.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-
-from airflow.security.permissions import RESOURCE_DAG_PREFIX
-from airflow.utils.session import create_session
-from airflow.www.fab_security.sqla.models import Permission, Resource,
assoc_permission_role
-
-
-def delete_dag_specific_permissions():
- with create_session() as session:
- dag_resources =
session.query(Resource).filter(Resource.name.like(f"{RESOURCE_DAG_PREFIX}%")).all()
- dag_resource_ids = [d.id for d in dag_resources]
-
- dag_permissions =
session.query(Permission).filter(Permission.resource_id.in_(dag_resource_ids)).all()
- dag_permission_ids = [d.id for d in dag_permissions]
-
- session.query(assoc_permission_role).filter(
- assoc_permission_role.c.permission_view_id.in_(dag_permission_ids)
- ).delete(synchronize_session=False)
-
session.query(Permission).filter(Permission.resource_id.in_(dag_resource_ids)).delete(
- synchronize_session=False
- )
-
session.query(Resource).filter(Resource.id.in_(dag_resource_ids)).delete(synchronize_session=False)