don't display warning in mandatory_warnings
[tiramisu.git] / test / test_mandatory.py
1 # coding: utf-8
2 from autopath import do_autopath
3 do_autopath()
4
5 from py.test import raises
6 from tiramisu.config import Config
7 from tiramisu.option import IntOption, StrOption, UnicodeOption, OptionDescription, SymLinkOption
8 from tiramisu.error import PropertiesOptionError, ConfigError
9 from tiramisu.setting import groups
10 from tiramisu.storage import delete_session
11
12
13 def make_description():
14     stroption = StrOption('str', 'Test string option', default="abc",
15                           properties=('mandatory', ))
16     stroption1 = StrOption('str1', 'Test string option',
17                            properties=('mandatory', ))
18     stroption2 = UnicodeOption('unicode2', 'Test string option',
19                                properties=('mandatory', ))
20     stroption3 = StrOption('str3', 'Test string option', multi=True,
21                            properties=('mandatory', ))
22     stroption4 = StrOption('str4', 'Test string option', multi=True,
23                            properties=('mandatory', ), allow_empty_list=True)
24     descr = OptionDescription('tiram', '', [stroption, stroption1, stroption2, stroption3, stroption4])
25     return descr
26
27
28 def return_value(value):
29     return value
30
31
32 def make_description2():
33     stroption = StrOption('str', 'Test string option', default="abc",
34                           properties=('mandatory', ))
35     stroption1 = StrOption('str1', 'Test string option',
36                            properties=('mandatory', ))
37     stroption2 = SymLinkOption('unicode2', stroption1)
38     stroption3 = StrOption('str3', 'Test string option', multi=True,
39                            properties=('mandatory', ))
40     unicode1 = UnicodeOption('unicode1', 'Test string option', callback=return_value, callback_params={'': ((stroption, False),)},  properties=('mandatory', ))
41     descr = OptionDescription('tiram', '', [stroption, stroption1, stroption2, stroption3, unicode1])
42     return descr
43
44
45 def make_description_sym():
46     stroption = StrOption('str', 'Test string option', default="abc",
47                           properties=('mandatory', ))
48     stroption1 = StrOption('str1', 'Test string option',
49                            properties=('mandatory', ))
50     stroption2 = SymLinkOption('unicode2', stroption1)
51     stroption3 = StrOption('str3', 'Test string option', multi=True,
52                            properties=('mandatory', ))
53     descr = OptionDescription('tiram', '', [stroption, stroption1, stroption2, stroption3])
54     return descr
55
56
57 def make_description3():
58     stroption = StrOption('str', 'Test string option', default="abc",
59                           properties=('mandatory', ))
60     stroption1 = StrOption('str1', 'Test string option',
61                            properties=('mandatory', ))
62     stroption2 = SymLinkOption('unicode2', stroption1)
63     stroption3 = StrOption('str3', 'Test string option', multi=True,
64                            properties=('mandatory', ))
65     unicode1 = UnicodeOption('unicode1', 'Test string option', callback=return_value, callback_params={'': ((stroption, False),)},  properties=('mandatory', ))
66     int1 = IntOption('int1', '', callback=return_value, callback_params={'': ((stroption, False),)},  properties=('mandatory', ))
67     descr = OptionDescription('tiram', '', [stroption, stroption1, stroption2, stroption3, unicode1, int1])
68     return descr
69
70
71 def make_description4():
72     stroption = StrOption('str', 'Test string option', default="abc",
73                           properties=('mandatory', ))
74     stroption1 = StrOption('str1', 'Test string option',
75                            properties=('mandatory', ))
76     stroption2 = UnicodeOption('unicode2', 'Test string option',
77                                properties=('mandatory', ))
78     stroption3 = StrOption('str3', 'Test string option', multi=True, requires=[{'option': stroption, 'expected': 'yes', 'action': 'mandatory', 'transitive': False}])
79     descr = OptionDescription('tiram', '', [stroption, stroption1, stroption2, stroption3])
80     return descr
81
82
83 def test_mandatory_ro():
84     descr = make_description()
85     config = Config(descr, session_id='man001')
86     config.read_only()
87     prop = []
88     try:
89         config.str1
90     except PropertiesOptionError as err:
91         prop = err.proptype
92     assert 'mandatory' in prop
93     config.read_write()
94     config.str1 = 'yes'
95     config.read_only()
96     assert config.str1 == 'yes'
97     try:
98         delete_session('config', config.impl_getsessionid())
99     except ValueError:
100         pass
101     del(config)
102
103
104 def test_mandatory_rw():
105     descr = make_description()
106     config = Config(descr, session_id='man002')
107     config.read_write()
108     #not mandatory in rw
109     config.str1
110     config.str1 = 'yes'
111     assert config.str1 == 'yes'
112     try:
113         delete_session('config', config.impl_getsessionid())
114     except ValueError:
115         pass
116     del(config)
117
118
119 def test_mandatory_default():
120     descr = make_description()
121     config = Config(descr, session_id='man003')
122     config.read_only()
123     #not mandatory in rw
124     config.str
125     config.read_write()
126     config.str = 'yes'
127     config.read_only()
128     config.str
129     config.read_write()
130     config.str = None
131     config.read_only()
132     prop = []
133     try:
134         config.str
135     except PropertiesOptionError as err:
136         prop = err.proptype
137     assert 'mandatory' in prop
138     try:
139         delete_session('config', config.impl_getsessionid())
140     except ValueError:
141         pass
142     del(config)
143
144
145 def test_mandatory_delete():
146     descr = make_description()
147     config = Config(descr, session_id='man004')
148     config.read_only()
149     config.str
150     try:
151         config.str1
152     except PropertiesOptionError as err:
153         prop = err.proptype
154     assert 'mandatory' in prop
155     config.read_write()
156     config.str1 = 'yes'
157     config.read_only()
158     assert config.str1 == 'yes'
159     config.cfgimpl_get_settings().remove('frozen')
160     prop = []
161     try:
162         del(config.str1)
163     except PropertiesOptionError as err:
164         prop = err.proptype
165     assert 'mandatory' in prop
166     del(config.str)
167     assert config.str1 == 'yes'
168     try:
169         delete_session('config', config.impl_getsessionid())
170     except ValueError:
171         pass
172     del(config)
173
174
175 #valeur vide : None, '', u'', ...
176 def test_mandatory_none():
177     descr = make_description()
178     config = Config(descr, session_id='man005')
179     config.str1 = None
180     assert config.getowner(config.unwrap_from_path('str1')) == 'user'
181     config.read_only()
182     prop = []
183     try:
184         config.str1
185     except PropertiesOptionError as err:
186         prop = err.proptype
187     assert 'mandatory' in prop
188     try:
189         delete_session('config', config.impl_getsessionid())
190     except ValueError:
191         pass
192     del(config)
193
194
195 def test_mandatory_empty():
196     descr = make_description()
197     config = Config(descr, session_id='man006')
198     config.str1 = ''
199     assert config.getowner(config.unwrap_from_path('str1')) == 'user'
200     config.read_only()
201     prop = []
202     try:
203         config.str1
204     except PropertiesOptionError as err:
205         prop = err.proptype
206     assert 'mandatory' in prop
207     try:
208         delete_session('config', config.impl_getsessionid())
209     except ValueError:
210         pass
211     del(config)
212
213
214 def test_mandatory_multi_none():
215     descr = make_description()
216     config = Config(descr, session_id='man007')
217     config.str3 = [None]
218     assert config.getowner(config.unwrap_from_path('str3')) == 'user'
219     config.read_only()
220     prop = []
221     try:
222         config.str3
223     except PropertiesOptionError as err:
224         prop = err.proptype
225     assert 'mandatory' in prop
226     config.read_write()
227     config.str3 = ['yes', None]
228     assert config.getowner(config.unwrap_from_path('str3')) == 'user'
229     config.read_only()
230     prop = []
231     try:
232         config.str3
233     except PropertiesOptionError as err:
234         prop = err.proptype
235     assert 'mandatory' in prop
236     try:
237         delete_session('config', config.impl_getsessionid())
238     except ValueError:
239         pass
240     del(config)
241
242
243 def test_mandatory_multi_empty():
244     descr = make_description()
245     config = Config(descr, session_id='man008')
246     config.str3 = []
247     assert config.getowner(config.unwrap_from_path('str3')) == 'user'
248     config.read_only()
249     prop = []
250     try:
251         config.str3
252     except PropertiesOptionError as err:
253         prop = err.proptype
254     assert 'mandatory' in prop
255     #
256     config.read_write()
257     config.str3 = ['']
258     assert config.getowner(config.unwrap_from_path('str3')) == 'user'
259     config.read_only()
260     prop = []
261     try:
262         config.str3
263     except PropertiesOptionError as err:
264         prop = err.proptype
265     assert 'mandatory' in prop
266     #
267     config.read_write()
268     config.str3 = ['yes', '']
269     assert config.getowner(config.unwrap_from_path('str3')) == 'user'
270     config.read_only()
271     prop = []
272     try:
273         config.str3
274     except PropertiesOptionError as err:
275         prop = err.proptype
276     assert 'mandatory' in prop
277     try:
278         delete_session('config', config.impl_getsessionid())
279     except ValueError:
280         pass
281     del(config)
282
283
284 def test_mandatory_multi_empty_allow_empty_list():
285     descr = make_description()
286     config = Config(descr, session_id='man009')
287     config.str4 = []
288     assert config.getowner(config.unwrap_from_path('str4')) == 'user'
289     config.read_only()
290     prop = []
291     config.str4
292     #
293     config.read_write()
294     config.str4 = ['']
295     assert config.getowner(config.unwrap_from_path('str4')) == 'user'
296     config.read_only()
297     prop = []
298     try:
299         config.str4
300     except PropertiesOptionError as err:
301         prop = err.proptype
302     assert 'mandatory' in prop
303     #
304     config.read_write()
305     config.str4 = ['yes', '']
306     assert config.getowner(config.unwrap_from_path('str4')) == 'user'
307     config.read_only()
308     prop = []
309     try:
310         config.str4
311     except PropertiesOptionError as err:
312         prop = err.proptype
313     assert 'mandatory' in prop
314     try:
315         delete_session('config', config.impl_getsessionid())
316     except ValueError:
317         pass
318     del(config)
319
320
321 def test_mandatory_multi_append():
322     descr = make_description()
323     config = Config(descr, session_id='man010')
324     config.str3 = ['yes']
325     config.read_write()
326     config.str3.append(None)
327     try:
328         delete_session('config', config.impl_getsessionid())
329     except ValueError:
330         pass
331     del(config)
332
333
334 def test_mandatory_disabled():
335     descr = make_description()
336     config = Config(descr, session_id='man011')
337     setting = config.cfgimpl_get_settings()
338     config.str1
339     config.read_only()
340     prop = []
341     try:
342         config.str1
343     except PropertiesOptionError as err:
344         prop = err.proptype
345     assert prop == ['mandatory']
346     setting[descr.str1].append('disabled')
347     prop = []
348     try:
349         config.str1
350     except PropertiesOptionError as err:
351         prop = err.proptype
352     assert set(prop) == set(['disabled', 'mandatory'])
353     try:
354         delete_session('config', config.impl_getsessionid())
355     except ValueError:
356         pass
357     del(config)
358
359
360 def test_mandatory_unicode():
361     descr = make_description()
362     config = Config(descr, session_id='man012')
363     config.unicode2
364     config.read_only()
365     prop = []
366     try:
367         config.unicode2
368     except PropertiesOptionError as err:
369         prop = err.proptype
370     assert prop == ['mandatory']
371     config.read_write()
372     config.unicode2 = u''
373     config.read_only()
374     prop = []
375     try:
376         config.unicode2
377     except PropertiesOptionError as err:
378         prop = err.proptype
379     assert prop == ['mandatory']
380     try:
381         delete_session('config', config.impl_getsessionid())
382     except ValueError:
383         pass
384     del(config)
385
386
387 def test_mandatory_warnings_ro():
388     descr = make_description()
389     config = Config(descr, session_id='man013')
390     config.str = ''
391     config.read_only()
392     proc = []
393     try:
394         config.str
395     except PropertiesOptionError as err:
396         proc = err.proptype
397     assert proc == ['mandatory']
398     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str', 'str1', 'unicode2', 'str3']
399     config.read_write()
400     config.str = 'a'
401     config.read_only()
402     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str1', 'unicode2', 'str3']
403     try:
404         delete_session('config', config.impl_getsessionid())
405     except ValueError:
406         pass
407     del(config)
408
409
410 def test_mandatory_warnings_rw():
411     descr = make_description()
412     config = Config(descr, session_id='man100')
413     config.str = ''
414     config.read_write()
415     config.str
416     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str', 'str1', 'unicode2', 'str3']
417     config.str = 'a'
418     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str1', 'unicode2', 'str3']
419     try:
420         delete_session('config', 'man100')
421     except ValueError:
422         pass
423     del(config)
424
425
426 def test_mandatory_warnings_disabled():
427     descr = make_description()
428     config = Config(descr, session_id='man101')
429     config.str = ''
430     setting = config.cfgimpl_get_settings()
431     config.read_write()
432     config.str
433     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str', 'str1', 'unicode2', 'str3']
434     setting[descr.str].append('disabled')
435     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str1', 'unicode2', 'str3']
436     try:
437         delete_session('config', 'man101')
438     except ValueError:
439         pass
440     del(config)
441
442
443 def test_mandatory_warnings_hidden():
444     descr = make_description()
445     config = Config(descr, session_id='man102')
446     config.str = ''
447     setting = config.cfgimpl_get_settings()
448     config.read_write()
449     config.cfgimpl_get_settings().setpermissive(('hidden',))
450     config.str
451     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str', 'str1', 'unicode2', 'str3']
452     setting[descr.str].append('hidden')
453     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str', 'str1', 'unicode2', 'str3']
454     try:
455         delete_session('config', 'man102')
456     except ValueError:
457         pass
458     del(config)
459
460
461 def test_mandatory_warnings_frozen():
462     descr = make_description()
463     config = Config(descr, session_id='man103')
464     config.str = ''
465     setting = config.cfgimpl_get_settings()
466     config.read_write()
467     config.str
468     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str', 'str1', 'unicode2', 'str3']
469     setting[descr.str].append('frozen')
470     config.read_only()
471     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str', 'str1', 'unicode2', 'str3']
472     try:
473         delete_session('config', 'man103')
474     except ValueError:
475         pass
476     del(config)
477
478
479 def test_mandatory_master():
480     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True,
481                               properties=('mandatory', ))
482     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau",
483                                    multi=True)
484     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
485     interface1.impl_set_group_type(groups.master)
486     o = OptionDescription('o', '', [interface1])
487     config = Config(o, session_id='man104')
488     config.read_only()
489     raises(PropertiesOptionError, 'config.ip_admin_eth0.ip_admin_eth0')
490     raises(PropertiesOptionError, 'config.ip_admin_eth0.netmask_admin_eth0')
491     try:
492         delete_session('config', 'man104')
493     except ValueError:
494         pass
495     del(config)
496
497
498 def test_mandatory_warnings_master():
499     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True,
500                               properties=('mandatory', ))
501     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau",
502                                    multi=True)
503     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
504     interface1.impl_set_group_type(groups.master)
505     o = OptionDescription('o', '', [interface1])
506     config = Config(o, session_id='man105')
507     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['ip_admin_eth0.ip_admin_eth0']
508     try:
509         delete_session('config', 'man105')
510     except ValueError:
511         pass
512     del(config)
513
514
515 def test_mandatory_master_empty():
516     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
517     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau",
518                                    multi=True)
519     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
520     interface1.impl_set_group_type(groups.master)
521     o = OptionDescription('o', '', [interface1])
522     config = Config(o, session_id='man106')
523     config.read_write()
524     assert config.ip_admin_eth0.ip_admin_eth0 == []
525     assert config.ip_admin_eth0.netmask_admin_eth0 == []
526     #
527     config.ip_admin_eth0.ip_admin_eth0.append()
528     assert config.ip_admin_eth0.ip_admin_eth0 == [None]
529     assert config.ip_admin_eth0.netmask_admin_eth0 == [None]
530     config.read_only()
531     raises(PropertiesOptionError, "config.ip_admin_eth0.ip_admin_eth0")
532     raises(PropertiesOptionError, "config.ip_admin_eth0.netmask_admin_eth0")
533     config.read_write()
534     del(config.ip_admin_eth0.ip_admin_eth0)
535     del(config.ip_admin_eth0.netmask_admin_eth0)
536     assert config.ip_admin_eth0.ip_admin_eth0 == []
537     assert config.ip_admin_eth0.netmask_admin_eth0 == []
538     #
539     config.ip_admin_eth0.ip_admin_eth0.append('')
540     assert config.ip_admin_eth0.ip_admin_eth0 == ['']
541     assert config.ip_admin_eth0.netmask_admin_eth0 == [None]
542     config.read_only()
543     raises(PropertiesOptionError, "config.ip_admin_eth0.ip_admin_eth0")
544     raises(PropertiesOptionError, "config.ip_admin_eth0.netmask_admin_eth0")
545     config.read_write()
546     #
547     config.read_write()
548     config.ip_admin_eth0.ip_admin_eth0 = ['ip']
549     config.read_only()
550     assert config.ip_admin_eth0.ip_admin_eth0 == ['ip']
551     assert config.ip_admin_eth0.netmask_admin_eth0 == [None]
552     try:
553         delete_session('config', 'man106')
554     except ValueError:
555         pass
556     del(config)
557
558
559 def test_mandatory_warnings_master_empty():
560     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
561     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau",
562                                    multi=True)
563     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
564     interface1.impl_set_group_type(groups.master)
565     o = OptionDescription('o', '', [interface1])
566     config = Config(o, session_id='man107')
567     config.read_write()
568     config.ip_admin_eth0.ip_admin_eth0.append()
569     assert config.ip_admin_eth0.ip_admin_eth0 == [None]
570     assert config.ip_admin_eth0.netmask_admin_eth0 == [None]
571     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['ip_admin_eth0.ip_admin_eth0']
572     del(config.ip_admin_eth0.ip_admin_eth0)
573     del(config.ip_admin_eth0.netmask_admin_eth0)
574     #
575     config.ip_admin_eth0.ip_admin_eth0.append('')
576     assert config.ip_admin_eth0.ip_admin_eth0 == ['']
577     assert config.ip_admin_eth0.netmask_admin_eth0 == [None]
578     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['ip_admin_eth0.ip_admin_eth0']
579     #
580     config.read_write()
581     config.ip_admin_eth0.ip_admin_eth0 = ['ip']
582     assert list(config.cfgimpl_get_values().mandatory_warnings()) == []
583     try:
584         delete_session('config', 'man107')
585     except ValueError:
586         pass
587     del(config)
588
589
590 def test_mandatory_slave():
591     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
592     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau",
593                                    multi=True, properties=('mandatory', ))
594     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
595     interface1.impl_set_group_type(groups.master)
596     o = OptionDescription('o', '', [interface1])
597     config = Config(o, session_id='man108')
598     config.read_only()
599     assert config.ip_admin_eth0.ip_admin_eth0 == []
600     assert config.ip_admin_eth0.netmask_admin_eth0 == []
601     #
602     config.read_write()
603     config.ip_admin_eth0.ip_admin_eth0.append('ip')
604     config.read_only()
605     assert config.ip_admin_eth0.ip_admin_eth0 == ['ip']
606     raises(PropertiesOptionError, 'config.ip_admin_eth0.netmask_admin_eth0')
607     #
608     config.read_write()
609     config.ip_admin_eth0.netmask_admin_eth0 = ['']
610     config.read_only()
611     assert config.ip_admin_eth0.ip_admin_eth0 == ['ip']
612     raises(PropertiesOptionError, 'config.ip_admin_eth0.netmask_admin_eth0')
613     #
614     config.read_write()
615     config.ip_admin_eth0.netmask_admin_eth0 = ['ip']
616     config.read_only()
617     assert config.ip_admin_eth0.ip_admin_eth0 == ['ip']
618     assert config.ip_admin_eth0.netmask_admin_eth0 == ['ip']
619     try:
620         delete_session('config', 'man108')
621     except ValueError:
622         pass
623     del(config)
624
625
626 def test_mandatory_warnings_slave():
627     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
628     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau",
629                                    multi=True, properties=('mandatory', ))
630     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
631     interface1.impl_set_group_type(groups.master)
632     o = OptionDescription('o', '', [interface1])
633     config = Config(o, session_id='man109')
634     config.read_only()
635     assert config.ip_admin_eth0.ip_admin_eth0 == []
636     assert config.ip_admin_eth0.netmask_admin_eth0 == []
637     #
638     config.read_write()
639     assert list(config.cfgimpl_get_values().mandatory_warnings()) == []
640     config.ip_admin_eth0.ip_admin_eth0.append('ip')
641     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['ip_admin_eth0.netmask_admin_eth0']
642     try:
643         delete_session('config', 'man109')
644     except ValueError:
645         pass
646     del(config)
647
648
649 def test_mandatory_warnings_symlink():
650     descr = make_description_sym()
651     config = Config(descr, session_id='man110')
652     config.str = ''
653     setting = config.cfgimpl_get_settings()
654     config.read_write()
655     config.str
656     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str', 'str1', 'str3']
657     setting[descr.str].append('frozen')
658     config.read_only()
659     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str', 'str1', 'str3']
660     try:
661         delete_session('config', 'man110')
662     except ValueError:
663         pass
664     del(config)
665
666
667 def test_mandatory_warnings_validate():
668     descr = make_description3()
669     config = Config(descr, session_id='man111')
670     config.str = ''
671     raises(ValueError, "list(config.cfgimpl_get_values().mandatory_warnings())")
672     config.str = 'test'
673     raises(ValueError, "list(config.cfgimpl_get_values().mandatory_warnings())")
674     try:
675         delete_session('config', 'man111')
676     except ValueError:
677         pass
678     del(config)
679
680
681 def test_mandatory_warnings_validate_empty():
682     descr = make_description2()
683     config = Config(descr, session_id='man112')
684     config.str = ''
685     config.read_only()
686     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str', 'str1', 'str3', 'unicode1']
687     try:
688         delete_session('config', 'man112')
689     except ValueError:
690         pass
691     del(config)
692
693
694 def test_mandatory_warnings_requires():
695     descr = make_description4()
696     config = Config(descr, session_id='man113')
697     config.str = ''
698     config.read_write()
699     config.str
700     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str', 'str1', 'unicode2']
701     config.read_only()
702     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str', 'str1', 'unicode2']
703     config.read_write()
704     config.str = 'yes'
705     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['str1', 'unicode2', 'str3']
706     try:
707         delete_session('config', 'man113')
708     except ValueError:
709         pass
710     del(config)
711
712
713 def test_mandatory_od_disabled():
714     descr = make_description()
715     od = OptionDescription('od', '', [descr])
716     config = Config(od, session_id='man114')
717     config.read_only()
718     assert list(config.cfgimpl_get_values().mandatory_warnings()) == ['tiram.str1', 'tiram.unicode2', 'tiram.str3']
719     config.cfgimpl_get_settings()[descr].append('disabled')
720     assert list(config.cfgimpl_get_values().mandatory_warnings()) == []
721     try:
722         delete_session('config', 'man114')
723     except ValueError:
724         pass
725     del(config)