Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 1 addition & 50 deletions providers/tests/amazon/aws/auth_manager/test_aws_auth_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
from unittest.mock import ANY, Mock, patch

import pytest
from flask import Flask, session
from flask import session
from flask_appbuilder.menu import MenuItem

from airflow.providers.amazon.version_compat import AIRFLOW_V_3_0_PLUS
Expand All @@ -46,8 +46,6 @@
RESOURCE_CONNECTION,
RESOURCE_VARIABLE,
)
from airflow.www import app as application
from airflow.www.extensions.init_appbuilder import init_appbuilder

from tests_common.test_utils.config import conf_vars

Expand Down Expand Up @@ -94,58 +92,11 @@ def auth_manager():
return AwsAuthManager()


@pytest.fixture
def auth_manager_with_appbuilder(auth_manager):
flask_app = Flask(__name__)
appbuilder = init_appbuilder(flask_app)
auth_manager.appbuilder = appbuilder
return auth_manager


@pytest.fixture
def test_user():
return AwsAuthManagerUser(user_id="test_user_id", groups=[], username="test_username")


@pytest.fixture
def client_admin():
with conf_vars(
{
(
"core",
"auth_manager",
): "airflow.providers.amazon.aws.auth_manager.aws_auth_manager.AwsAuthManager",
("aws_auth_manager", "region_name"): "us-east-1",
("aws_auth_manager", "saml_metadata_url"): "/saml/metadata",
("aws_auth_manager", "avp_policy_store_id"): "avp_policy_store_id",
}
):
with (
patch(
"airflow.providers.amazon.aws.auth_manager.views.auth.OneLogin_Saml2_IdPMetadataParser"
) as mock_parser,
patch(
"airflow.providers.amazon.aws.auth_manager.views.auth.AwsAuthManagerAuthenticationViews._init_saml_auth"
) as mock_init_saml_auth,
patch(
"airflow.providers.amazon.aws.auth_manager.avp.facade.AwsAuthManagerAmazonVerifiedPermissionsFacade.is_policy_store_schema_up_to_date"
) as mock_is_policy_store_schema_up_to_date,
):
mock_parser.parse_remote.return_value = SAML_METADATA_PARSED
mock_is_policy_store_schema_up_to_date.return_value = True

auth = Mock()
auth.is_authenticated.return_value = True
auth.get_nameid.return_value = "user_admin_permissions"
auth.get_attributes.return_value = {
"id": ["user_admin_permissions"],
"groups": ["Admin"],
"email": ["email"],
}
mock_init_saml_auth.return_value = auth
yield application.create_app(testing=True)


class TestAwsAuthManager:
def test_avp_facade(self, auth_manager):
assert hasattr(auth_manager, "avp_facade")
Expand Down
29 changes: 13 additions & 16 deletions providers/tests/system/amazon/aws/tests/test_aws_auth_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,13 @@

import boto3
import pytest
from fastapi.testclient import TestClient
from onelogin.saml2.idp_metadata_parser import OneLogin_Saml2_IdPMetadataParser

from airflow.www import app as application
from airflow.api_fastapi.app import create_app

from providers.tests.system.amazon.aws.utils import set_env_id
from tests_common.test_utils.config import conf_vars
from tests_common.test_utils.www import check_content_in_response

SAML_METADATA_URL = "/saml/metadata"
SAML_METADATA_PARSED = {
Expand Down Expand Up @@ -128,15 +129,12 @@ def base_app(region_name, avp_policy_store_id):
}
):
with (
patch.object(OneLogin_Saml2_IdPMetadataParser, "parse_remote") as mock_parse_remote,
patch(
"airflow.providers.amazon.aws.auth_manager.views.auth.OneLogin_Saml2_IdPMetadataParser"
) as mock_parser,
patch(
"airflow.providers.amazon.aws.auth_manager.views.auth.AwsAuthManagerAuthenticationViews._init_saml_auth"
"airflow.providers.amazon.aws.auth_manager.router.login._init_saml_auth"
) as mock_init_saml_auth,
):
mock_parser.parse_remote.return_value = SAML_METADATA_PARSED

mock_parse_remote.return_value = SAML_METADATA_PARSED
yield mock_init_saml_auth


Expand All @@ -151,7 +149,7 @@ def client_no_permissions(base_app):
"email": ["email"],
}
base_app.return_value = auth
return application.create_app(testing=True)
return TestClient(create_app())


@pytest.fixture
Expand All @@ -164,7 +162,7 @@ def client_admin_permissions(base_app):
"groups": ["Admin"],
}
base_app.return_value = auth
return application.create_app(testing=True)
return TestClient(create_app())


@pytest.mark.system
Expand Down Expand Up @@ -194,12 +192,11 @@ def delete_avp_policy_store(cls):
for policy_store_id in policy_store_ids:
client.delete_policy_store(policyStoreId=policy_store_id)

@pytest.mark.skip("Authorization is not yet implemented in AF3 new ui")
def test_login_no_permissions(self, client_no_permissions):
with client_no_permissions.test_client() as client:
response = client.get("/login_callback", follow_redirects=True)
check_content_in_response("Your user has no roles and/or permissions!", response, 403)
response = client_no_permissions.post("/auth/login_callback")
assert response.status_code == 403

def test_login_admin(self, client_admin_permissions):
with client_admin_permissions.test_client() as client:
response = client.get("/login_callback", follow_redirects=True)
check_content_in_response("<h2>DAGs</h2>", response, 200)
response = client_admin_permissions.post("/auth/login_callback")
assert response.status_code == 200