from __future__ import unicode_literals import boto3 from botocore.exceptions import ClientError from nose.tools import assert_raises from moto import mock_cognitoidentity from moto.cognitoidentity.utils import get_random_identity_id @mock_cognitoidentity def test_create_identity_pool(): conn = boto3.client("cognito-identity", "us-west-2") result = conn.create_identity_pool( IdentityPoolName="TestPool", AllowUnauthenticatedIdentities=False, SupportedLoginProviders={"graph.facebook.com": "123456789012345"}, DeveloperProviderName="devname", OpenIdConnectProviderARNs=["arn:aws:rds:eu-west-2:123456789012:db:mysql-db"], CognitoIdentityProviders=[ { "ProviderName": "testprovider", "ClientId": "CLIENT12345", "ServerSideTokenCheck": True, } ], SamlProviderARNs=["arn:aws:rds:eu-west-2:123456789012:db:mysql-db"], ) assert result["IdentityPoolId"] != "" @mock_cognitoidentity def test_describe_identity_pool(): conn = boto3.client("cognito-identity", "us-west-2") res = conn.create_identity_pool( IdentityPoolName="TestPool", AllowUnauthenticatedIdentities=False, SupportedLoginProviders={"graph.facebook.com": "123456789012345"}, DeveloperProviderName="devname", OpenIdConnectProviderARNs=["arn:aws:rds:eu-west-2:123456789012:db:mysql-db"], CognitoIdentityProviders=[ { "ProviderName": "testprovider", "ClientId": "CLIENT12345", "ServerSideTokenCheck": True, } ], SamlProviderARNs=["arn:aws:rds:eu-west-2:123456789012:db:mysql-db"], ) result = conn.describe_identity_pool(IdentityPoolId=res["IdentityPoolId"]) assert result["IdentityPoolId"] == res["IdentityPoolId"] assert ( result["AllowUnauthenticatedIdentities"] == res["AllowUnauthenticatedIdentities"] ) assert result["SupportedLoginProviders"] == res["SupportedLoginProviders"] assert result["DeveloperProviderName"] == res["DeveloperProviderName"] assert result["OpenIdConnectProviderARNs"] == res["OpenIdConnectProviderARNs"] assert result["CognitoIdentityProviders"] == res["CognitoIdentityProviders"] assert result["SamlProviderARNs"] == res["SamlProviderARNs"] @mock_cognitoidentity def test_describe_identity_pool_with_invalid_id_raises_error(): conn = boto3.client("cognito-identity", "us-west-2") with assert_raises(ClientError) as cm: conn.describe_identity_pool(IdentityPoolId="us-west-2_non-existent") cm.exception.operation_name.should.equal("DescribeIdentityPool") cm.exception.response["Error"]["Code"].should.equal("ResourceNotFoundException") cm.exception.response["ResponseMetadata"]["HTTPStatusCode"].should.equal(400) # testing a helper function def test_get_random_identity_id(): assert len(get_random_identity_id("us-west-2")) > 0 assert len(get_random_identity_id("us-west-2").split(":")[1]) == 19 @mock_cognitoidentity def test_get_id(): # These two do NOT work in server mode. They just don't return the data from the model. conn = boto3.client("cognito-identity", "us-west-2") result = conn.get_id( AccountId="someaccount", IdentityPoolId="us-west-2:12345", Logins={"someurl": "12345"}, ) print(result) assert ( result.get("IdentityId", "").startswith("us-west-2") or result.get("ResponseMetadata").get("HTTPStatusCode") == 200 ) @mock_cognitoidentity def test_get_credentials_for_identity(): # These two do NOT work in server mode. They just don't return the data from the model. conn = boto3.client("cognito-identity", "us-west-2") result = conn.get_credentials_for_identity(IdentityId="12345") assert ( result.get("Expiration", 0) > 0 or result.get("ResponseMetadata").get("HTTPStatusCode") == 200 ) assert ( result.get("IdentityId") == "12345" or result.get("ResponseMetadata").get("HTTPStatusCode") == 200 ) @mock_cognitoidentity def test_get_open_id_token_for_developer_identity(): conn = boto3.client("cognito-identity", "us-west-2") result = conn.get_open_id_token_for_developer_identity( IdentityPoolId="us-west-2:12345", IdentityId="12345", Logins={"someurl": "12345"}, TokenDuration=123, ) assert len(result["Token"]) > 0 assert result["IdentityId"] == "12345" @mock_cognitoidentity def test_get_open_id_token_for_developer_identity_when_no_explicit_identity_id(): conn = boto3.client("cognito-identity", "us-west-2") result = conn.get_open_id_token_for_developer_identity( IdentityPoolId="us-west-2:12345", Logins={"someurl": "12345"}, TokenDuration=123 ) assert len(result["Token"]) > 0 assert len(result["IdentityId"]) > 0 @mock_cognitoidentity def test_get_open_id_token(): conn = boto3.client("cognito-identity", "us-west-2") result = conn.get_open_id_token(IdentityId="12345", Logins={"someurl": "12345"}) assert len(result["Token"]) > 0 assert result["IdentityId"] == "12345"