diff --git a/tests/test_administration.py b/tests/test_administration.py
index 9ecc1360dc537852463c8ab3c2abc945266711e2..639396e37a8efb9bff173458b641c3e6fe4f47cc 100644
--- a/tests/test_administration.py
+++ b/tests/test_administration.py
@@ -30,9 +30,7 @@ from caosdb import administration as admin
 from caosdb.connection.connection import configure_connection, get_connection
 from caosdb.exceptions import (HTTPClientError, HTTPForbiddenError,
                                LoginFailedError, HTTPResourceNotFoundError)
-from nose.tools import (assert_equal, assert_is_not_none, assert_raises,
-                        assert_true)
-from pytest import raises
+from pytest import raises, mark
 
 test_role = "test_role"
 test_user = "test_user"
@@ -72,6 +70,10 @@ def teardown():
         admin._delete_role(name=test_role)
     except Exception as e:
         print(e)
+    try:
+        admin._delete_role(name=test_role + "2")
+    except Exception as e:
+        print(e)
 
 
 def switch_to_normal_user():
@@ -111,20 +113,17 @@ def test_insert_role_failure_permission():
 
 def test_insert_role_failure_name_duplicates():
     test_insert_role_success()
-    with assert_raises(HTTPClientError) as cm:
+    with raises(HTTPClientError) as cm:
         admin._insert_role(name=test_role, description=test_role_desc)
-    assert_equal(
-        cm.exception.msg,
-        "Role name is already in use. Choose a different name.")
+    assert cm.value.msg == "Role name is already in use. Choose a different name."
 
 
 def test_update_role_success():
     test_insert_role_success()
-    assert_is_not_none(
-        admin._update_role(
-            name=test_role,
-            description=test_role_desc +
-            "asdf"))
+    assert admin._update_role(
+        name=test_role,
+        description=test_role_desc +
+        "asdf") is not None
 
 
 def test_update_role_failure_permissions():
@@ -143,7 +142,7 @@ def test_update_role_failure_non_existing():
 
 def test_delete_role_success():
     test_insert_role_success()
-    assert_true(admin._delete_role(name=test_role))
+    assert admin._delete_role(name=test_role) == b"ok"
 
 
 def test_delete_role_failure_permissions():
@@ -163,7 +162,7 @@ def test_delete_role_failure_non_existing():
 def test_retrieve_role_success():
     test_insert_role_success()
     r = admin._retrieve_role(test_role)
-    assert_is_not_none(r)
+    assert r is not None
 
 
 def test_retrieve_role_failure_permission():
@@ -182,13 +181,10 @@ def test_retrieve_role_failure_non_existing():
 
 def test_set_permissions_success():
     test_insert_role_success()
-    assert_true(
-        admin._set_permissions(
-            role=test_role,
-            permission_rules=[
-                admin.PermissionRule(
-                    "Grant",
-                    "BLA:BLA:BLA")]))
+    assert admin._set_permissions(
+        role=test_role, permission_rules=[
+            admin.PermissionRule(
+                "Grant", "BLA:BLA:BLA")]) == b"ok"
 
 
 def test_set_permissions_failure_permissions():
@@ -214,8 +210,8 @@ def test_set_permissions_failure_non_existing():
 def test_get_permissions_success():
     test_set_permissions_success()
     r = admin._get_permissions(role=test_role)
-    assert_equal({admin.PermissionRule("Grant", "BLA:BLA:BLA")}, r)
-    assert_is_not_none(r)
+    assert {admin.PermissionRule("Grant", "BLA:BLA:BLA")} == r
+    assert r is not None
 
 
 def test_get_permissions_failure_permissions():
@@ -235,7 +231,7 @@ def test_get_permissions_failure_non_existing():
 def test_get_roles_success():
     test_insert_role_success()
     r = admin._get_roles(username=test_user)
-    assert_is_not_none(r)
+    assert r is not None
 
     return r
 
@@ -258,17 +254,17 @@ def test_set_roles_success():
     roles_old = test_get_roles_success()
     roles = {test_role}
     roles.union(roles_old)
-    assert_is_not_none(admin._set_roles(username=test_user, roles=roles_old))
-    assert_is_not_none(admin._set_roles(username=test_user, roles=roles))
-    assert_is_not_none(admin._set_roles(username=test_user, roles=roles_old))
+    assert admin._set_roles(username=test_user, roles=roles_old) is not None
+    assert admin._set_roles(username=test_user, roles=roles) is not None
+    assert admin._set_roles(username=test_user, roles=roles_old) is not None
 
 
 def test_set_roles_success_with_warning():
     test_insert_role_success()
     roles = {test_role}
     r = admin._set_roles(username=test_user, roles=roles)
-    assert_is_not_none(r)
-    assert_is_not_none(admin._set_roles(username=test_user, roles=[]))
+    assert r is not None
+    assert admin._set_roles(username=test_user, roles=[]) is not None
 
 
 def test_set_roles_failure_permissions():
@@ -283,9 +279,9 @@ def test_set_roles_failure_permissions():
 
 def test_set_roles_failure_non_existing_role():
     roles = {"non-existing-role"}
-    with assert_raises(HTTPClientError) as cm:
+    with raises(HTTPClientError) as cm:
         admin._set_roles(username=test_user, roles=roles)
-    assert_equal(cm.exception.msg, "Role does not exist.")
+    assert cm.value.msg == "Role does not exist."
 
 
 def test_set_roles_failure_non_existing_user():
@@ -319,14 +315,14 @@ def test_insert_user_failure_permissions():
 
 def test_insert_user_failure_name_in_use():
     test_insert_user_success()
-    with assert_raises(HTTPClientError) as cm:
+    with raises(HTTPClientError) as cm:
         test_insert_user_success()
-    assert_equal(cm.exception.msg, "User name is already in use.")
+    assert cm.value.msg == "User name is already in use."
 
 
 def test_delete_user_success():
     test_insert_user_success()
-    assert_is_not_none(admin._delete_user(name=test_user + "2"))
+    assert admin._delete_user(name=test_user + "2") is not None
 
 
 def test_delete_user_failure_permissions():
@@ -344,13 +340,12 @@ def test_delete_user_failure_non_existing():
 
 
 def test_update_user_success_status():
-    assert_is_not_none(
-        admin._insert_user(
-            name=test_user + "2",
-            password="secret1P!",
-            status="INACTIVE",
-            email="email@example.com",
-            entity=None))
+    assert admin._insert_user(
+        name=test_user + "2",
+        password="secret1P!",
+        status="INACTIVE",
+        email="email@example.com",
+        entity=None) is not None
     admin._update_user(
         realm=None,
         name=test_user + "2",
@@ -361,13 +356,12 @@ def test_update_user_success_status():
 
 
 def test_update_user_success_email():
-    assert_is_not_none(
-        admin._insert_user(
-            name=test_user + "2",
-            password="secret1P!",
-            status="ACTIVE",
-            email="email@example.com",
-            entity=None))
+    assert admin._insert_user(
+        name=test_user + "2",
+        password="secret1P!",
+        status="ACTIVE",
+        email="email@example.com",
+        entity=None) is not None
     admin._update_user(
         realm=None,
         name=test_user + "2",
@@ -378,25 +372,23 @@ def test_update_user_success_email():
 
 
 def test_update_user_success_entity():
-    assert_is_not_none(
-        admin._insert_user(
-            name=test_user + "2",
-            password="secret1P!",
-            status="ACTIVE",
-            email="email@example.com",
-            entity=None))
+    assert admin._insert_user(
+        name=test_user + "2",
+        password="secret1P!",
+        status="ACTIVE",
+        email="email@example.com",
+        entity=None) is not None
     admin._update_user(realm=None, name=test_user + "2", password=None,
                        status=None, email=None, entity="21")
 
 
 def test_update_user_success_password():
-    assert_is_not_none(
-        admin._insert_user(
-            name=test_user + "2",
-            password="secret1P!",
-            status="ACTIVE",
-            email="email@example.com",
-            entity=None))
+    assert admin._insert_user(
+        name=test_user + "2",
+        password="secret1P!",
+        status="ACTIVE",
+        email="email@example.com",
+        entity=None) is not None
     admin._update_user(
         realm=None,
         name=test_user + "2",
@@ -500,7 +492,7 @@ def test_update_user_failure_non_existing_entity():
 
 def test_retrieve_user_success():
     test_insert_user_success()
-    assert_is_not_none(admin._retrieve_user(realm=None, name=test_user + "2"))
+    assert admin._retrieve_user(realm=None, name=test_user + "2") is not None
 
 
 def test_retrieve_user_failure_permissions():
@@ -518,14 +510,67 @@ def test_retrieve_user_failure_non_existing():
 
 
 def test_login_with_inactive_user_failure():
-    assert_is_not_none(
-        admin._insert_user(
-            name=test_user + "2",
-            password="secret1P!",
-            status="INACTIVE",
-            email="email@example.com",
-            entity=None))
+    assert admin._insert_user(
+        name=test_user + "2",
+        password="secret1P!",
+        status="INACTIVE",
+        email="email@example.com",
+        entity=None) is not None
     configure_connection(username=test_user + "2", password="secret1P!",
                          password_method="plain")
-    with assert_raises(LoginFailedError):
+    with raises(LoginFailedError):
         get_connection()._login()
+
+
+def grant_role_permission(role_name, role_permissions,
+                          permissions_priority=False):
+    perms = admin._get_permissions(role_name)
+
+    for p in role_permissions:
+        g = admin.PermissionRule(
+            action="Grant", permission=p, priority=permissions_priority)
+        d = admin.PermissionRule(
+            action="Deny", permission=p, priority=permissions_priority)
+
+        if g in perms:
+            perms.remove(g)
+
+        if d in perms:
+            perms.remove(d)
+        perms.add(g)
+    admin._set_permissions(role=role_name, permission_rules=perms)
+
+
+def add_roles(user_name, user_roles):
+    roles = admin._get_roles(username=user_name, realm=None)
+
+    for r in user_roles:
+        roles.add(r)
+    admin._set_roles(username=user_name, roles=roles)
+
+
+@mark.xfail(reason=("fix needed for "
+            "https://gitlab.com/caosdb/caosdb-server/-/issues/128"))
+def test_update_own_password():
+    admin._insert_user(
+        name=test_user + "2",
+        password="secret1P!",
+        status="ACTIVE",
+        email="email@example.com",
+        entity=None)
+
+    # workaround
+    # admin._insert_role(name=test_role + "2", description="some role_description")
+    # add_roles(test_user + "2", [test_role + "2"])
+    # grant_role_permission(test_role + "2",
+    # ["ACM:USER:UPDATE_PASSWORD:?REALM?:?USERNAME?"])
+
+    configure_connection(username=test_user + "2", password="secret1P!",
+                         password_method="plain")
+    assert b"ok" == admin._update_user(
+        realm=None,
+        name=test_user + "2",
+        password="newsecret1P!",
+        status=None,
+        email=None,
+        entity=None)