def METHOD_NAME(self, table_type, privilege, node=None):
    """Check that user is able to execute GRANT and REVOKE privilege statements if and only if they have the privilege WITH GRANT OPTION,
    either directly or through a role.
    """
    user0_name = f"user0_{getuid()}"
    user1_name = f"user1_{getuid()}"
    role0_name = f"role0_{getuid()}"
    role1_name = f"role1_{getuid()}"
    if node is None:
        node = self.context.node
    with Suite("user with direct privilege granting to user"):
        with user(node, f"{user0_name},{user1_name}"):
            with When(f"I run checks that grant and revoke privilege from {user0_name} to {user1_name}"):
                grant_option_check(grant_option_target=user0_name, grant_target=user1_name, user_name=user0_name, table_type=table_type, privilege=privilege, node=node)
    with Suite("user with direct privilege granting to role"):
        with user(node, user0_name), role(node, role1_name):
            with When(f"I run checks that grant and revoke privilege from {user0_name} to {role1_name}"):
                grant_option_check(grant_option_target=user0_name, grant_target=role1_name, user_name=user0_name, table_type=table_type, privilege=privilege, node=node)
    with Suite("user with privilege via role granting to user"):
        with user(node, f"{user0_name},{user1_name}"), role(node, role0_name):
            with When("I grant the role to the user"):
                node.query(f"GRANT {role0_name} TO {user0_name}")
            with When(f"I run checks that grant and revoke privilege from {user0_name} with {role0_name} to {user1_name}"):
                grant_option_check(grant_option_target=role0_name, grant_target=user1_name, user_name=user0_name, table_type=table_type, privilege=privilege, node=node)
    with Suite("user with privilege via role granting to role"):
        with user(node, user0_name), role(node, f"{role0_name},{role1_name}"):
            with When("I grant the role to the user"):
                node.query(f"GRANT {role0_name} TO {user0_name}")
            with When(f"I run checks that grant and revoke privilege from {user0_name} with {role0_name} to {role1_name}"):
                grant_option_check(grant_option_target=role0_name, grant_target=role1_name, user_name=user0_name, table_type=table_type, privilege=privilege, node=node)