Skip to content

Commit

Permalink
UT: Update and add tests for new TokenParser class
Browse files Browse the repository at this point in the history
  • Loading branch information
shreyamalviya committed Apr 3, 2023
1 parent 67549c7 commit f9ad76b
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,11 @@
AuthenticationFacade,
)
from monkey_island.cc.services.authentication_service.setup import setup_authentication
from monkey_island.cc.services.authentication_service.token import TokenGenerator, TokenValidator
from monkey_island.cc.services.authentication_service.token import (
TokenGenerator,
TokenParser,
TokenValidator,
)
from monkey_island.cc.services.authentication_service.user import User

USERNAME = "user1"
Expand Down Expand Up @@ -45,15 +49,20 @@ def mock_user_datastore() -> UserDatastore:


@pytest.fixture
def mock_token_generator() -> UserDatastore:
def mock_token_generator() -> TokenGenerator:
return MagicMock(spec=TokenGenerator)


@pytest.fixture
def mock_token_validator() -> UserDatastore:
def mock_token_validator() -> TokenValidator:
return MagicMock(spec=TokenValidator)


@pytest.fixture
def mock_token_parser() -> TokenParser:
return MagicMock(spec=TokenParser)


@pytest.fixture
def authentication_facade(
mock_flask_app,
Expand All @@ -62,13 +71,15 @@ def authentication_facade(
mock_user_datastore: UserDatastore,
mock_token_generator: TokenGenerator,
mock_token_validator: TokenValidator,
mock_token_parser: TokenParser,
) -> AuthenticationFacade:
return AuthenticationFacade(
mock_repository_encryptor,
mock_island_event_queue,
mock_user_datastore,
mock_token_generator,
mock_token_validator,
mock_token_parser,
)


Expand Down Expand Up @@ -119,13 +130,13 @@ def test_handle_sucessful_login(

def test_generate_new_token_pair__generates_tokens(
mock_token_generator: TokenGenerator,
mock_token_validator: TokenValidator,
mock_token_parser: TokenParser,
authentication_facade: AuthenticationFacade,
):
user = User(username=USERNAME, password=PASSWORD, fs_uniquifier="a")
user.save()
mock_token_generator.generate_token.return_value = "new_token"
mock_token_validator.get_token_payload.return_value = "a"
mock_token_parser.parse.return_value.payload = "a"

access_token = user.get_auth_token()
refresh_token = "original_refresh_token"
Expand All @@ -151,13 +162,13 @@ def test_generate_new_token_pair__fails_if_user_does_not_exist(


def test_generate_new_token_pair__fails_if_token_invalid(
mock_token_validator: TokenValidator,
mock_token_parser: TokenParser,
authentication_facade: AuthenticationFacade,
):
user = User(username=USERNAME, password=PASSWORD, fs_uniquifier="a")
user.save()
refresh_token = authentication_facade.generate_refresh_token(user)
mock_token_validator.get_token_payload.side_effect = Exception()
mock_token_parser.parse.side_effect = Exception()

with pytest.raises(Exception):
authentication_facade.generate_new_token_pair(refresh_token)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import pytest
from tests.unit_tests.monkey_island.cc.services.authentication_service.token.conftest import (
build_app,
)

from monkey_island.cc.services.authentication_service.token import TokenGenerator, TokenParser
from monkey_island.cc.services.authentication_service.token.token_parser import TokenValidationError


def test_parse():
token_expiration_timedelta = 1 * 60 # 1 minute
payload = "fake_user_id"

app, _ = build_app()
token_generator = TokenGenerator(app.security)
token_parser = TokenParser(app.security, token_expiration_timedelta)

token = token_generator.generate_token(payload)
parsed_token = token_parser.parse(token)

assert parsed_token.token == token
assert parsed_token.expiration_time == token_expiration_timedelta
assert parsed_token.payload == payload


def test_parse__expired_token(freezer):
token_expiration = 1 * 60 # 1 minute
generation_time = "2020-01-01 00:00:00"
validation_time = "2020-01-01 00:03:30"
payload = "fake_user_id"

app, _ = build_app()
token_generator = TokenGenerator(app.security)
freezer.move_to(generation_time)
token = token_generator.generate_token(payload)
token_parser = TokenParser(app.security, token_expiration)
freezer.move_to(validation_time)

with pytest.raises(TokenValidationError):
token_parser.parse(token)


def test_parse__invalid_token():
token_expiration = 1 * 60 # 1 minute
invalid_token = "invalid_token"

app, _ = build_app()
token_parser = TokenParser(app.security, token_expiration)

with pytest.raises(TokenValidationError):
token_parser.parse(invalid_token)
Original file line number Diff line number Diff line change
Expand Up @@ -50,44 +50,3 @@ def test_validate_refresh_token__invalid():

with pytest.raises(BadData):
token_validator.validate_token(invalid_token)


def test_get_token_payload():
token_expiration_timedelta = 1 * 60 # 1 minute
payload = "fake_user_id"

app, _ = build_app()
token_generator = TokenGenerator(app.security)
token_validator = TokenValidator(app.security, token_expiration_timedelta)

token = token_generator.generate_token(payload)

assert token_validator.get_token_payload(token) == payload


def test_get_token_payload__expired_token(freezer):
token_expiration = 1 * 60 # 1 minute
generation_time = "2020-01-01 00:00:00"
validation_time = "2020-01-01 00:03:30"
payload = "fake_user_id"

app, _ = build_app()
token_generator = TokenGenerator(app.security)
freezer.move_to(generation_time)
token = token_generator.generate_token(payload)
token_validator = TokenValidator(app.security, token_expiration)
freezer.move_to(validation_time)

with pytest.raises(SignatureExpired):
token_validator.get_token_payload(token)


def test_get_token_payload__invalid_token():
token_expiration = 1 * 60 # 1 minute
invalid_token = "invalid_token"

app, _ = build_app()
token_validator = TokenValidator(app.security, token_expiration)

with pytest.raises(BadData):
token_validator.get_token_payload(invalid_token)

0 comments on commit f9ad76b

Please sign in to comment.