class DatasetTestSuite(DataTestCase):
    @classmethod
    def setUpClass(cls):
        super().setUpClass()

        cls.obsPackage = 'obs_test'
        cls.camera = 'test'

    def setUp(self):
        self._testbed = Dataset(DatasetTestSuite.datasetKey)

    def testDatasets(self):
        """Verify that a Dataset knows its supported datasets.
        """
        datasets = Dataset.getSupportedDatasets()
        self.assertIn(DatasetTestSuite.datasetKey,
                      datasets)  # assumed by other tests

    def testBadDataset(self):
        """Verify that Dataset construction fails gracefully on unsupported datasets.
        """
        with self.assertRaises(ValueError):
            Dataset("TotallyBogusDataset")

    def testDirectories(self):
        """Verify that a Dataset reports the desired directory structure.
        """
        root = self._testbed.datasetRoot
        self.assertEqual(self._testbed.rawLocation, os.path.join(root, 'raw'))
        self.assertEqual(self._testbed.calibLocation,
                         os.path.join(root, 'calib'))
        self.assertEqual(self._testbed.templateLocation,
                         os.path.join(root, 'templates'))
        self.assertEqual(self._testbed.refcatsLocation,
                         os.path.join(root, 'refcats'))

    def testObsPackage(self):
        """Verify that a Dataset knows its associated obs package and camera.
        """
        self.assertEqual(self._testbed.obsPackage, DatasetTestSuite.obsPackage)
        self.assertEqual(self._testbed.camera, DatasetTestSuite.camera)

    def testOutput(self):
        """Verify that a Dataset can create an output repository as desired.
        """
        testDir = tempfile.mkdtemp()
        outputDir = os.path.join(testDir, 'goodOut')
        calibRepoDir = outputDir

        try:
            self._testbed.makeCompatibleRepo(outputDir, calibRepoDir)
            self.assertTrue(os.path.exists(outputDir),
                            'Output directory must exist.')
            self.assertTrue(os.listdir(outputDir),
                            'Output directory must not be empty.')
            self.assertTrue(
                os.path.exists(os.path.join(outputDir, '_mapper')) or
                os.path.exists(os.path.join(outputDir, 'repositoryCfg.yaml')),
                'Output directory must have a _mapper or repositoryCfg.yaml file.'
            )
        finally:
            if os.path.exists(testDir):
                shutil.rmtree(testDir, ignore_errors=True)

    def testExistingOutput(self):
        """Verify that a Dataset can handle pre-existing output directories,
        including directories made by external code.
        """
        testDir = tempfile.mkdtemp()
        outputDir = os.path.join(testDir, 'badOut')
        calibRepoDir = outputDir

        try:
            os.makedirs(outputDir)
            output = os.path.join(outputDir, 'foo.txt')
            with open(output, 'w') as dummy:
                dummy.write('This is a test!')

            self._testbed.makeCompatibleRepo(outputDir, calibRepoDir)
            self.assertTrue(os.path.exists(outputDir),
                            'Output directory must exist.')
            self.assertTrue(os.listdir(outputDir),
                            'Output directory must not be empty.')
            self.assertTrue(
                os.path.exists(os.path.join(outputDir, '_mapper')) or
                os.path.exists(os.path.join(outputDir, 'repositoryCfg.yaml')),
                'Output directory must have a _mapper or repositoryCfg.yaml file.'
            )
        finally:
            if os.path.exists(testDir):
                shutil.rmtree(testDir, ignore_errors=True)
Example #2
0
class DatasetTestSuite(DataTestCase):
    @classmethod
    def setUpClass(cls):
        super().setUpClass()

        cls.obsPackage = 'obs_lsst'
        cls.camera = 'imsim'
        cls.gen3Camera = 'LSSTCam-imSim'

    def setUp(self):
        self._testbed = Dataset(DatasetTestSuite.datasetKey)

    def testRepr(self):
        # Required to match constructor call
        self.assertEqual(repr(self._testbed),
                         "Dataset(" + repr(self.datasetKey) + ")")

    def testDatasets(self):
        """Verify that a Dataset knows its supported datasets.
        """
        datasets = Dataset.getSupportedDatasets()
        self.assertIn(DatasetTestSuite.datasetKey,
                      datasets)  # assumed by other tests

    def testBadDataset(self):
        """Verify that Dataset construction fails gracefully on unsupported datasets.
        """
        with self.assertRaises(ValueError):
            Dataset("TotallyBogusDataset")

    def testDirectories(self):
        """Verify that a Dataset reports the desired directory structure.
        """
        root = self._testbed.datasetRoot
        self.assertEqual(self._testbed.rawLocation, os.path.join(root, 'raw'))
        self.assertEqual(self._testbed.calibLocation,
                         os.path.join(root, 'calib'))
        self.assertEqual(self._testbed.templateLocation,
                         os.path.join(root, 'templates'))
        self.assertEqual(self._testbed.refcatsLocation,
                         os.path.join(root, 'refcats'))

    def testObsPackage(self):
        """Verify that a Dataset knows its associated obs package and camera.
        """
        self.assertEqual(self._testbed.obsPackage, DatasetTestSuite.obsPackage)
        self.assertEqual(self._testbed.camera, DatasetTestSuite.camera)
        self.assertEqual(self._testbed.instrument.getName(),
                         DatasetTestSuite.gen3Camera)

    def testOutput(self):
        """Verify that a Dataset can create an output repository as desired.
        """
        testDir = tempfile.mkdtemp()
        outputDir = os.path.join(testDir, 'goodOut')
        calibRepoDir = outputDir

        try:
            self._testbed.makeCompatibleRepo(outputDir, calibRepoDir)
            self.assertTrue(os.path.exists(outputDir),
                            'Output directory must exist.')
            self.assertTrue(os.listdir(outputDir),
                            'Output directory must not be empty.')
            self.assertTrue(
                os.path.exists(os.path.join(outputDir, '_mapper')) or
                os.path.exists(os.path.join(outputDir, 'repositoryCfg.yaml')),
                'Output directory must have a _mapper or repositoryCfg.yaml file.'
            )
        finally:
            if os.path.exists(testDir):
                shutil.rmtree(testDir, ignore_errors=True)

    def testExistingOutput(self):
        """Verify that a Dataset can handle pre-existing output directories,
        including directories made by external code.
        """
        testDir = tempfile.mkdtemp()
        outputDir = os.path.join(testDir, 'badOut')
        calibRepoDir = outputDir

        try:
            os.makedirs(outputDir)
            output = os.path.join(outputDir, 'foo.txt')
            with open(output, 'w') as dummy:
                dummy.write('This is a test!')

            self._testbed.makeCompatibleRepo(outputDir, calibRepoDir)
            self.assertTrue(os.path.exists(outputDir),
                            'Output directory must exist.')
            self.assertTrue(os.listdir(outputDir),
                            'Output directory must not be empty.')
            self.assertTrue(
                os.path.exists(os.path.join(outputDir, '_mapper')) or
                os.path.exists(os.path.join(outputDir, 'repositoryCfg.yaml')),
                'Output directory must have a _mapper or repositoryCfg.yaml file.'
            )
        finally:
            if os.path.exists(testDir):
                shutil.rmtree(testDir, ignore_errors=True)

    def _checkOutputGen3(self, repo):
        """Perform various integrity checks on a repository.

        Parameters
        ----------
        repo : `str`
            The repository to test. Currently only filesystem repositories
            are supported.
        """
        self.assertTrue(os.path.exists(repo), 'Output directory must exist.')
        # Call to Butler will fail if repo is corrupted
        butler = dafButler.Butler(repo)
        self.assertIn("LSSTCam-imSim/calib",
                      butler.registry.queryCollections())

    def testOutputGen3(self):
        """Verify that a Dataset can create an output repository as desired.
        """
        testDir = tempfile.mkdtemp()
        outputDir = os.path.join(testDir, 'goodOut')

        try:
            self._testbed.makeCompatibleRepoGen3(outputDir)
            self._checkOutputGen3(outputDir)
        finally:
            if os.path.exists(testDir):
                shutil.rmtree(testDir, ignore_errors=True)

    def testExistingOutputGen3(self):
        """Verify that a Dataset can handle pre-existing output directories,
        including directories made by external code.
        """
        testDir = tempfile.mkdtemp()
        outputDir = os.path.join(testDir, 'badOut')

        try:
            self._testbed.makeCompatibleRepoGen3(outputDir)
            self._checkOutputGen3(outputDir)
            self._testbed.makeCompatibleRepoGen3(outputDir)
            self._checkOutputGen3(outputDir)
        finally:
            if os.path.exists(testDir):
                shutil.rmtree(testDir, ignore_errors=True)