@@ -191,7 +191,7 @@ def testAllNoResolver(self):
191191 """test NodeSet.fromall() with no resolver"""
192192 self .assertRaises (NodeSetExternalError , NodeSet .fromall ,
193193 resolver = RESOLVER_NOGROUP )
194-
194+
195195 def testGroupsNoResolver (self ):
196196 """test NodeSet.groups() with no resolver"""
197197 nodeset = NodeSet ("foo" , resolver = RESOLVER_NOGROUP )
@@ -214,7 +214,7 @@ def testGroupResolverAddSourceError(self):
214214
215215 def testGroupResolverMinimal (self ):
216216 """test NodeSet with minimal GroupResolver"""
217-
217+
218218 test_groups1 = makeTestG1 ()
219219
220220 source = UpcallGroupSource ("minimal" ,
@@ -230,7 +230,6 @@ def testGroupResolverMinimal(self):
230230
231231 self .assertRaises (NodeSetExternalError , NodeSet .fromall , resolver = res )
232232
233-
234233 def testConfigEmpty (self ):
235234 """test groups with an empty configuration file"""
236235 f = make_temp_file ("" )
@@ -408,7 +407,7 @@ def testConfigQueryFailed(self):
408407
409408[local]
410409map: false
411- # all:
410+ all: false
412411list: echo foo
413412#reverse:
414413 """ )
@@ -417,6 +416,27 @@ def testConfigQueryFailed(self):
417416 self .assertEqual (str (nodeset ), "example[1-100]" )
418417 self .assertRaises (NodeSetExternalError , nodeset .regroup )
419418
419+ # all_nodes()
420+ self .assertRaises (NodeSetExternalError , NodeSet .fromall , resolver = res )
421+
422+ def testConfigQueryFailedReverse (self ):
423+ """test groups with config and failed query (reverse)"""
424+ f = make_temp_file ("""
425+ # A comment
426+
427+ [Main]
428+ default: local
429+
430+ [local]
431+ map: echo example1
432+ list: echo foo
433+ reverse: false
434+ """ )
435+ res = GroupResolverConfig (f .name )
436+ nodeset = NodeSet ("@foo" , resolver = res )
437+ self .assertEqual (str (nodeset ), "example1" )
438+ self .assertRaises (NodeSetExternalError , nodeset .regroup )
439+
420440 def testConfigRegroupWrongNamespace (self ):
421441 """test groups by calling regroup(wrong_namespace)"""
422442 f = make_temp_file ("""
@@ -1236,8 +1256,8 @@ def test_base_class0(self):
12361256 self .assertEqual (gs .resolv_map ('gr1' ), '' )
12371257 self .assertEqual (gs .resolv_map ('gr2' ), '' )
12381258 self .assertEqual (gs .resolv_list (), [])
1239- self .assertRaises (GroupSourceQueryFailed , gs .resolv_all )
1240- self .assertRaises (GroupSourceQueryFailed , gs .resolv_reverse , 'n4' )
1259+ self .assertRaises (GroupSourceNoUpcall , gs .resolv_all )
1260+ self .assertRaises (GroupSourceNoUpcall , gs .resolv_reverse , 'n4' )
12411261
12421262 def test_base_class1 (self ):
12431263 """test base GroupSource class (map and list)"""
@@ -1246,8 +1266,8 @@ def test_base_class1(self):
12461266 self .assertEqual (gs .resolv_map ('gr1' ), ['n1' , 'n4' , 'n3' , 'n2' ])
12471267 self .assertEqual (gs .resolv_map ('gr2' ), ['n9' , 'n4' ])
12481268 self .assertEqual (sorted (gs .resolv_list ()), ['gr1' , 'gr2' ])
1249- self .assertRaises (GroupSourceQueryFailed , gs .resolv_all )
1250- self .assertRaises (GroupSourceQueryFailed , gs .resolv_reverse , 'n4' )
1269+ self .assertRaises (GroupSourceNoUpcall , gs .resolv_all )
1270+ self .assertRaises (GroupSourceNoUpcall , gs .resolv_reverse , 'n4' )
12511271
12521272 def test_base_class2 (self ):
12531273 """test base GroupSource class (all)"""
@@ -1405,6 +1425,12 @@ def test_yaml_basic(self):
14051425
14061426 # No 'all' defined: all_nodes() should raise an error
14071427 self .assertRaises (GroupSourceError , res .all_nodes )
1428+ # but then NodeSet falls back to the union of all groups
1429+ nodeset = NodeSet .fromall (resolver = res )
1430+ self .assertEqual (str (nodeset ), "example[1-100]" )
1431+ # regroup doesn't use @all in that case
1432+ self .assertEqual (nodeset .regroup (), "@bar,@foo" )
1433+
14081434 # No 'reverse' defined: node_groups() should raise an error
14091435 self .assertRaises (GroupSourceError , res .node_groups , "example1" )
14101436
@@ -1420,6 +1446,27 @@ def test_yaml_basic(self):
14201446 nodeset = NodeSet ("example[102-200]" , resolver = res )
14211447 self .assertEqual (nodeset .regroup (), "example[102-200]" )
14221448
1449+ def test_yaml_fromall (self ):
1450+ """test groups special all group"""
1451+ dname = make_temp_dir ()
1452+ f = make_temp_file ("""
1453+ [Main]
1454+ default: yaml
1455+ autodir: %s
1456+ """ % dname )
1457+ yamlfile = make_temp_file ("""
1458+ yaml:
1459+ foo: example[1-4,91-100],example90
1460+ bar: example[5-89]
1461+ all: example[90-100]
1462+ """ , suffix = ".yaml" , dir = dname )
1463+
1464+ res = GroupResolverConfig (f .name )
1465+ nodeset = NodeSet .fromall (resolver = res )
1466+ self .assertEqual (str (nodeset ), "example[90-100]" )
1467+ # regroup uses @all if it is defined
1468+ self .assertEqual (nodeset .regroup (), "@all" )
1469+
14231470 def test_yaml_invalid_groups_not_dict (self ):
14241471 """test groups with an invalid YAML config file (1)"""
14251472 dname = make_temp_dir ()
0 commit comments