import os import subprocess import pytest from ceo_common.errors import UserNotFoundError, UserAlreadyExistsError from ceod.model import User def test_user_add_to_ldap(cfg, ldap_srv, simple_user, g_admin): user = simple_user min_id = cfg.get('members_min_id') user.add_to_ldap() retrieved_user = ldap_srv.get_user(user.uid) assert retrieved_user.uid == user.uid assert retrieved_user.uid_number >= min_id with pytest.raises(UserAlreadyExistsError): user.add_to_ldap() user.remove_from_ldap() with pytest.raises(UserNotFoundError): ldap_srv.get_user(user.uid) def test_club_add_to_ldap(cfg, ldap_srv, simple_club, g_admin): club = simple_club min_id = cfg.get('clubs_min_id') club.add_to_ldap() retrieved_club = ldap_srv.get_user(club.uid) assert retrieved_club.uid_number >= min_id club.remove_from_ldap() def getprinc(username, admin_principal, should_exist=True): proc = subprocess.run([ 'kadmin', '-k', '-p', admin_principal, 'getprinc', username, ], capture_output=True) if should_exist: assert proc.returncode == 0 else: assert proc.returncode != 0 def test_user_add_to_kerberos(cfg, simple_user): user = simple_user admin_principal = cfg.get('ldap_admin_principal') user.add_to_kerberos('krb5') getprinc(user.uid, admin_principal, True) user.remove_from_kerberos() getprinc(user.uid, admin_principal, False) def test_user_forwarding_addresses(cfg, ldap_user): user = ldap_user user.create_home_dir() assert os.path.isdir(user.home_directory) assert os.path.isfile(os.path.join(user.home_directory, '.bashrc')) assert user.get_forwarding_addresses() == [] user.set_forwarding_addresses(['jdoe@example.com']) assert user.get_forwarding_addresses() == ['jdoe@example.com'] assert open(os.path.join(user.home_directory, '.forward')).read() \ == 'jdoe@example.com\n' user.set_forwarding_addresses([]) assert user.get_forwarding_addresses() == [] assert open(os.path.join(user.home_directory, '.forward')).read() == '' user.delete_home_dir() assert not os.path.isdir(user.home_directory) def test_user_terms(ldap_user, ldap_srv, g_admin): user = ldap_user user.add_terms(['f2021']) assert user.terms == ['s2021', 'f2021'] assert ldap_srv.get_user(user.uid).terms == user.terms user.add_non_member_terms(['w2022', 's2022']) assert user.non_member_terms == ['w2022', 's2022'] assert ldap_srv.get_user(user.uid).non_member_terms == user.non_member_terms def test_user_positions(ldap_user, ldap_srv, g_admin): user = ldap_user user.add_position('treasurer') assert user.positions == ['treasurer'] assert ldap_srv.get_user(user.uid).positions == user.positions user.add_position('cro') assert user.positions == ['treasurer', 'cro'] assert ldap_srv.get_user(user.uid).positions == user.positions user.remove_position('cro') assert user.positions == ['treasurer'] assert ldap_srv.get_user(user.uid).positions == user.positions def test_user_change_password(krb_user): user = krb_user # TODO: test the password with kinit or similar user.change_password('new_password') def test_login_shell(ldap_user, ldap_srv, g_admin): user = ldap_user user.replace_login_shell('/bin/sh') assert user.login_shell == '/bin/sh' assert ldap_srv.get_user(user.uid).login_shell == user.login_shell def test_user_to_dict(cfg): user = User( uid='test_jsmith', cn='John Smith', program='Math', terms=['s2021'], uid_number=21000, gid_number=21000, positions=['secretary'], ) expected = { 'uid': user.uid, 'cn': user.cn, 'program': user.program, 'terms': user.terms, 'uid_number': user.uid_number, 'gid_number': user.gid_number, 'positions': user.positions, 'login_shell': '/bin/bash', 'home_directory': user.home_directory, 'is_club': False, } assert user.to_dict() == expected user.mail_local_addresses = ['john.smith@csclub.internal'] expected['mail_local_addresses'] = user.mail_local_addresses assert user.to_dict() == expected user.create_home_dir() expected['forwarding_addresses'] = [] assert user.to_dict(True) == expected