def testFromListConstructor(self): """test RangeSet.fromlist() constructor""" rgs = RangeSet.fromlist([ "3", "5-8", "1" ]) self.assertEqual(str(rgs), "1,3,5-8") self.assertEqual(len(rgs), 6) rgs = RangeSet.fromlist([ RangeSet("3"), RangeSet("5-8"), RangeSet("1") ]) self.assertEqual(str(rgs), "1,3,5-8") self.assertEqual(len(rgs), 6) rgs = RangeSet.fromlist([set([3,5,6,7,8,1])]) self.assertEqual(str(rgs), "1,3,5-8") self.assertEqual(len(rgs), 6)
def testFromListConstructor(self): """test RangeSet.fromlist() constructor""" rgs = RangeSet.fromlist(["3", "5-8", "1"]) self.assertEqual(str(rgs), "1,3,5-8") self.assertEqual(len(rgs), 6) rgs = RangeSet.fromlist( [RangeSet("3"), RangeSet("5-8"), RangeSet("1")]) self.assertEqual(str(rgs), "1,3,5-8") self.assertEqual(len(rgs), 6) rgs = RangeSet.fromlist([set([3, 5, 6, 7, 8, 1])]) self.assertEqual(str(rgs), "1,3,5-8") self.assertEqual(len(rgs), 6)
def testStringIterator(self): """test RangeSet string iterator striter()""" matches = [1, 3, 4, 5, 6, 7, 8, 11] rgs = RangeSet.fromlist(["11", "3", "5-8", "1", "4"]) cnt = 0 for rg in rgs.striter(): self.assertEqual(rg, str(matches[cnt])) cnt += 1 self.assertEqual(cnt, len(matches)) # with padding rgs = RangeSet.fromlist(["011", "003", "005-008", "001", "004"]) cnt = 0 for rg in rgs.striter(): self.assertTrue(type(rg) is str) self.assertEqual(rg, "%0*d" % (3, matches[cnt])) cnt += 1 self.assertEqual(cnt, len(matches))
def testIterator(self): """test RangeSet iterator""" matches = [1, 3, 4, 5, 6, 7, 8, 11] rgs = RangeSet.fromlist(["11", "3", "5-8", "1", "4"]) cnt = 0 for rg in rgs: self.assertEqual(rg, matches[cnt]) cnt += 1 self.assertEqual(cnt, len(matches)) # with padding rgs = RangeSet.fromlist(["011", "003", "005-008", "001", "004"]) cnt = 0 for rg in rgs: self.assertTrue(type(rg) is int) self.assertEqual(rg, matches[cnt]) cnt += 1 self.assertEqual(cnt, len(matches))
def testStringIterator(self): """test RangeSet string iterator striter()""" matches = [ 1, 3, 4, 5, 6, 7, 8, 11 ] rgs = RangeSet.fromlist([ "11", "3", "5-8", "1", "4" ]) cnt = 0 for rg in rgs.striter(): self.assertEqual(rg, str(matches[cnt])) cnt += 1 self.assertEqual(cnt, len(matches)) # with padding rgs = RangeSet.fromlist([ "011", "003", "005-008", "001", "004" ]) cnt = 0 for rg in rgs.striter(): self.assertTrue(type(rg) is str) self.assertEqual(rg, "%0*d" % (3, matches[cnt])) cnt += 1 self.assertEqual(cnt, len(matches))
def testIterator(self): """test RangeSet iterator""" matches = [ 1, 3, 4, 5, 6, 7, 8, 11 ] rgs = RangeSet.fromlist([ "11", "3", "5-8", "1", "4" ]) cnt = 0 for rg in rgs: self.assertEqual(rg, matches[cnt]) cnt += 1 self.assertEqual(cnt, len(matches)) # with padding rgs = RangeSet.fromlist([ "011", "003", "005-008", "001", "004" ]) cnt = 0 for rg in rgs: self.assertTrue(type(rg) is int) self.assertEqual(rg, matches[cnt]) cnt += 1 self.assertEqual(cnt, len(matches))
def select_nodes(self, profil, name, nb_nodes, host): '''Select nodes to spawn''' # 1: recover available nodelist # 2: select nb_nodes among availables nodes # 3: return the list of nodes err = "" nodes = [] if host is None: err = "Error: No host available\n" _LOGGER.error(err) self.rep_sock.send(msgpack.packb(('', [err]))) return nodes if not vc.VirtualCluster.valid_clustername(name): err = "Error: clustername '{}' is not a valid name\n".format(name) _LOGGER.error(err) self.rep_sock.send(msgpack.packb(('', [err]))) return nodes if profil not in self.profiles: err = "Error: Profil '{}' not found in configuration file\n".format( profil) _LOGGER.error(err) self.rep_sock.send(msgpack.packb(('', [err]))) return nodes nodelist = self.list_nodes(byhost=False) nodeset = NodeSet.fromlist([node.name for node in nodelist]) idx_min = 0 idx_max = nb_nodes - 1 base_range = RangeSet("%d-%d" % (idx_min, idx_max)) base_nodeset = NodeSetBase(name + '%s', base_range) ndset_inter = nodeset.intersection(base_nodeset) while len(ndset_inter) != 0: indexes = [ clustdock.VirtualNode.split_name(node)[1] for node in ndset_inter ] for idx in indexes: _LOGGER.debug("Removing %d from rangeset %s", idx, base_range) base_range.remove(idx) base_nodeset.difference_update(ndset_inter) _LOGGER.debug("Nodeset becomes '%s' after removing", base_nodeset) idx_min = max(indexes + list(base_range)) + 1 idx_max = idx_min + max([len(indexes), nb_nodes - len(base_range)]) base_range.add_range(idx_min, idx_max) _LOGGER.debug("New rangeset: %s", base_range) base_nodeset.update( NodeSetBase(name + '%s', RangeSet.fromlist([range(idx_min, idx_max)]))) _LOGGER.debug("New nodeset: %s", base_nodeset) ndset_inter = nodeset.intersection(base_nodeset) final_range = base_range _LOGGER.debug("final rangeset/nodeset: %s / %s", base_range, base_nodeset) cluster = vc.VirtualCluster(name, profil, self.profiles[profil]) nodes = [] for idx in final_range: node = cluster.add_node(idx, host) nodes.append(node) return nodes