diff --git a/airflow/www_rbac/security.py b/airflow/www_rbac/security.py index 55570debf6a9d..bbb05cd2c5ce6 100644 --- a/airflow/www_rbac/security.py +++ b/airflow/www_rbac/security.py @@ -83,6 +83,7 @@ 'can_task_stats', 'can_code', 'can_log', + 'can_get_logs_with_metadata', 'can_tries', 'can_graph', 'can_tree', diff --git a/tests/www_rbac/test_views.py b/tests/www_rbac/test_views.py index f6a350150405b..64531244656a4 100644 --- a/tests/www_rbac/test_views.py +++ b/tests/www_rbac/test_views.py @@ -874,6 +874,17 @@ def login(self, username=None, password=None): role=role_admin, password='test') + role_user = self.appbuilder.sm.find_role('User') + test_user = self.appbuilder.sm.find_user(username='test_user') + if not test_user: + self.appbuilder.sm.add_user( + username='test_user', + first_name='test_user', + last_name='test_user', + email='test_user@fab.org', + role=role_user, + password='test_user') + dag_acl_role = self.appbuilder.sm.add_role('dag_acl_tester') dag_tester = self.appbuilder.sm.find_user(username='dag_tester') if not dag_tester: @@ -1314,6 +1325,50 @@ def test_tree_success_for_read_only_role(self): resp = self.client.get(url, follow_redirects=True) self.check_content_in_response('runme_1', resp) + def test_log_success(self): + self.logout() + self.login() + url = ('log?task_id=runme_0&dag_id=example_bash_operator&execution_date={}' + .format(self.percent_encode(self.default_date))) + resp = self.client.get(url, follow_redirects=True) + self.check_content_in_response('Log by attempts', resp) + url = ('get_logs_with_metadata?task_id=runme_0&dag_id=example_bash_operator&' + 'execution_date={}&try_number=1&metadata=null' + .format(self.percent_encode(self.default_date))) + resp = self.client.get(url, follow_redirects=True) + self.check_content_in_response('"message":', resp) + self.check_content_in_response('"metadata":', resp) + + def test_log_failure(self): + self.logout() + self.login(username='dag_faker', + password='dag_faker') + url = ('log?task_id=runme_0&dag_id=example_bash_operator&execution_date={}' + .format(self.percent_encode(self.default_date))) + resp = self.client.get(url, follow_redirects=True) + self.check_content_not_in_response('Log by attempts', resp) + url = ('get_logs_with_metadata?task_id=runme_0&dag_id=example_bash_operator&' + 'execution_date={}&try_number=1&metadata=null' + .format(self.percent_encode(self.default_date))) + resp = self.client.get(url, follow_redirects=True) + self.check_content_not_in_response('"message":', resp) + self.check_content_not_in_response('"metadata":', resp) + + def test_log_success_for_user(self): + self.logout() + self.login(username='test_user', + password='test_user') + url = ('log?task_id=runme_0&dag_id=example_bash_operator&execution_date={}' + .format(self.percent_encode(self.default_date))) + resp = self.client.get(url, follow_redirects=True) + self.check_content_in_response('Log by attempts', resp) + url = ('get_logs_with_metadata?task_id=runme_0&dag_id=example_bash_operator&' + 'execution_date={}&try_number=1&metadata=null' + .format(self.percent_encode(self.default_date))) + resp = self.client.get(url, follow_redirects=True) + self.check_content_in_response('"message":', resp) + self.check_content_in_response('"metadata":', resp) + if __name__ == '__main__': unittest.main()