def test_least_loaded_node_scheduler_create_label(self): with patch.object(Node.objects, "get_items") as node_objects, \ patch.object(NodeLabel, "save", autospec=True) as nodelabel_save, \ patch.object(NodeLabel, "node") as nodelabel_node_add: slice = Slice(name="mysite_test1", default_flavor=None, default_isolation="vm") instance1 = Instance(id=1) node1 = Node(hostname="my.node.com", id=4567) node1.instances = MockObjectList(initial=[]) node2 = Node(hostname="my.node.com", id=8910) node2.instances = MockObjectList(initial=[instance1]) # Fake out the existence of a NodeLabel object. TODO: Extend the mock framework to support the model__field # syntax. node1.nodelabels__name = None node2.nodelabels__name = None node_objects.return_value = [node1, node2] # should pick the node with the least number of instances sched = LeastLoadedNodeScheduler( slice, label="foo", constrain_by_service_instance=True) (picked_node, parent) = sched.pick() self.assertNotEqual(picked_node, None) self.assertEqual(picked_node.id, node1.id) # NodeLabel should have been created and saved self.assertEqual(nodelabel_save.call_count, 1) self.assertEqual(nodelabel_save.call_args[0][0].name, "foo") # The NodeLabel's node field should have been added to NodeLabel.node.add.assert_called_with(node1)
def test_least_loaded_node_scheduler(self): with patch.object(Node.objects, "get_items") as node_objects: slice = Slice(name="mysite_test1", default_flavor=None, default_isolation="vm") node = Node(hostname="my.node.com", id=4567) node.instances = MockObjectList(initial=[]) node_objects.return_value = [node] sched = LeastLoadedNodeScheduler(slice) (picked_node, parent) = sched.pick() self.assertNotEqual(picked_node, None) self.assertEqual(picked_node.id, node.id)
def test_least_loaded_node_scheduler_two_nodes(self): with patch.object(Node.objects, "get_items") as node_objects: slice = Slice(name="mysite_test1", default_flavor=None, default_isolation="vm") instance1 = Instance(id=1) node1 = Node(hostname="my.node.com", id=4567) node1.instances = MockObjectList(initial=[]) node2 = Node(hostname="my.node.com", id=8910) node2.instances = MockObjectList(initial=[instance1]) node_objects.return_value = [node1, node2] # should pick the node with the fewest instance (node1) sched = LeastLoadedNodeScheduler(slice) (picked_node, parent) = sched.pick() self.assertNotEqual(picked_node, None) self.assertEqual(picked_node.id, node1.id)
def test_least_loaded_node_scheduler_with_label(self): with patch.object(Node.objects, "get_items") as node_objects: slice = Slice(name="mysite_test1", default_flavor=None, default_isolation="vm") instance1 = Instance(id=1) node1 = Node(hostname="my.node.com", id=4567) node1.instances = MockObjectList(initial=[]) node2 = Node(hostname="my.node.com", id=8910) node2.instances = MockObjectList(initial=[instance1]) # Fake out the existence of a NodeLabel object. TODO: Extend the mock framework to support the model__field # syntax. node1.nodelabels__name = None node2.nodelabels__name = "foo" node_objects.return_value = [node1, node2] # should pick the node with the label, even if it has a greater number of instances sched = LeastLoadedNodeScheduler(slice, label="foo") (picked_node, parent) = sched.pick() self.assertNotEqual(picked_node, None) self.assertEqual(picked_node.id, node2.id)