creole/tests/test_upgrade.py

309 lines
13 KiB
Python

#-*-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'