def test_change_agent_id_with_inactive_node(self): """Tests the NodeManager where a registered node changes its agent ID, and the node is inactive""" manager = NodeManager() manager.register_agents([self.agent_1, self.agent_2]) manager.sync_with_database(scheduler_mgr.config) # Node 2 is now inactive Node.objects.filter( id=manager.get_node(self.agent_2.agent_id).id).update( is_active=False) manager.sync_with_database(scheduler_mgr.config) manager.lost_node(self.agent_2.agent_id) manager.register_agents([self.agent_3]) manager.sync_with_database(scheduler_mgr.config) # Make sure two nodes are registered, one for agent 1 and one for agent 3, and both are online nodes = manager.get_nodes() self.assertEqual(len(nodes), 2) node_1 = manager.get_node(self.agent_1.agent_id) self.assertEqual(node_1.hostname, self.node_1.hostname) self.assertTrue(node_1._is_online) self.assertIsNone(manager.get_node(self.agent_2.agent_id)) node_2 = manager.get_node(self.agent_3.agent_id) self.assertEqual(node_2.hostname, 'host_2') self.assertTrue(node_2._is_online) self.assertFalse(node_2._is_active)
def test_sync_and_remove_node_model(self, mock_get_slaves): """Tests doing a successful database update when a node model should be removed from the scheduler""" mock_get_slaves.return_value = self.slave_infos # Initial sync manager = NodeManager() manager.register_agent_ids([self.node_agent_1, self.node_agent_2]) manager.sync_with_database('master_host', 5050) # Database model changes to inactive self.node_1.is_active = False self.node_1.save() # Node is lost manager.lost_node(self.node_agent_1) # Sync with database manager.sync_with_database('master_host', 5050) # Make sure node 1 is gone found_node_1 = False for node in manager.get_nodes(): if node.hostname == self.node_1.hostname: found_node_1 = True self.assertFalse(found_node_1)
def test_change_agent_id_with_inactive_node(self, mock_get_slaves): """Tests the NodeManager where a registered node changes its agent ID, and the node is inactive""" mock_get_slaves.return_value = self.slave_infos manager = NodeManager() manager.register_agent_ids([self.node_agent_1, self.node_agent_2]) manager.sync_with_database('master_host', 5050) # Node 2 is now inactive Node.objects.filter(id=manager.get_node(self.node_agent_2).id).update(is_active=False) manager.sync_with_database('master_host', 5050) mock_get_slaves.return_value = self.slave_infos_updated manager.lost_node(self.node_agent_2) manager.register_agent_ids([self.node_agent_3]) manager.sync_with_database('master_host', 5050) # Make sure two nodes are registered, one for agent 1 and one for agent 3, and both are online nodes = manager.get_nodes() self.assertEqual(len(nodes), 2) node_1 = manager.get_node(self.node_agent_1) self.assertEqual(node_1.hostname, self.node_1.hostname) self.assertTrue(node_1._is_online) self.assertIsNone(manager.get_node(self.node_agent_2)) node_2 = manager.get_node(self.node_agent_3) self.assertEqual(node_2.hostname, 'host_2') self.assertTrue(node_2._is_online) self.assertFalse(node_2._is_active)
def test_lost_known_node(self): """Tests the NodeManager where a known node was lost""" manager = NodeManager() manager.register_agents([self.agent_1, self.agent_2]) manager.sync_with_database(scheduler_mgr.config) manager.lost_node(self.agent_2.agent_id) nodes = manager.get_nodes() self.assertEqual(len(nodes), 2) node_1 = manager.get_node(self.agent_1.agent_id) self.assertTrue(node_1._is_online) node_2 = manager.get_node(self.agent_2.agent_id) self.assertFalse(node_2._is_online)
def test_lost_unknown_node(self): """Tests the NodeManager where an unknown node was lost""" manager = NodeManager() manager.register_agents([self.agent_1, self.agent_2]) manager.lost_node(self.agent_2.agent_id) manager.sync_with_database(scheduler_mgr.config) # Unknown node 2 was lost before syncing with database, it should not appear in the manager nodes = manager.get_nodes() self.assertEqual(len(nodes), 1) node_1 = manager.get_node(self.agent_1.agent_id) self.assertEqual(node_1.hostname, self.node_1.hostname) self.assertTrue(node_1._is_online) self.assertIsNone(manager.get_node(self.agent_2.agent_id))
def test_lost_known_node(self, mock_get_slaves): """Tests the NodeManager where a known node was lost""" mock_get_slaves.return_value = self.slave_infos manager = NodeManager() manager.register_agent_ids([self.node_agent_1, self.node_agent_2]) manager.sync_with_database('master_host', 5050) manager.lost_node(self.node_agent_2) nodes = manager.get_nodes() self.assertEqual(len(nodes), 2) node_1 = manager.get_node(self.node_agent_1) self.assertTrue(node_1.is_online) node_2 = manager.get_node(self.node_agent_2) self.assertFalse(node_2.is_online)
def test_lost_known_node(self, mock_get_slaves): """Tests the NodeManager where a known node was lost""" mock_get_slaves.return_value = self.slave_infos manager = NodeManager() manager.register_agent_ids([self.node_agent_1, self.node_agent_2]) manager.sync_with_database('master_host', 5050) manager.lost_node(self.node_agent_2) nodes = manager.get_nodes() self.assertEqual(len(nodes), 2) node_1 = manager.get_node(self.node_agent_1) self.assertTrue(node_1._is_online) node_2 = manager.get_node(self.node_agent_2) self.assertFalse(node_2._is_online)
def test_lost_unknown_node(self, mock_get_slaves): """Tests the NodeManager where an unknown node was lost""" mock_get_slaves.return_value = self.slave_infos manager = NodeManager() manager.register_agent_ids([self.node_agent_1, self.node_agent_2]) manager.lost_node(self.node_agent_2) manager.sync_with_database('master_host', 5050) # Unknown node 2 was lost before syncing with database, it should not appear in the manager nodes = manager.get_nodes() self.assertEqual(len(nodes), 1) node_1 = manager.get_node(self.node_agent_1) self.assertEqual(node_1.hostname, self.node_1.hostname) self.assertTrue(node_1.is_online) self.assertIsNone(manager.get_node(self.node_agent_2))
def test_lost_unknown_node(self, mock_get_slaves): """Tests the NodeManager where an unknown node was lost""" mock_get_slaves.return_value = self.slave_infos manager = NodeManager() manager.register_agent_ids([self.node_agent_1, self.node_agent_2]) manager.lost_node(self.node_agent_2) manager.sync_with_database('master_host', 5050) # Unknown node 2 was lost before syncing with database, it should not appear in the manager nodes = manager.get_nodes() self.assertEqual(len(nodes), 1) node_1 = manager.get_node(self.node_agent_1) self.assertEqual(node_1.hostname, self.node_1.hostname) self.assertTrue(node_1._is_online) self.assertIsNone(manager.get_node(self.node_agent_2))
def test_change_agent_id(self): """Tests the NodeManager where a registered node changes its agent ID""" manager = NodeManager() manager.register_agents([self.agent_1, self.agent_2]) manager.sync_with_database(scheduler_mgr.config) manager.lost_node(self.agent_2.agent_id) manager.register_agents([self.agent_3]) manager.sync_with_database(scheduler_mgr.config) # Make sure two nodes are registered, one for agent 1 and one for agent 3, and both are online nodes = manager.get_nodes() self.assertEqual(len(nodes), 2) node_1 = manager.get_node(self.agent_1.agent_id) self.assertEqual(node_1.hostname, self.node_1.hostname) self.assertTrue(node_1._is_online) self.assertIsNone(manager.get_node(self.agent_2.agent_id)) node_2 = manager.get_node(self.agent_3.agent_id) self.assertEqual(node_2.hostname, 'host_2') self.assertTrue(node_2._is_online)
def test_pull_task_change_agent_id(self): """Tests the NodeManager where a node's agent ID changes during a pull task""" when = now() manager = NodeManager() manager.register_agents([self.agent_1, self.agent_2]) manager.sync_with_database(scheduler_mgr.config) for node in manager.get_nodes(): node._last_health_task = when node._initial_cleanup_completed() node._update_state() tasks = manager.get_next_tasks(when) task_mgr = TaskManager() task_2 = None for task in tasks: task_mgr.launch_tasks([task], when) if task.agent_id == self.agent_2.agent_id: task_2 = task # Node 2 changes agent ID to 3 manager.lost_node(self.agent_2.agent_id) manager.register_agents([self.agent_3]) manager.sync_with_database(scheduler_mgr.config) for node in manager.get_nodes(): node._last_health_task = when node._initial_cleanup_completed() node._update_state() # Should get new Docker pull task for node 2 tasks = manager.get_next_tasks(when) self.assertEqual(len(tasks), 1) new_task_2 = tasks[0] self.assertEqual(new_task_2.agent_id, self.agent_3.agent_id) # Task update comes back for original node 2 Docker pull task, manager should ignore with no exception update = job_test_utils.create_task_status_update( task_2.id, task_2.agent_id, TaskStatusUpdate.FAILED, when) task_mgr.handle_task_update(update) manager.handle_task_update(update)
def test_sync_and_remove_node_model(self): """Tests doing a successful database update when a node model should be removed from the scheduler""" # Initial sync manager = NodeManager() manager.register_agents([self.agent_1, self.agent_2]) manager.sync_with_database(scheduler_mgr.config) # Database model changes to inactive self.node_1.is_active = False self.node_1.save() # Node is lost manager.lost_node(self.agent_1.agent_id) # Sync with database manager.sync_with_database(scheduler_mgr.config) # Make sure node 1 is gone found_node_1 = False for node in manager.get_nodes(): if node.hostname == self.node_1.hostname: found_node_1 = True self.assertFalse(found_node_1)
def test_change_agent_id(self, mock_get_slaves): """Tests the NodeManager where a registered node changes its agent ID""" mock_get_slaves.return_value = self.slave_infos manager = NodeManager() manager.register_agent_ids([self.node_agent_1, self.node_agent_2]) manager.sync_with_database('master_host', 5050) mock_get_slaves.return_value = self.slave_infos_updated manager.lost_node(self.node_agent_2) manager.register_agent_ids([self.node_agent_3]) manager.sync_with_database('master_host', 5050) # Make sure two nodes are registered, one for agent 1 and one for agent 3, and both are online nodes = manager.get_nodes() self.assertEqual(len(nodes), 2) node_1 = manager.get_node(self.node_agent_1) self.assertEqual(node_1.hostname, self.node_1.hostname) self.assertTrue(node_1.is_online) self.assertIsNone(manager.get_node(self.node_agent_2)) node_2 = manager.get_node(self.node_agent_3) self.assertEqual(node_2.hostname, 'host_2') self.assertTrue(node_2.is_online)