Exemplo n.º 1
0
    def test_task_run(self) -> None:
        """Test creation and querying of task_runs"""
        assert self.db is not None, "No db initialized"
        db: MephistoDB = self.db

        task_name, task_id = get_test_task(db)
        requester_name, requester_id = get_test_requester(db)

        # Check creation and retrieval of a task_run
        init_params = json.dumps(OmegaConf.to_yaml(TaskConfig.get_mock_params()))
        task_run_id = db.new_task_run(
            task_id, requester_id, init_params, "mock", "mock"
        )
        self.assertIsNotNone(task_run_id)
        self.assertTrue(isinstance(task_run_id, str))
        task_run_row = db.get_task_run(task_run_id)
        self.assertEqual(task_run_row["init_params"], init_params)
        task_run = TaskRun(db, task_run_id)
        self.assertEqual(task_run.task_id, task_id)

        # Check finding for task_runs
        task_runs = db.find_task_runs()
        self.assertEqual(len(task_runs), 1)
        self.assertTrue(isinstance(task_runs[0], TaskRun))
        self.assertEqual(task_runs[0].db_id, task_run_id)
        self.assertEqual(task_runs[0].task_id, task_id)
        self.assertEqual(task_runs[0].requester_id, requester_id)

        # Check finding for specific task_runs
        task_runs = db.find_task_runs(task_id=task_id)
        self.assertEqual(len(task_runs), 1)
        self.assertTrue(isinstance(task_runs[0], TaskRun))
        self.assertEqual(task_runs[0].db_id, task_run_id)
        self.assertEqual(task_runs[0].task_id, task_id)
        self.assertEqual(task_runs[0].requester_id, requester_id)

        task_runs = db.find_task_runs(requester_id=requester_id)
        self.assertEqual(len(task_runs), 1)
        self.assertTrue(isinstance(task_runs[0], TaskRun))
        self.assertEqual(task_runs[0].db_id, task_run_id)
        self.assertEqual(task_runs[0].task_id, task_id)
        self.assertEqual(task_runs[0].requester_id, requester_id)

        task_runs = db.find_task_runs(task_id=self.get_fake_id("TaskRun"))
        self.assertEqual(len(task_runs), 0)

        task_runs = db.find_task_runs(is_completed=True)
        self.assertEqual(len(task_runs), 0)

        # Test updating the completion status, requery
        db.update_task_run(task_run_id, True)
        task_runs = db.find_task_runs(is_completed=True)
        self.assertEqual(len(task_runs), 1)
        self.assertTrue(isinstance(task_runs[0], TaskRun))
        self.assertEqual(task_runs[0].db_id, task_run_id)
Exemplo n.º 2
0
    def test_task_run_fails(self) -> None:
        """Ensure task_runs fail to be created or loaded under failure conditions"""
        assert self.db is not None, "No db initialized"
        db: MephistoDB = self.db

        task_name, task_id = get_test_task(db)
        requester_name, requester_id = get_test_requester(db)
        init_params = json.dumps(OmegaConf.to_yaml(TaskConfig.get_mock_params()))

        # Can't create task run with invalid ids
        with self.assertRaises(EntryDoesNotExistException):
            task_run_id = db.new_task_run(
                self.get_fake_id("Task"), requester_id, init_params, "mock", "mock"
            )
        with self.assertRaises(EntryDoesNotExistException):
            task_run_id = db.new_task_run(
                task_id, self.get_fake_id("Requester"), init_params, "mock", "mock"
            )

        # Ensure no task_runs were created
        task_runs = db.find_task_runs()
        self.assertEqual(len(task_runs), 0)
Exemplo n.º 3
0
    def test_update_task_failures(self) -> None:
        """Ensure failure conditions trigger for updating tasks"""
        assert self.db is not None, "No db initialized"
        db: MephistoDB = self.db

        task_name = "test_task"
        task_type = "mock"
        task_id = db.new_task(task_name, task_type)

        task_name_2 = "test_task_2"
        task_id_2 = db.new_task(task_name_2, task_type)

        task_name_3 = "test_task_3"

        # Can't update a task to existing name
        with self.assertRaises(EntryAlreadyExistsException):
            db.update_task(task_id_2, task_name=task_name)

        # Can't update to an invalid name
        with self.assertRaises(MephistoDBException):
            db.update_task(task_id_2, task_name="")

        # Can't update to a nonexistent project id
        with self.assertRaises(EntryDoesNotExistException):
            fake_id = self.get_fake_id("Project")
            db.update_task(task_id_2, project_id=fake_id)

        # can update a task though
        db.update_task(task_id_2, task_name=task_name_3)

        # But not after we've created a task run
        requester_name, requester_id = get_test_requester(db)
        init_params = json.dumps(OmegaConf.to_yaml(TaskConfig.get_mock_params()))
        task_run_id = db.new_task_run(
            task_id_2, requester_id, init_params, "mock", "mock"
        )
        with self.assertRaises(MephistoDBException):
            db.update_task(task_id_2, task_name=task_name_2)
Exemplo n.º 4
0
def get_test_task_run(db: MephistoDB) -> str:
    """Helper to create a task run for tests"""
    task_name, task_id = get_test_task(db)
    requester_name, requester_id = get_test_requester(db)
    init_params = TaskConfig.get_mock_params()
    return db.new_task_run(task_id, requester_id, init_params, "mock", "mock")