mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Moved into SecurityHelper. Also fixed up style, elminated unconditional exception handling, and added unit tests.
74 lines
2.8 KiB
Python
74 lines
2.8 KiB
Python
from galaxy.web import security
|
|
|
|
|
|
test_helper_1 = security.SecurityHelper( id_secret="sec1" )
|
|
test_helper_2 = security.SecurityHelper( id_secret="sec2" )
|
|
|
|
|
|
def test_encode_decode():
|
|
# Different ids are encoded differently
|
|
assert test_helper_1.encode_id( 1 ) != test_helper_1.encode_id( 2 )
|
|
# But decoding and encoded id brings back to original id
|
|
assert 1 == test_helper_1.decode_id( test_helper_1.encode_id( 1 ) )
|
|
|
|
|
|
def test_nested_encoding():
|
|
# Does nothing if not a dict
|
|
assert test_helper_1.encode_all_ids( 1 ) == 1
|
|
|
|
# Encodes top-level things ending in _id
|
|
assert test_helper_1.encode_all_ids( dict( history_id=1 ) )[ "history_id" ] == test_helper_1.encode_id( 1 )
|
|
# ..except tool_id
|
|
assert test_helper_1.encode_all_ids( dict( tool_id=1 ) )[ "tool_id" ] == 1
|
|
|
|
# Encodes lists at top level is end in _ids
|
|
expected_ids = [ test_helper_1.encode_id( 1 ), test_helper_1.encode_id( 2 ) ]
|
|
assert test_helper_1.encode_all_ids( dict( history_ids=[ 1, 2 ] ) )[ "history_ids" ] == expected_ids
|
|
|
|
# Encodes nested stuff if and only if recursive set to true.
|
|
nested_dict = dict( objects=dict( history_ids=[ 1, 2 ] ) )
|
|
assert test_helper_1.encode_all_ids( nested_dict )[ "objects" ][ "history_ids" ] == [ 1, 2 ]
|
|
assert test_helper_1.encode_all_ids( nested_dict, recursive=False )[ "objects" ][ "history_ids" ] == [ 1, 2 ]
|
|
assert test_helper_1.encode_all_ids( nested_dict, recursive=True )[ "objects" ][ "history_ids" ] == expected_ids
|
|
|
|
|
|
def test_per_kind_encode_deocde():
|
|
# Different ids are encoded differently
|
|
assert test_helper_1.encode_id( 1, kind="k1" ) != test_helper_1.encode_id( 2, kind="k1" )
|
|
# But decoding and encoded id brings back to original id
|
|
assert 1 == test_helper_1.decode_id( test_helper_1.encode_id( 1, kind="k1" ), kind="k1" )
|
|
|
|
|
|
def test_different_secrets_encode_differently():
|
|
assert test_helper_1.encode_id( 1 ) != test_helper_2.encode_id( 1 )
|
|
|
|
|
|
def test_per_kind_encodes_id_differently():
|
|
assert test_helper_1.encode_id( 1 ) != test_helper_2.encode_id( 1, kind="new_kind" )
|
|
|
|
|
|
def test_encode_dict():
|
|
test_dict = dict(
|
|
id=1,
|
|
other=2,
|
|
history_id=3,
|
|
)
|
|
encoded_dict = test_helper_1.encode_dict_ids( test_dict )
|
|
assert encoded_dict[ "id" ] == test_helper_1.encode_id( 1 )
|
|
assert encoded_dict[ "other" ] == 2
|
|
assert encoded_dict[ "history_id" ] == test_helper_1.encode_id( 3 )
|
|
|
|
|
|
def test_guid_generation():
|
|
guids = set()
|
|
for i in range( 100 ):
|
|
guids.add( test_helper_1.get_new_guid() )
|
|
assert len( guids ) == 100 # Not duplicate guids generated.
|
|
|
|
|
|
def test_encode_decode_guid():
|
|
session_key = test_helper_1.get_new_guid()
|
|
encoded_key = test_helper_1.encode_guid( session_key )
|
|
decoded_key = test_helper_1.decode_guid( encoded_key ).encode( "utf-8" )
|
|
assert session_key == decoded_key, "%s != %s" % ( session_key, decoded_key )
|