# coding: utf-8 from .autopath import do_autopath do_autopath() from tiramisu.setting import groups, owners from tiramisu import ChoiceOption, BoolOption, IntOption, \ StrOption, OptionDescription, MasterSlaves, Config, getapi from tiramisu.error import SlaveError, PropertiesOptionError, APIError, ConfigError from tiramisu.api import TIRAMISU_VERSION from py.test import raises def make_description(): numero_etab = StrOption('numero_etab', "identifiant de l'établissement") nom_machine = StrOption('nom_machine', "nom de la machine", default="eoleng") nombre_interfaces = IntOption('nombre_interfaces', "nombre d'interfaces à activer", default=1) activer_proxy_client = BoolOption('activer_proxy_client', "utiliser un proxy", default=False) mode_conteneur_actif = BoolOption('mode_conteneur_actif', "le serveur est en mode conteneur", default=False) mode_conteneur_actif2 = BoolOption('mode_conteneur_actif2', "le serveur est en mode conteneur2", default=False, properties=('hidden',)) adresse_serveur_ntp = StrOption('serveur_ntp', "adresse serveur ntp", multi=True) time_zone = ChoiceOption('time_zone', 'fuseau horaire du serveur', ('Paris', 'Londres'), 'Paris') ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé") netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau") master = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0]) interface1 = OptionDescription('interface1', '', [master]) interface1.impl_set_group_type(groups.family) general = OptionDescription('general', '', [numero_etab, nom_machine, nombre_interfaces, activer_proxy_client, mode_conteneur_actif, mode_conteneur_actif2, adresse_serveur_ntp, time_zone]) general.impl_set_group_type(groups.family) new = OptionDescription('new', '', [], properties=('hidden',)) new.impl_set_group_type(groups.family) creole = OptionDescription('creole', 'first tiramisu configuration', [general, interface1, new]) descr = OptionDescription('baseconfig', 'baseconifgdescr', [creole]) return descr def test_base_config(): descr = make_description() api = getapi(Config(descr)) api.property.read_write() assert api.option('creole.general.activer_proxy_client').value.get() is False assert api.option('creole.general.nom_machine').value.get() == "eoleng" assert api.option.find_first('nom_machine', type='value') == "eoleng" result = {'general.numero_etab': None, 'general.nombre_interfaces': 1, 'general.serveur_ntp': [], 'interface1.ip_admin_eth0.ip_admin_eth0': None, 'general.mode_conteneur_actif': False, 'general.time_zone': 'Paris', 'interface1.ip_admin_eth0.netmask_admin_eth0': None, 'general.nom_machine': 'eoleng', 'general.activer_proxy_client': False} assert api.option('creole').make_dict() == result result = {'serveur_ntp': [], 'mode_conteneur_actif': False, 'ip_admin_eth0': None, 'time_zone': 'Paris', 'numero_etab': None, 'netmask_admin_eth0': None, 'nom_machine': 'eoleng', 'activer_proxy_client': False, 'nombre_interfaces': 1} assert api.option('creole').make_dict(flatten=True) == result def test_make_dict_filter(): descr = make_description() api = getapi(Config(descr)) api.property.read_write() subresult = {'numero_etab': None, 'nombre_interfaces': 1, 'serveur_ntp': [], 'mode_conteneur_actif': False, 'time_zone': 'Paris', 'nom_machine': 'eoleng', 'activer_proxy_client': False} result = {} for key, value in subresult.items(): result['general.' + key] = value assert api.option('creole').make_dict(withoption='numero_etab') == result raises(AttributeError, "api.option('creole').make_dict(withoption='numero_etab', withvalue='toto')") assert api.option('creole').make_dict(withoption='numero_etab', withvalue=None) == result assert api.option('creole.general').make_dict(withoption='numero_etab') == subresult def test_get_group_type(): descr = make_description() api = getapi(Config(descr)) api.property.read_write() grp = api.option('creole.general') assert grp.group_type() == groups.family assert grp.group_type() == 'family' assert isinstance(grp.group_type(), groups.GroupType) #raises(TypeError, 'grp.impl_set_group_type(groups.default)') def test_iter_on_groups(): descr = make_description() api = getapi(Config(descr)) api.property.read_write() result = list(api.option('creole').list('optiondescription', group_type=groups.family)) group_names = [res[0] for res in result] assert group_names == ['general', 'interface1'] for i in api.option('creole').list('optiondescription', group_type=groups.family): #test StopIteration break def test_iter_on_groups_force_permissive(): descr = make_description() api = getapi(Config(descr)) api.property.read_write() api.permissive.set(frozenset(['hidden'])) #result = list(config.creole.general.__iter__(force_permissive=True)) group_names = list(api.forcepermissive.option('creole.general').list()) ass = ['numero_etab', 'nom_machine', 'nombre_interfaces', 'activer_proxy_client', 'mode_conteneur_actif', 'mode_conteneur_actif2', 'serveur_ntp', 'time_zone'] assert group_names == ass group_names = list(api.option('creole.general').list()) ass.remove('mode_conteneur_actif2') assert group_names == ass def test_iter_group_on_groups_force_permissive(): descr = make_description() api = getapi(Config(descr)) api.property.read_write() api.permissive.set(frozenset(['hidden'])) result = list(api.forcepermissive.option('creole').list(type='optiondescription', group_type=groups.family)) group_names = [res[0] for res in result] assert group_names == ['general', 'interface1', 'new'] def test_iter_on_groups_props(): descr = make_description() api = getapi(Config(descr)) api.property.read_write() api.option('creole.interface1').property.add('disabled') result = list(api.option('creole').list(type='optiondescription', group_type=groups.family)) group_names = [res[0] for res in result] assert group_names == ['general'] def test_iter_on_empty_group(): api = getapi(Config(OptionDescription("name", "descr", []))) api.property.read_write() result = list(api.option.list(type='optiondescription')) assert result == [] def test_iter_not_group(): api = getapi(Config(OptionDescription("name", "descr", []))) api.property.read_write() raises(TypeError, "list(api.option.list(type='optiondescription', group_type='family'))") def test_groups_with_master(): ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True) netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True) interface1 = MasterSlaves('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0]) #interface1.impl_set_group_type(groups.master) assert interface1.impl_get_group_type() == groups.master if TIRAMISU_VERSION != 2: def test_groups_with_master_in_root(): ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True) netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True) interface1 = MasterSlaves('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0]) raises(ConfigError, "Config(interface1)") def test_groups_with_master_in_config(): ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True) netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True) interface1 = MasterSlaves('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0]) od = OptionDescription('root', '', [interface1]) Config(od) assert interface1.impl_get_group_type() == groups.master def test_groups_with_master_hidden_in_config(): ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True, properties=('hidden',)) netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True, properties=('hidden',)) interface1 = MasterSlaves('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0]) od = OptionDescription('root', '', [interface1]) api = getapi(Config(od)) api.property.read_write() api.permissive.set(frozenset(['hidden'])) assert api.forcepermissive.option('ip_admin_eth0.ip_admin_eth0').value.get() == [] api.forcepermissive.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.1']) assert api.forcepermissive.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None raises(PropertiesOptionError, "api.option('ip_admin_eth0.ip_admin_eth0').value.get()") raises(PropertiesOptionError, "api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get()") def test_groups_with_master_hidden_in_config2(): ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True) netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True, properties=('hidden',)) interface1 = MasterSlaves('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0]) od = OptionDescription('root', '', [interface1]) api = getapi(Config(od)) api.property.read_write() api.permissive.set(frozenset(['hidden'])) assert api.forcepermissive.option('ip_admin_eth0.ip_admin_eth0').value.get() == [] assert api.option('ip_admin_eth0.ip_admin_eth0').value.get() == [] api.forcepermissive.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.1']) raises(PropertiesOptionError, "api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get()") api.option('ip_admin_eth0.ip_admin_eth0').value.reset() assert api.forcepermissive.option('ip_admin_eth0.ip_admin_eth0').value.get() == [] #del api.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.1']) api.property.pop('hidden') assert api.forcepermissive.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None api.forcepermissive.option('ip_admin_eth0.netmask_admin_eth0', 0).value.set('255.255.255.0') assert api.forcepermissive.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() == '255.255.255.0' api.property.add('hidden') api.option('ip_admin_eth0.ip_admin_eth0').value.reset() api.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.1']) api.property.pop('hidden') assert api.forcepermissive.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None def test_groups_with_master_hidden_in_config3(): #if master is hidden, slave are hidden too ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True, properties=('hidden',)) netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True) interface1 = MasterSlaves('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0]) od = OptionDescription('root', '', [interface1]) #interface1.impl_set_group_type(groups.master) api = getapi(Config(od)) api.property.read_write() api.permissive.set(frozenset(['hidden'])) assert api.forcepermissive.option('ip_admin_eth0.ip_admin_eth0').value.get() == [] api.forcepermissive.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.1']) assert api.forcepermissive.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None raises(PropertiesOptionError, "api.option('ip_admin_eth0.ip_admin_eth0').value.get()") raises(PropertiesOptionError, "api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get()") def test_allowed_groups(): ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True) netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True) interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0]) interface1 raises(ValueError, "interface1.impl_set_group_type('toto')") def test_values_with_master_disabled_master(): ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True) netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True) interface1 = MasterSlaves('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0]) #interface1.impl_set_group_type(groups.master) maconfig = OptionDescription('toto', '', [interface1]) api = getapi(Config(maconfig)) api.property.read_write() api.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.230.145']) api.option('ip_admin_eth0.ip_admin_eth0').value.pop(0) api.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.230.145']) api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.set("192.168.230.145") api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.reset() api.option('ip_admin_eth0.ip_admin_eth0').property.add('disabled') raises(PropertiesOptionError, "api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.set('192.168.230.145')") def test_sub_group_in_master_group(): ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True) netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True) subgroup = OptionDescription("subgroup", '', []) raises(ValueError, "MasterSlaves('ip_admin_eth0', '', [subgroup, ip_admin_eth0, netmask_admin_eth0])") def test_group_always_has_multis(): ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True) netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau") raises(ValueError, "MasterSlaves('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])") #____________________________________________________________ def test_values_with_master_and_slaves(): ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True) netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True) interface1 = MasterSlaves('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0]) #interface1.impl_set_group_type(groups.master) maconfig = OptionDescription('toto', '', [interface1]) api = getapi(Config(maconfig)) api.property.read_write() owner = api.owner.get() assert interface1.impl_get_group_type() == groups.master assert api.option('ip_admin_eth0.ip_admin_eth0').owner.isdefault() # api.option('ip_admin_eth0.ip_admin_eth0').value.set(["192.168.230.145"]) assert api.option('ip_admin_eth0.ip_admin_eth0').value.get() == ["192.168.230.145"] assert api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() is None assert api.option('ip_admin_eth0.ip_admin_eth0').owner.get() == owner assert api.option('ip_admin_eth0.netmask_admin_eth0', 0).owner.isdefault() api.option('ip_admin_eth0.ip_admin_eth0').value.set(["192.168.230.145", "192.168.230.147"]) raises(APIError, "api.option('ip_admin_eth0.netmask_admin_eth0').value.set([None])") raises(APIError, "api.option('ip_admin_eth0.netmask_admin_eth0').value.pop(0)") def test_reset_values_with_master_and_slaves(): ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True) netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True) interface1 = MasterSlaves('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0]) #interface1.impl_set_group_type(groups.master) maconfig = OptionDescription('toto', '', [interface1]) api = getapi(Config(maconfig)) api.property.read_write() owner = api.owner.get() assert interface1.impl_get_group_type() == groups.master assert api.option('ip_admin_eth0.ip_admin_eth0').owner.isdefault() api.option('ip_admin_eth0.ip_admin_eth0').value.set(["192.168.230.145"]) assert api.option('ip_admin_eth0.ip_admin_eth0').owner.get() == owner assert api.option('ip_admin_eth0.netmask_admin_eth0', 0).owner.isdefault() api.option('ip_admin_eth0.ip_admin_eth0').value.reset() assert api.option('ip_admin_eth0.ip_admin_eth0').owner.isdefault() assert api.option('ip_admin_eth0.ip_admin_eth0').value.get() == [] #reset api.option('ip_admin_eth0.ip_admin_eth0').value.set(["192.168.230.145"]) api.option('ip_admin_eth0.ip_admin_eth0').value.reset() assert api.option('ip_admin_eth0.ip_admin_eth0').owner.isdefault() assert api.option('ip_admin_eth0.ip_admin_eth0').value.get() == [] def test_reset_values_with_master_and_slaves_default_value(): ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True, default=['192.168.230.145']) netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True, default=['255.255.255.0']) raises(ValueError, "MasterSlaves('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])") def test_reset_values_with_master_and_slaves_default(): ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True, default=['192.168.230.145']) netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True) interface1 = MasterSlaves('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0]) #interface1.impl_set_group_type(groups.master) maconfig = OptionDescription('toto', '', [interface1]) api = getapi(Config(maconfig)) api.property.read_write() owner = api.owner.get() assert api.option('ip_admin_eth0.ip_admin_eth0').owner.isdefault() assert api.option('ip_admin_eth0.netmask_admin_eth0', 0).owner.isdefault() api.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.230.146']) assert api.option('ip_admin_eth0.ip_admin_eth0').owner.get() == owner assert api.option('ip_admin_eth0.netmask_admin_eth0', 0).owner.isdefault() api.option('ip_admin_eth0.ip_admin_eth0').value.reset() assert api.option('ip_admin_eth0.ip_admin_eth0').owner.isdefault() assert api.option('ip_admin_eth0.netmask_admin_eth0', 0).owner.isdefault() assert api.option('ip_admin_eth0.ip_admin_eth0').value.get() == ['192.168.230.145'] api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.set(None) api.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.230.146']) api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.set('255.255.255.0') assert api.option('ip_admin_eth0.ip_admin_eth0').owner.get() == owner assert api.option('ip_admin_eth0.netmask_admin_eth0', 0).owner.get() == owner api.option('ip_admin_eth0.ip_admin_eth0').value.reset() assert api.option('ip_admin_eth0.ip_admin_eth0').owner.isdefault() assert api.option('ip_admin_eth0.netmask_admin_eth0', 0).owner.get() == owners.default assert api.option('ip_admin_eth0.ip_admin_eth0').value.get() == ['192.168.230.145'] api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.set(None) api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.set('255.255.255.0') assert api.option('ip_admin_eth0.ip_admin_eth0').owner.isdefault() assert api.option('ip_admin_eth0.netmask_admin_eth0', 0).owner.get() == owner api.option('ip_admin_eth0.ip_admin_eth0').value.reset() assert api.option('ip_admin_eth0.ip_admin_eth0').owner.isdefault() assert api.option('ip_admin_eth0.netmask_admin_eth0', 0).owner.isdefault() assert api.option('ip_admin_eth0.ip_admin_eth0').value.get() == ['192.168.230.145'] api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.set(None) def test_values_with_master_and_slaves_slave(): ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True) netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True) interface1 = MasterSlaves('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0]) #interface1.impl_set_group_type(groups.master) maconfig = OptionDescription('toto', '', [interface1]) api = getapi(Config(maconfig)) api.property.read_write() raises(SlaveError, "api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.set('255.255.255.0')") api.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.230.145']) api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.set('255.255.255.0') api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.reset() api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.set('255.255.255.0') # api.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.230.145', '192.168.230.145']) assert api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() == '255.255.255.0' assert api.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get() is None api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.set('255.255.255.0') api.option('ip_admin_eth0.netmask_admin_eth0', 1).value.set('255.255.255.0') raises(APIError, "api.option('ip_admin_eth0.netmask_admin_eth0', 1).value.pop(1)") #reset api.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.230.145', '192.168.230.145', '192.168.230.145']) api.option('ip_admin_eth0.ip_admin_eth0').value.reset() assert api.option('ip_admin_eth0.ip_admin_eth0').value.get() == [] def test_values_with_master_and_slaves_pop(): ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True) netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True) interface1 = MasterSlaves('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0]) #interface1.impl_set_group_type(groups.master) maconfig = OptionDescription('toto', '', [interface1]) api = getapi(Config(maconfig)) api.property.read_write() api.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.230.145']) api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.set('255.255.255.0') api.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.230.145', '192.168.230.146']) api.option('ip_admin_eth0.netmask_admin_eth0', 1).value.set('255.255.0.0') assert api.option('ip_admin_eth0.ip_admin_eth0').value.get() == ['192.168.230.145', '192.168.230.146'] assert api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() == '255.255.255.0' assert api.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get() == '255.255.0.0' api.option('ip_admin_eth0.ip_admin_eth0').value.pop(0) assert api.option('ip_admin_eth0.ip_admin_eth0').value.get() == ['192.168.230.146'] assert api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() == '255.255.0.0' def test_values_with_master_and_slaves_master(): ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True) netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True) interface1 = MasterSlaves('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0]) #interface1.impl_set_group_type(groups.master) maconfig = OptionDescription('toto', '', [interface1]) api = getapi(Config(maconfig)) api.property.read_write() api.option('ip_admin_eth0.ip_admin_eth0').value.set(["192.168.230.145"]) api.option('ip_admin_eth0.ip_admin_eth0').value.set(["192.168.230.145"]) api.option('ip_admin_eth0.ip_admin_eth0').value.set(["192.168.230.145", "192.168.230.145"]) api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.set('255.255.255.0') api.option('ip_admin_eth0.netmask_admin_eth0', 1).value.set('255.255.255.0') raises(SlaveError, "api.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.230.145'])") assert api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() == '255.255.255.0' assert api.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get() == '255.255.255.0' api.option('ip_admin_eth0.ip_admin_eth0').value.pop(1) assert api.option('ip_admin_eth0.ip_admin_eth0').value.get() == ["192.168.230.145"] assert api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() == '255.255.255.0' api.option('ip_admin_eth0.ip_admin_eth0').value.reset() assert api.option('ip_admin_eth0.ip_admin_eth0').value.get() == [] def test_values_with_master_and_slaves_master_pop(): ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True) netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True) interface1 = MasterSlaves('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0]) maconfig = OptionDescription('toto', '', [interface1]) api = getapi(Config(maconfig)) api.property.read_write() api.option('ip_admin_eth0.ip_admin_eth0').value.set(["192.168.230.145", "192.168.230.146"]) api.option('ip_admin_eth0.netmask_admin_eth0', 1).value.set('255.255.0.0') assert api.option('ip_admin_eth0.ip_admin_eth0').value.get() == ["192.168.230.145", "192.168.230.146"] assert api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() == None assert api.option('ip_admin_eth0.netmask_admin_eth0', 1).value.get() == '255.255.0.0' assert api.value.get_modified() == {'ip_admin_eth0.ip_admin_eth0': ( 'user', ('192.168.230.145', '192.168.230.146')), 'ip_admin_eth0.netmask_admin_eth0': ( {'1': 'user'}, {'1': '255.255.0.0'})} api.option('ip_admin_eth0.ip_admin_eth0').value.pop(0) assert api.value.get_modified() == {'ip_admin_eth0.ip_admin_eth0': ( 'user', ('192.168.230.146',)), 'ip_admin_eth0.netmask_admin_eth0': ( {'0': 'user'}, {'0': '255.255.0.0'})} assert api.option('ip_admin_eth0.ip_admin_eth0').value.get() == ["192.168.230.146"] assert api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.get() == '255.255.0.0' api.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.230.146', "192.168.230.145", "192.168.230.146", "192.168.230.147", "192.168.230.148", "192.168.230.149"]) api.option('ip_admin_eth0.netmask_admin_eth0', 3).value.set('255.255.0.0') api.option('ip_admin_eth0.netmask_admin_eth0', 4).value.set('255.255.0.0') assert api.value.get_modified() == {'ip_admin_eth0.ip_admin_eth0': ( 'user', ('192.168.230.146', "192.168.230.145", "192.168.230.146", "192.168.230.147", "192.168.230.148", "192.168.230.149")), 'ip_admin_eth0.netmask_admin_eth0': ( {'0': 'user', '3': 'user', '4': 'user'}, {'0': '255.255.0.0', '3': '255.255.0.0', '4': '255.255.0.0'})} api.option('ip_admin_eth0.ip_admin_eth0').value.pop(5) assert api.value.get_modified() == {'ip_admin_eth0.ip_admin_eth0': ( 'user', ('192.168.230.146', "192.168.230.145", "192.168.230.146", "192.168.230.147", "192.168.230.148")), 'ip_admin_eth0.netmask_admin_eth0': ( {'0': 'user', '3': 'user', '4': 'user'}, {'0': '255.255.0.0', '3': '255.255.0.0', '4': '255.255.0.0'})} api.option('ip_admin_eth0.ip_admin_eth0').value.pop(2) assert api.value.get_modified() == {'ip_admin_eth0.ip_admin_eth0': ( 'user', ('192.168.230.146', "192.168.230.145", "192.168.230.147", "192.168.230.148")), 'ip_admin_eth0.netmask_admin_eth0': ( {'0': 'user', '2': 'user', '3': 'user'}, {'0': '255.255.0.0', '2': '255.255.0.0', '3': '255.255.0.0'})} api.option('ip_admin_eth0.ip_admin_eth0').value.pop(2) assert api.value.get_modified() == {'ip_admin_eth0.ip_admin_eth0': ('user', ('192.168.230.146', "192.168.230.145", "192.168.230.148")), 'ip_admin_eth0.netmask_admin_eth0': ({'0': 'user', '2': 'user'}, {'0': '255.255.0.0', '2': '255.255.0.0'})} api.option('ip_admin_eth0.ip_admin_eth0').value.pop(2) assert api.value.get_modified() == {'ip_admin_eth0.ip_admin_eth0': ('user', ('192.168.230.146', "192.168.230.145")), 'ip_admin_eth0.netmask_admin_eth0': ({'0': 'user'}, {'0': '255.255.0.0'})} def test_values_with_master_owner(): ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True) netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True) interface1 = MasterSlaves('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0]) #interface1.impl_set_group_type(groups.master) maconfig = OptionDescription('toto', '', [interface1]) api = getapi(Config(maconfig)) api.property.read_write() owner = api.owner.get() assert api.option('ip_admin_eth0.ip_admin_eth0').owner.isdefault() api.option('ip_admin_eth0.ip_admin_eth0').value.set(["192.168.230.145"]) assert api.option('ip_admin_eth0.ip_admin_eth0').owner.get() == owner assert api.option('ip_admin_eth0.netmask_admin_eth0', 0).owner.isdefault() api.option('ip_admin_eth0.ip_admin_eth0').value.pop(0) assert api.option('ip_admin_eth0.ip_admin_eth0').owner.get() == owner def test_values_with_master_disabled(): ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True) netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True) interface1 = MasterSlaves('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0]) #interface1.impl_set_group_type(groups.master) maconfig = OptionDescription('toto', '', [interface1]) api = getapi(Config(maconfig)) api.property.read_write() api.option('ip_admin_eth0.ip_admin_eth0').value.set(["192.168.230.145"]) api.option('ip_admin_eth0.ip_admin_eth0').value.pop(0) api.option('ip_admin_eth0.ip_admin_eth0').value.set(["192.168.230.145"]) api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.set("192.168.230.145") api.option('ip_admin_eth0.ip_admin_eth0').value.pop(0) api.option('ip_admin_eth0.netmask_admin_eth0').property.add('disabled') api.option('ip_admin_eth0.ip_admin_eth0').value.set(["192.168.230.145"]) api.option('ip_admin_eth0.ip_admin_eth0').value.pop(0) #delete with value in disabled var api.option('ip_admin_eth0.netmask_admin_eth0').property.pop('disabled') api.option('ip_admin_eth0.ip_admin_eth0').value.set(["192.168.230.145"]) api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.set("192.168.230.145") api.option('ip_admin_eth0.netmask_admin_eth0').property.add('disabled') api.option('ip_admin_eth0.ip_admin_eth0').value.pop(0) #append with value in disabled var api.option('ip_admin_eth0.netmask_admin_eth0').property.pop('disabled') api.option('ip_admin_eth0.ip_admin_eth0').value.set(["192.168.230.145"]) api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.set("192.168.230.145") api.option('ip_admin_eth0.netmask_admin_eth0').property.add('disabled') api.option('ip_admin_eth0.ip_admin_eth0').value.set(["192.168.230.145", '192.168.230.43']) def test_multi_non_valid_value(): ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True) maconfig = OptionDescription('toto', '', [ip_admin_eth0]) api = getapi(Config(maconfig)) api.property.read_write() api.option('ip_admin_eth0').value.set(['a']) raises(ValueError, "api.option('ip_admin_eth0').value.set([1])") def test_multi_master_default_slave(): ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True) netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", default_multi="255.255.255.0", multi=True) interface1 = MasterSlaves('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0]) #interface1.impl_set_group_type(groups.master) maconfig = OptionDescription('toto', '', [interface1]) api = getapi(Config(maconfig)) api.property.read_write() api.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.1']) assert api.option('ip_admin_eth0.ip_admin_eth0').value.get() == ['192.168.1.1'] def test_groups_with_master_get_modified_value(): ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True) netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True) interface1 = MasterSlaves('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0]) #interface1.impl_set_group_type(groups.master) maconfig = OptionDescription('toto', '', [interface1]) api = getapi(Config(maconfig)) api.property.read_write() assert api.value.get_modified() == {} api.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.1']) assert api.value.get_modified() == {'ip_admin_eth0.ip_admin_eth0': ('user', ('192.168.1.1',))} api.option('ip_admin_eth0.netmask_admin_eth0', 0).value.set('255.255.255.255') assert api.value.get_modified() == {'ip_admin_eth0.ip_admin_eth0': ('user', ('192.168.1.1',)), 'ip_admin_eth0.netmask_admin_eth0': ({'0': 'user'}, {'0': '255.255.255.255'})} api.option('ip_admin_eth0.ip_admin_eth0').value.set(['192.168.1.1', '192.168.1.1']) api.option('ip_admin_eth0.netmask_admin_eth0', 1).value.set('255.255.255.255') assert api.value.get_modified() == {'ip_admin_eth0.ip_admin_eth0': ('user', ('192.168.1.1', '192.168.1.1')), 'ip_admin_eth0.netmask_admin_eth0': ({'0': 'user', '1': 'user'}, {'0': '255.255.255.255', '1': '255.255.255.255'})}