#-*-coding:utf-8*-* """ Tests liés à la migration de variables """ from os.path import join, isfile from creole import eosfunc from creole.loader import creole_loader from pyeole.log import init_logging log=init_logging() CONFIG_DIR = '/usr/share/creole/tests/configs' DICO_DIR = '/usr/share/eole/creole/dicos' def _calc_config_file(test): """ nom du fichier eol lié au test """ return join(CONFIG_DIR, '{0}.eol'.format(test)) def _get_value(config, variable): """ Retourne la valeur d'une variable "connue" """ path = config.find_first(byname=variable, type_='path') return config.getattr(path, force_permissive=True) def _isdico(name): """ Vérifie la présence d'un dictionnaire """ return isfile(join(DICO_DIR, '{}.xml'.format(name))) def _is_default(config, variable): option = config.find_first(byname=variable, type_='option') return config.cfgimpl_get_values().is_default_owner(option) def test_upgrade_hosts_from23(): """ Vérifie la migration des variables "activer_ajout_hosts" depuis une configuration 2.3 contenant des majuscules #11473 et un doublon sur le nom court #12266 """ config = creole_loader(force_configeol=_calc_config_file('hosts23')) assert _get_value(config, 'activer_ajout_hosts') == 'oui' assert _get_value(config, 'nom_court_hosts') == ['min', 'maj', 'wpad', None] assert _get_value(config, 'nom_long_hosts') == ['min.min', 'maj.maj', 'wpad.admin.lan', 'wpad.pedago.lan'] def test_upgrade_scribe_dmz(): """ Vérifie la migration de la variable "install_scribe_dmz" en fonction du remplissage des esclaves associées #11713 ce test n'est pas compatible avec AmonEcole #11796 """ if isfile(join(DICO_DIR, '10_era.xml')) and not isfile(join(DICO_DIR, '50_amonecole.xml')): config = creole_loader(force_configeol=_calc_config_file('scribe_dmz_ok')) assert _get_value(config, 'install_scribe_dmz') == 'oui' config = creole_loader(force_configeol=_calc_config_file('scribe_dmz_ko')) assert _get_value(config, 'install_scribe_dmz') == 'non' def test_serveur_maj(): """ Vérifie la migration de la variable serveur_maj Les serveurs officiels doivent être renommés """ config = creole_loader(force_configeol=_calc_config_file('maj23')) assert _get_value(config, 'serveur_maj') == ['test-eole.ac-dijon.fr', 'eole.ac-dijon.fr', 'eoleng.ac-test.fr', 'ftp.crihan.fr'] ##################################### # tests spécifiques à EOLE >= 2.4.2 # ##################################### def test_upgrade_force_envole(): """ Vérifie la valeur de la redirection par défaut "web_redirection" dans le cas où Envole était activé #11582 test modifié suite à la suppression de la variable alias_envole #10549 """ if isfile('/usr/share/eole/creole/dicos/20_web.xml'): config = creole_loader(force_configeol=_calc_config_file('envole')) if isfile('/usr/share/eole/creole/dicos/21_posh.xml'): assert _get_value(config, 'web_redirection') == u'/envole' else: assert _get_value(config, 'web_redirection') == u'/testenvole' ##################################### # tests spécifiques à EOLE >= 2.5.0 # ##################################### def test_upgrade_nut_monitor(): """ Vérifie l'activation de la variable "nut_monitor" si un onduleur esclave était déclaré #11608 """ config = creole_loader(force_configeol=_calc_config_file('onduleur24')) assert _get_value(config, 'nut_monitor') == u'oui' def test_upgrade_postgresql(): """ Vérifie la mise à jour des variables postgeSQL #11222 """ if isfile('/usr/share/eole/creole/dicos/22_postgresql.xml'): config = creole_loader(force_configeol=_calc_config_file('postgres23_default')) assert _get_value(config, 'pg_shared_buffers') == 128 assert _get_value(config, 'pg_shared_buffers_unit') == u'MB' config = creole_loader(force_configeol=_calc_config_file('postgres23_modif')) assert _get_value(config, 'pg_shared_buffers') == 6000 assert _get_value(config, 'pg_shared_buffers_unit') == u'kB' ##################################### # tests spécifiques à EOLE >= 2.5.1 # ##################################### def test_upgrade_zone_forward(): """ Vérifie l'activation de la variable "activer_zone_forward" si des zones étaient déclarées #11922 """ if isfile('/usr/share/eole/creole/dicos/22_dns.xml'): config = creole_loader(force_configeol=_calc_config_file('zone_forward24')) assert _get_value(config, 'activer_zone_forward') == u'oui' def test_upgrade_bareos_from23(): """ Valide le renommage des variables bacula en bareos entre 2.3 et 2.5.1 #13957 """ if isfile('/usr/share/eole/creole/dicos/23_bareos.xml'): config = creole_loader(force_configeol=_calc_config_file('bacula23')) assert _get_value(config, 'bareos_full_retention') == 13 def test_upgrade_amon23(): """ Valide que la migration des variables "etb1.amon" va à son terme #14589 """ if isfile('/usr/share/eole/creole/dicos/30_amon.xml'): config = creole_loader(force_configeol=_calc_config_file('amon23')) assert config.impl_get_information('upgrade', False) == '2.3' assert _get_value(config, 'half_closed_clients') == 'off' ##################################### # tests spécifiques à EOLE >= 2.5.2 # ##################################### def test_upgrade_sphynxhamaster(): """ Valide la migration des variables haute-dispo sur le master #14881 """ if isfile('/usr/share/eole/creole/dicos/30_sphynx.xml'): config = creole_loader(force_configeol=_calc_config_file('hamaster241')) assert _get_value(config, 'activer_haute_dispo') == 'maitre' assert _get_value(config, 'vip_externe') == '192.168.0.10' assert _get_value(config, 'vip_interne') == '172.30.101.10' assert _get_value(config, 'vip_resource_netmask') == ['255.255.255.0', '255.255.255.0'] assert _get_value(config, 'vip_resource_gw') == ['192.168.0.1', '255.255.255.255'] assert _get_value(config, 'service_resource_name') == [u'ipsec_rsc', u'arv_rsc'] assert _get_value(config, 'service_resource_script') == [u'strongswan', u'arv'] assert _get_value(config, 'service_resource_arv_startdelay') == 30 assert _get_value(config, 'service_resource_startdelay') == [15, 30] assert _get_value(config, 'activer_resource_arv') == u'oui' ##################################### # tests spécifiques à EOLE >= 2.6.0 # ##################################### def test_upgrade_eth_name(): """ Valide la migration des variables faisant référence aux noms des interfaces ethX sur eolebase """ config = creole_loader(force_configeol=_calc_config_file('upgrade_eth_name252')) assert _get_value(config, 'route_int') == ['0', '1', '2', '3', '4'] if _isdico('20_dhcrelay') and not _isdico('50_amonecole'): assert _get_value(config, 'dhcrelay_interfaces') == ['1', '2'] assert _get_value(config, 'dhcrelay_server_interface') == '3' if _isdico('26_freeradius'): assert _get_value(config, 'freerad_listen_int') == '2' if _isdico('20_vpn'): assert _get_value(config, 'sw_force_ip_src') == '1' if _isdico('02_haute_dispo'): assert _get_value(config, 'activer_haute_dispo') == 'maitre' assert _get_value(config, 'vip_resource_if') == ['0', '1'] assert _get_value(config, 'corosync_dial_if') == '2' ##################################### # tests spécifiques à EOLE >= 2.6.1 # ##################################### def test_upgrade_ntlm(): """ Migration des variables NTLM/SMB (#18277) """ if isfile('/usr/share/eole/creole/dicos/23_proxy.xml'): config = creole_loader(force_configeol=_calc_config_file('ntlm')) assert _get_value(config, 'nom_serveur_smb') == 'scribe' assert _get_value(config, 'nom_domaine_smb') == 'dompedago' assert _get_value(config, 'ip_serveur_smb') == '10.1.3.5' def test_upgrade_nom_interface(): """ Migration des variables nom_carte_ethX """ config = creole_loader(force_configeol=_calc_config_file('nom_carte')) assert _get_value(config, 'nom_carte_eth0') == [eosfunc.get_net_devices()[0]] assert _get_value(config, 'nom_carte_eth1') == [u'carte1'] ##################################### # tests spécifiques à EOLE >= 2.6.2 # ##################################### def test_upgrade_dhcp(): """ Valide le remplissage de la nouvelle variable obligatoire nom_plage_dhcp """ if isfile('/usr/share/eole/creole/dicos/20_dhcp.xml'): config = creole_loader(force_configeol=_calc_config_file('plagedhcp'), rw=True) config.creole.services.activer_dhcp = u'oui' assert _get_value(config, 'nom_plage_dhcp') == [u'plage0', u'plage1'] def test_upgrade_backend_ead(): """ Valide le remplissage des nouvelles variables obligatoires ip_frontend_ead_distant_ethX et netmask_frontend_ead_distant_ethX """ config = creole_loader(force_configeol=_calc_config_file('config_261')) assert _get_value(config, 'acces_distant_backend_ead') == 'oui' if isfile('/usr/share/eole/creole/dicos/28_openvswitch.xml'): nombre_interfaces = 1 #hack for Hâpy #21039 else: nombre_interfaces = int(_get_value(config, 'nombre_interfaces')) for interface in [str(n) for n in range(nombre_interfaces)]: variable_frontend = 'frontend_ead_distant_eth' + interface variable_ip = 'ip_frontend_ead_distant_eth' + interface variable_netmask = 'netmask_frontend_ead_distant_eth' + interface assert _get_value(config, variable_frontend) == 'oui' assert _get_value(config, variable_ip) == [u'0.0.0.0'] assert _get_value(config, variable_netmask) == [u'0.0.0.0'] def test_upgrade_seth(): """ Valide les modifications apportées dans le dico AD - remplissage de la variable oui/non : ad_force_domain_sid (#21295) - remplissage de la variable oui/non : ad_filter_network (#21324) - fusion des autorisations de pare-feu (#21324) """ if isfile('/usr/share/eole/creole/dicos/25_smb_ad.xml'): config = creole_loader(force_configeol=_calc_config_file('seth261')) assert _get_value(config, 'ad_force_domain_sid') == 'oui' assert _get_value(config, 'ad_filter_network') == 'oui' # FIXME: doublons ? assert _get_value(config, 'ad_peer_ip') == [u'1.1.1.1', u'2.2.2.2', u'1.1.1.1', u'3.3.3.0'] assert _get_value(config, 'ad_peer_netmask') == [u'255.255.255.255', u'255.255.255.255', u'255.255.255.255', u'255.255.255.0'] def test_upgrade_squid(): """ Valide la transformation des variables Squid passées de minutes en secondes * connect_timeout is not customised (60s is the new default value) * peer_connect_timeout was already in seconds """ if isfile('/usr/share/eole/creole/dicos/23_proxy.xml'): config = creole_loader(force_configeol=_calc_config_file('squid261')) for squidvar in ['forward_timeout', 'connect_timeout', 'peer_connect_timeout', 'read_timeout', 'request_timeout', 'persistent_request_timeout']: assert _get_value(config, squidvar) == 60 def test_upgrade_exim_relay(): """ Valide le remplissage des variables exim_relay et exim_relay_dhcp : - Sur Scribe remplissage à 'oui' - Sur les autres modules, on garde la valeur par défaut ('non') """ config = creole_loader(force_configeol=_calc_config_file('exim_relay_261')) if isfile('/usr/share/eole/creole/dicos/30_scribe.xml'): assert _get_value(config, 'exim_relay') == 'oui' assert _get_value(config, 'exim_relay_dhcp') == 'oui' elif isfile('/usr/share/eole/creole/dicos/30_seshat.xml'): assert _get_value(config, 'exim_relay') == 'oui' else: assert _get_value(config, 'exim_relay') == 'non' def test_upgrade_cert_empty(): config = creole_loader(force_configeol=_calc_config_file('certempty_261')) assert _get_value(config, 'cert_type') == u'autosigné' assert _is_default(config, 'server_cert') assert _get_value(config, 'server_cert') == '/etc/ssl/certs/eole.crt' assert _is_default(config, 'server_key') assert _get_value(config, 'server_key') == '/etc/ssl/certs/eole.key' assert _is_default(config, 'server_pem') assert _get_value(config, 'server_pem') == '/etc/ssl/certs/eole.pem' def test_upgrade_cert(): config = creole_loader(force_configeol=_calc_config_file('cert_261')) assert _get_value(config, 'cert_type') == 'manuel' assert not _is_default(config, 'server_cert') assert _get_value(config, 'server_cert') == '/etc/ssl/certs/eole.crt' assert not _is_default(config, 'server_key') assert _get_value(config, 'server_key') == '/etc/ssl/certs/eole.key' assert not _is_default(config, 'server_pem') assert _get_value(config, 'server_pem') == '/etc/ssl/certs/eole.pem'