def test_startup_and_check_config_doc(idstorage, mongo): col = mongo.client[TEST_DB_NAME]['config'] assert col.count() == 1 # only one config doc cfgdoc = col.find_one() assert cfgdoc['schema'] == 'schema' assert cfgdoc['schemaver'] == 1 assert cfgdoc['inupdate'] is False # check startup works with cfg object in place idmap = IDMappingMongoStorage(mongo.client[TEST_DB_NAME]) idmap.create_local_user(Username('foo'), HashedToken('t')) assert idmap.get_user(HashedToken('t')) == (Username('foo'), False)
def test_update_user_token_fail_input_None(idstorage): t = HashedToken('t') u = Username('u') fail_update_user_token(idstorage, None, t, TypeError('username cannot be None')) fail_update_user_token(idstorage, u, None, TypeError('token cannot be None'))
def check_local_get_user_admin(isadmin): storage = create_autospec(IDMappingStorage, spec_set=True, instance=True) storage.get_user.return_value = (Username('bar'), isadmin) assert LocalUserLookup(storage).get_user(Token('foo')) == \ (User(AuthsourceID('local'), Username('bar')), isadmin, None, 300) thash = '2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae' assert storage.get_user.call_args_list == [((HashedToken(thash), ), {})]
def test_get_users(idstorage): assert idstorage.get_users() == {} idstorage.create_local_user(Username('foo'), HashedToken('t1')) assert idstorage.get_users() == {Username('foo'): False} idstorage.create_local_user(Username('mrsentity'), HashedToken('t2')) idstorage.create_local_user(Username('mrsenigma'), HashedToken('t3')) idstorage.update_local_user_token(Username('mrsenigma'), HashedToken('t4')) idstorage.set_local_user_as_admin(Username('foo'), True) idstorage.set_local_user_as_admin(Username('mrsenigma'), True) assert idstorage.get_users() == { Username('foo'): True, Username('mrsenigma'): True, Username('mrsentity'): False }
def test_set_user_as_admin(idstorage): idstorage.create_local_user(Username('foo'), HashedToken('bar')) assert idstorage.get_user(HashedToken('bar')) == (Username('foo'), False) # set twice to check 2nd is no-op idstorage.set_local_user_as_admin(Username('foo'), True) idstorage.set_local_user_as_admin(Username('foo'), True) assert idstorage.get_user(HashedToken('bar')) == (Username('foo'), True) idstorage.set_local_user_as_admin(Username('foo'), False) idstorage.set_local_user_as_admin(Username('foo'), False) assert idstorage.get_user(HashedToken('bar')) == (Username('foo'), False) idstorage.set_local_user_as_admin(Username('foo'), True) idstorage.set_local_user_as_admin(Username('foo'), None) assert idstorage.get_user(HashedToken('bar')) == (Username('foo'), False)
def test_hashed_token_hash(): # string hashes will change from instance to instance of the python interpreter, and therefore # tests can't be written that directly test the hash value. See # https://docs.python.org/3/reference/datamodel.html#object.__hash__ assert hash(HashedToken('foo')) == hash(HashedToken('foo')) assert hash(HashedToken('bar')) == hash(HashedToken('bar')) assert hash(HashedToken('foo')) != hash(HashedToken('bar'))
def test_create_update_and_get_user(idstorage): # create idstorage.create_local_user(Username('foo'), HashedToken('bar')) assert idstorage.get_user(HashedToken('bar')) == (Username('foo'), False) # update idstorage.update_local_user_token(Username('foo'), HashedToken('bat')) assert idstorage.get_user(HashedToken('bat')) == (Username('foo'), False) idstorage.update_local_user_token(Username('foo'), HashedToken('boo')) assert idstorage.get_user(HashedToken('boo')) == (Username('foo'), False) # test different user idstorage.create_local_user(Username('foo1'), HashedToken('baz')) assert idstorage.get_user(HashedToken('baz')) == (Username('foo1'), False)
def test_user_exists(idstorage): idstorage.create_local_user(Username('foo'), HashedToken('t1')) assert idstorage.user_exists(Username('foo')) is True assert idstorage.user_exists(Username('bar')) is False
def test_set_local_user_as_admin_fail_no_such_user(idstorage): idstorage.create_local_user(Username('bar'), HashedToken('whoo')) fail_set_local_user_as_admin(idstorage, Username('foo'), NoSuchUserError('foo'))
def test_get_user_fail_no_such_token(idstorage): idstorage.create_local_user(Username('u'), HashedToken('t')) fail_get_user(idstorage, HashedToken('t1'), InvalidTokenError())
def test_update_user_token_fail_no_such_user(idstorage): idstorage.create_local_user(Username('u'), HashedToken('t')) fail_update_user_token(idstorage, Username('u1'), HashedToken('t1'), NoSuchUserError('u1'))
def test_update_user_token_fail_duplicate_token(idstorage): idstorage.create_local_user(Username('u'), HashedToken('t')) idstorage.create_local_user(Username('u1'), HashedToken('t1')) fail_update_user_token( idstorage, Username('u1'), HashedToken('t'), ValueError('The provided token already exists in the database'))
def test_create_user_fail_duplicate_user(idstorage): idstorage.create_local_user(Username('u'), HashedToken('t')) fail_create_user(idstorage, Username('u'), HashedToken('t1'), UserExistsError('u'))
def test_hashed_token_init_pass(): ht = HashedToken('foo') assert ht.token_hash == 'foo'
def test_hashed_token_equals(): assert HashedToken('foo') == HashedToken('foo') assert HashedToken('foo') != HashedToken('bar') assert HashedToken('foo') != 'foo'
def fail_hashed_token_init(htoken: str, expected: Exception): with raises(Exception) as got: HashedToken(htoken) assert_exception_correct(got.value, expected)