def test_get_dataset_raises_error_for_sequence_ids_that_are_invalid( self, mock_kitti_loader, _): mock_kitti_loader.find_root.side_effect = lambda x, seq: x subject = KITTIManager(Path(__file__).parent) with self.assertRaises(NotADirectoryError) as ex: subject.get_dataset('my_sequence_name') self.assertIn('my_sequence_name', str(ex.exception))
def test_get_dataset_creates_and_saves_task(self): # Really mock this dataset path sequence_idx = 3 sequence_name = "{0:06}".format(sequence_idx) short_name = "{0:02}".format(sequence_idx) sequence_root = self.mock_dataset_root / 'dataset' sequence_root.mkdir(exist_ok=True, parents=True) (sequence_root / 'sequences' / short_name / 'image_2').mkdir( parents=True, exist_ok=True) (sequence_root / 'sequences' / short_name / 'image_3').mkdir( parents=True, exist_ok=True) (sequence_root / 'sequences' / short_name / 'calib.txt').touch() (sequence_root / 'sequences' / short_name / 'times.txt').touch() (sequence_root / 'poses').mkdir(parents=True, exist_ok=True) (sequence_root / 'poses' / ("{0:02}.txt".format(3))).touch() subject = KITTIManager(self.mock_dataset_root) result = subject.get_dataset(sequence_name) self.assertIsNone(result) all_tasks = list(ImportDatasetTask.objects.all()) self.assertEqual(1, len(all_tasks)) task = all_tasks[0] self.assertEqual(kitti_loader.__name__, task.module_name) self.assertEqual(str(sequence_root), task.path)
def test_get_dataset_returns_none_for_incomplete_tasks( self, mock_kitti_loader, mock_task_manager): mock_kitti_loader.find_root.side_effect = lambda x, seq: x mock_task = mock.Mock() mock_task.is_finished = False mock_task_manager.get_import_dataset_task.return_value = mock_task subject = KITTIManager(Path(__file__).parent) result = subject.get_dataset(4) self.assertIsNone(result)
def test_get_dataset_raises_not_found_for_indexes_outside_range( self, mock_kitti_loader, _): mock_kitti_loader.find_root.side_effect = lambda x, seq: x subject = KITTIManager(Path(__file__).parent) for sequence_idx in range(-20, 20): if 0 <= sequence_idx < 11: # No exception subject.get_dataset(sequence_idx) else: with self.assertRaises(NotADirectoryError): subject.get_dataset(sequence_idx)
def test_get_dataset_returns_result_from_complete_tasks( self, mock_kitti_loader, mock_task_manager): mock_kitti_loader.find_root.side_effect = lambda x, seq: x mock_task = mock.Mock() mock_task.is_finished = True result_id = bson.ObjectId() mock_task.get_result.return_value = result_id mock_task_manager.get_import_dataset_task.return_value = mock_task subject = KITTIManager(Path(__file__).parent) result = subject.get_dataset(2) self.assertEqual(result_id, result)
def test_get_dataset_raises_not_found_for_missing_datasets( self, mock_kitti_loader, _): existing_ids = {2, 5, 9} def mock_find_root(path, seq): if seq not in existing_ids: raise FileNotFoundError return path / "{0:03}".format(seq) mock_kitti_loader.find_root.side_effect = mock_find_root subject = KITTIManager(Path(__file__).parent) for sequence_id in range(11): if sequence_id in existing_ids: # No exception subject.get_dataset(sequence_id) else: with self.assertRaises(NotADirectoryError): subject.get_dataset(sequence_id)
def test_get_missing_datasets_returns_dataset_names_not_in_found_roots( self, mock_kitti_loader): def mock_find_root(x, seq): if seq % 2 == 0: return x / "{0:03}".format(seq) raise FileNotFoundError root_folder = Path(__file__).parent mock_kitti_loader.find_root.side_effect = mock_find_root manager = KITTIManager(root_folder) self.assertTrue(mock_kitti_loader.find_root.called) for sequence_id in range(11): self.assertIn(mock.call(root_folder, sequence_id), mock_kitti_loader.find_root.call_args_list) self.assertEqual([ dataset_name for dataset_name in dataset_names if int(dataset_name) % 2 == 1 ], manager.get_missing_datasets())
def test_get_dataset_makes_tasks_for_roots_from_find_roots( self, mock_kitti_loader, mock_task_manager): root_folder = Path(__file__).parent module_name = 'mymodulename' marker = 'foobar' mock_kitti_loader.find_root.side_effect = lambda x, seq: x / marker mock_kitti_loader.__name__ = module_name mock_task_manager.get_import_dataset_task.return_value = mock.Mock() subject = KITTIManager(root_folder) subject.get_dataset(1) self.assertEqual( mock.call(module_name=module_name, path=str(root_folder / marker), additional_args={'sequence_number': 1}, num_cpus=mock.ANY, num_gpus=mock.ANY, memory_requirements=mock.ANY, expected_duration=mock.ANY), mock_task_manager.get_import_dataset_task.call_args)