kaxil commented on a change in pull request #15464:
URL: https://github.com/apache/airflow/pull/15464#discussion_r617791532
##########
File path: tests/models/test_dagbag.py
##########
@@ -689,40 +691,57 @@ def test_sync_to_db_is_retried(self,
mock_bulk_write_to_db, mock_s10n_write_dag,
@patch("airflow.models.dagbag.settings.MIN_SERIALIZED_DAG_UPDATE_INTERVAL", 5)
@patch("airflow.www.security.ApplessAirflowSecurityManager")
- def test_sync_to_db_handles_dag_specific_permissions(self,
mock_security_manager):
+ @freeze_time(tz.datetime(2020, 1, 5, 0, 0, 0), as_kwarg="frozen_time")
+ def test_sync_to_db_handles_dag_specific_permissions_fixed(self,
mock_security_manager, frozen_time):
"""
- Test that when dagbag.sync_to_db is called new DAGs and updates DAGs
have their
- DAG specific permissions synced
+ Test that when dagbag.sync_to_db is called, DAG specific permissions
are
+ created as needed
"""
+ delete_dag_specific_permissions()
with create_session() as session:
+ security_manager = ApplessAirflowSecurityManager(session)
+ mock_sync_perm_for_dag =
mock_security_manager.return_value.sync_perm_for_dag
+ mock_sync_perm_for_dag.side_effect =
security_manager.sync_perm_for_dag
+
+ def _sync_to_db():
+ mock_sync_perm_for_dag.reset_mock()
+ frozen_time.tick(20)
+ dagbag.sync_to_db(session=session)
+
# New DAG
dagbag = DagBag(
dag_folder=os.path.join(TEST_DAGS_FOLDER,
"test_example_bash_operator.py"),
include_examples=False,
)
- with freeze_time(tz.datetime(2020, 1, 5, 0, 0, 0)):
- dagbag.sync_to_db(session=session)
-
-
mock_security_manager.return_value.sync_perm_for_dag.assert_called_once_with(
- "test_example_bash_operator", None
- )
-
- # DAG is updated
- mock_security_manager.reset_mock()
- dagbag.dags["test_example_bash_operator"].tags = ["new_tag"]
- with freeze_time(tz.datetime(2020, 1, 5, 0, 0, 20)):
- dagbag.sync_to_db(session=session)
-
-
mock_security_manager.return_value.sync_perm_for_dag.assert_called_once_with(
- "test_example_bash_operator", None
- )
+ dag = dagbag.dags["test_example_bash_operator"]
+ _sync_to_db()
+
mock_sync_perm_for_dag.assert_called_once_with("test_example_bash_operator",
None)
# DAG isn't updated
- mock_security_manager.reset_mock()
- with freeze_time(tz.datetime(2020, 1, 5, 0, 0, 40)):
- dagbag.sync_to_db(session=session)
+ _sync_to_db()
+ mock_sync_perm_for_dag.assert_not_called()
+
+ # DAG is updated; permviews exist
+ dag.tags = ["new_tag"]
+ _sync_to_db()
+ mock_sync_perm_for_dag.assert_not_called()
+
+ # DAG is updated; permviews don't exist
+ delete_dag_specific_permissions()
+ dag.tags = ["new_tag2"]
+ _sync_to_db()
+
mock_sync_perm_for_dag.assert_called_once_with("test_example_bash_operator",
None)
+
+ # Always sync after update if we have access_control
+ dag.access_control = {"Public": {"can_read"}}
+ _sync_to_db()
+ mock_sync_perm_for_dag.assert_called_once_with(
+ "test_example_bash_operator", {"Public": {"can_read"}}
+ )
Review comment:
Nice : 👍
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]