2
2
Unit test for NodeSet with Group support
3
3
"""
4
4
5
- import copy
6
- import shutil
5
+ import os
7
6
import sys
8
7
from textwrap import dedent
9
8
import unittest
@@ -749,7 +748,7 @@ def testConfigGroupsDirExists(self):
749
748
finally :
750
749
f2 .close ()
751
750
f .close ()
752
- shutil . rmtree (dname , ignore_errors = True )
751
+ os . rmdir (dname )
753
752
754
753
def testConfigGroupsMultipleDirs (self ):
755
754
"""test groups with multiple confdir defined"""
@@ -797,8 +796,8 @@ def testConfigGroupsMultipleDirs(self):
797
796
fs2 .close ()
798
797
fs1 .close ()
799
798
f .close ()
800
- shutil . rmtree (dname2 , ignore_errors = True )
801
- shutil . rmtree (dname1 , ignore_errors = True )
799
+ os . rmdir (dname2 )
800
+ os . rmdir (dname1 )
802
801
803
802
def testConfigGroupsDirDupConfig (self ):
804
803
"""test groups with duplicate in groupsdir"""
@@ -836,7 +835,7 @@ def testConfigGroupsDirDupConfig(self):
836
835
f3 .close ()
837
836
f2 .close ()
838
837
f .close ()
839
- shutil . rmtree (dname , ignore_errors = True )
838
+ os . rmdir (dname )
840
839
841
840
def testConfigGroupsDirExistsNoOther (self ):
842
841
"""test groups with groupsdir defined (real, no other)"""
@@ -864,8 +863,8 @@ def testConfigGroupsDirExistsNoOther(self):
864
863
finally :
865
864
f2 .close ()
866
865
f .close ()
867
- shutil . rmtree (dname1 , ignore_errors = True )
868
- shutil . rmtree (dname2 , ignore_errors = True )
866
+ os . rmdir (dname1 )
867
+ os . rmdir (dname2 )
869
868
870
869
def testConfigGroupsDirNotADirectory (self ):
871
870
"""test groups with groupsdir defined (not a directory)"""
@@ -883,7 +882,7 @@ def testConfigGroupsDirNotADirectory(self):
883
882
finally :
884
883
fdummy .close ()
885
884
f .close ()
886
- shutil . rmtree (dname , ignore_errors = True )
885
+ os . rmdir (dname )
887
886
888
887
def testConfigIllegalChars (self ):
889
888
"""test groups with illegal characters"""
@@ -1453,48 +1452,52 @@ def test_yaml_basic(self):
1453
1452
foo: example[1-4,91-100],example90
1454
1453
bar: example[5-89]
1455
1454
""" ).encode ('ascii' ), suffix = ".yaml" , dir = dname )
1455
+ try :
1456
+ res = GroupResolverConfig (f .name )
1456
1457
1457
- res = GroupResolverConfig (f .name )
1458
-
1459
- # Group resolution
1460
- nodeset = NodeSet ("@foo" , resolver = res )
1461
- self .assertEqual (str (nodeset ), "example[1-4,90-100]" )
1462
- nodeset = NodeSet ("@bar" , resolver = res )
1463
- self .assertEqual (str (nodeset ), "example[5-89]" )
1464
- nodeset = NodeSet ("@foo,@bar" , resolver = res )
1465
- self .assertEqual (str (nodeset ), "example[1-100]" )
1466
- nodeset = NodeSet ("@unknown" , resolver = res )
1467
- self .assertEqual (len (nodeset ), 0 )
1468
-
1469
- # Regroup
1470
- nodeset = NodeSet ("example[1-4,90-100]" , resolver = res )
1471
- self .assertEqual (str (nodeset ), "example[1-4,90-100]" )
1472
- self .assertEqual (nodeset .regroup (), "@foo" )
1473
- self .assertEqual (list (nodeset .groups ().keys ()), ["@foo" ])
1474
- self .assertEqual (str (NodeSet ("@foo" , resolver = res )), "example[1-4,90-100]" )
1475
-
1476
- # No 'all' defined: all_nodes() should raise an error
1477
- self .assertRaises (GroupSourceError , res .all_nodes )
1478
- # but then NodeSet falls back to the union of all groups
1479
- nodeset = NodeSet .fromall (resolver = res )
1480
- self .assertEqual (str (nodeset ), "example[1-100]" )
1481
- # regroup doesn't use @all in that case
1482
- self .assertEqual (nodeset .regroup (), "@bar,@foo" )
1458
+ # Group resolution
1459
+ nodeset = NodeSet ("@foo" , resolver = res )
1460
+ self .assertEqual (str (nodeset ), "example[1-4,90-100]" )
1461
+ nodeset = NodeSet ("@bar" , resolver = res )
1462
+ self .assertEqual (str (nodeset ), "example[5-89]" )
1463
+ nodeset = NodeSet ("@foo,@bar" , resolver = res )
1464
+ self .assertEqual (str (nodeset ), "example[1-100]" )
1465
+ nodeset = NodeSet ("@unknown" , resolver = res )
1466
+ self .assertEqual (len (nodeset ), 0 )
1467
+
1468
+ # Regroup
1469
+ nodeset = NodeSet ("example[1-4,90-100]" , resolver = res )
1470
+ self .assertEqual (str (nodeset ), "example[1-4,90-100]" )
1471
+ self .assertEqual (nodeset .regroup (), "@foo" )
1472
+ self .assertEqual (list (nodeset .groups ().keys ()), ["@foo" ])
1473
+ self .assertEqual (str (NodeSet ("@foo" , resolver = res )),
1474
+ "example[1-4,90-100]" )
1475
+
1476
+ # No 'all' defined: all_nodes() should raise an error
1477
+ self .assertRaises (GroupSourceError , res .all_nodes )
1478
+ # but then NodeSet falls back to the union of all groups
1479
+ nodeset = NodeSet .fromall (resolver = res )
1480
+ self .assertEqual (str (nodeset ), "example[1-100]" )
1481
+ # regroup doesn't use @all in that case
1482
+ self .assertEqual (nodeset .regroup (), "@bar,@foo" )
1483
1483
1484
- # No 'reverse' defined: node_groups() should raise an error
1485
- self .assertRaises (GroupSourceError , res .node_groups , "example1" )
1484
+ # No 'reverse' defined: node_groups() should raise an error
1485
+ self .assertRaises (GroupSourceError , res .node_groups , "example1" )
1486
1486
1487
- # regroup with rest
1488
- nodeset = NodeSet ("example[1-101]" , resolver = res )
1489
- self .assertEqual (nodeset .regroup (), "@bar,@foo,example101" )
1487
+ # regroup with rest
1488
+ nodeset = NodeSet ("example[1-101]" , resolver = res )
1489
+ self .assertEqual (nodeset .regroup (), "@bar,@foo,example101" )
1490
1490
1491
- # regroup incomplete
1492
- nodeset = NodeSet ("example[50-200]" , resolver = res )
1493
- self .assertEqual (nodeset .regroup (), "example[50-200]" )
1491
+ # regroup incomplete
1492
+ nodeset = NodeSet ("example[50-200]" , resolver = res )
1493
+ self .assertEqual (nodeset .regroup (), "example[50-200]" )
1494
1494
1495
- # regroup no matching
1496
- nodeset = NodeSet ("example[102-200]" , resolver = res )
1497
- self .assertEqual (nodeset .regroup (), "example[102-200]" )
1495
+ # regroup no matching
1496
+ nodeset = NodeSet ("example[102-200]" , resolver = res )
1497
+ self .assertEqual (nodeset .regroup (), "example[102-200]" )
1498
+ finally :
1499
+ yamlfile .close ()
1500
+ os .rmdir (dname )
1498
1501
1499
1502
def test_yaml_fromall (self ):
1500
1503
"""test groups special all group"""
@@ -1510,12 +1513,15 @@ def test_yaml_fromall(self):
1510
1513
bar: example[5-89]
1511
1514
all: example[90-100]
1512
1515
""" ).encode ('ascii' ), suffix = ".yaml" , dir = dname )
1513
-
1514
- res = GroupResolverConfig (f .name )
1515
- nodeset = NodeSet .fromall (resolver = res )
1516
- self .assertEqual (str (nodeset ), "example[90-100]" )
1517
- # regroup uses @all if it is defined
1518
- self .assertEqual (nodeset .regroup (), "@all" )
1516
+ try :
1517
+ res = GroupResolverConfig (f .name )
1518
+ nodeset = NodeSet .fromall (resolver = res )
1519
+ self .assertEqual (str (nodeset ), "example[90-100]" )
1520
+ # regroup uses @all if it is defined
1521
+ self .assertEqual (nodeset .regroup (), "@all" )
1522
+ finally :
1523
+ yamlfile .close ()
1524
+ os .rmdir (dname )
1519
1525
1520
1526
def test_yaml_invalid_groups_not_dict (self ):
1521
1527
"""test groups with an invalid YAML config file (1)"""
@@ -1528,9 +1534,12 @@ def test_yaml_invalid_groups_not_dict(self):
1528
1534
yamlfile = make_temp_file (b"""
1529
1535
yaml: bar
1530
1536
""" , suffix = ".yaml" , dir = dname )
1531
-
1532
- resolver = GroupResolverConfig (f .name )
1533
- self .assertRaises (GroupResolverConfigError , resolver .grouplist )
1537
+ try :
1538
+ resolver = GroupResolverConfig (f .name )
1539
+ self .assertRaises (GroupResolverConfigError , resolver .grouplist )
1540
+ finally :
1541
+ yamlfile .close ()
1542
+ os .rmdir (dname )
1534
1543
1535
1544
def test_yaml_invalid_root_dict (self ):
1536
1545
"""test groups with an invalid YAML config file (2)"""
@@ -1545,9 +1554,12 @@ def test_yaml_invalid_root_dict(self):
1545
1554
- North by Northwest
1546
1555
- The Man Who Wasn't There
1547
1556
""" , suffix = ".yaml" , dir = dname )
1548
-
1549
- resolver = GroupResolverConfig (f .name )
1550
- self .assertRaises (GroupResolverConfigError , resolver .grouplist )
1557
+ try :
1558
+ resolver = GroupResolverConfig (f .name )
1559
+ self .assertRaises (GroupResolverConfigError , resolver .grouplist )
1560
+ finally :
1561
+ yamlfile .close ()
1562
+ os .rmdir (dname )
1551
1563
1552
1564
def test_yaml_invalid_not_yaml (self ):
1553
1565
"""test groups with an invalid YAML config file (3)"""
@@ -1563,9 +1575,12 @@ def test_yaml_invalid_not_yaml(self):
1563
1575
two: deux
1564
1576
three: trois
1565
1577
""" , suffix = ".yaml" , dir = dname )
1566
-
1567
- resolver = GroupResolverConfig (f .name )
1568
- self .assertRaises (GroupResolverConfigError , resolver .grouplist )
1578
+ try :
1579
+ resolver = GroupResolverConfig (f .name )
1580
+ self .assertRaises (GroupResolverConfigError , resolver .grouplist )
1581
+ finally :
1582
+ yamlfile .close ()
1583
+ os .rmdir (dname )
1569
1584
1570
1585
def test_wrong_autodir (self ):
1571
1586
"""test wrong autodir (doesn't exist)"""
@@ -1591,25 +1606,30 @@ def test_wrong_autodir_is_file(self):
1591
1606
[local]
1592
1607
map: node
1593
1608
""" % fe .name ).encode ('ascii' ))
1594
-
1595
1609
resolver = GroupResolverConfig (f .name )
1596
1610
self .assertRaises (GroupResolverConfigError , resolver .grouplist )
1597
1611
1598
1612
def test_yaml_permission_denied (self ):
1599
1613
"""test groups when not allowed to read some YAML config file"""
1614
+
1615
+ # This test doesn't work if run as root, as root can read the
1616
+ # yaml group file even with restricted file permissions...
1617
+ if os .geteuid () == 0 :
1618
+ return
1619
+
1600
1620
dname = make_temp_dir ()
1601
- try :
1602
- f = make_temp_file (dedent ("""
1603
- [Main]
1604
- default: yaml1
1605
- autodir: %s
1606
- """ % dname ).encode ('ascii' ))
1621
+ f = make_temp_file (dedent ("""
1622
+ [Main]
1623
+ default: yaml1
1624
+ autodir: %s
1625
+ """ % dname ).encode ('ascii' ))
1607
1626
1608
- yamlfile1 = make_temp_file (b'yaml1: {foo: "example[1-4]"}' ,
1609
- suffix = ".yaml" , dir = dname )
1610
- yamlfile2 = make_temp_file (b'yaml2: {bar: "example[5-8]"}' ,
1611
- suffix = ".yaml" , dir = dname )
1627
+ yamlfile1 = make_temp_file (b'yaml1: {foo: "example[1-4]"}' ,
1628
+ suffix = ".yaml" , dir = dname )
1629
+ yamlfile2 = make_temp_file (b'yaml2: {bar: "example[5-8]"}' ,
1630
+ suffix = ".yaml" , dir = dname )
1612
1631
1632
+ try :
1613
1633
# do not allow read access to yamlfile2
1614
1634
os .chmod (yamlfile2 .name , 0 )
1615
1635
self .assertFalse (os .access (yamlfile2 .name , os .R_OK ))
@@ -1626,4 +1646,4 @@ def test_yaml_permission_denied(self):
1626
1646
finally :
1627
1647
yamlfile1 .close ()
1628
1648
yamlfile2 .close ()
1629
- shutil . rmtree (dname , ignore_errors = True )
1649
+ os . rmdir (dname )
0 commit comments