Beispiel #1
0
class TestDatasetDB(unittest.TestCase):
    def setUp(self):
        # empty dataset persistance file
        self.persist_file = tempfile.NamedTemporaryFile(mode="w+")
        print("{}", file=self.persist_file, flush=True)

        self.ddb = DatasetDB(self.persist_file.name)

        self.ddb.set(KEY1, DATA, persist=True)
        self.ddb.set(KEY2, DATA, persist=True, hdf5_options=dict(compression=COMP))
        self.ddb.set(KEY3, DATA, hdf5_options=dict(shuffle=True))

        self.save_ddb_to_disk()

    def save_ddb_to_disk(self):
        self.ddb.save()
        self.persist_file.flush()

    def load_ddb_from_disk(self):
        return pyon.load_file(self.persist_file.name)

    def test_persist_format(self):
        data = pyon.load_file(self.persist_file.name)

        for key in [KEY1, KEY2]:
            self.assertTrue(data[key]["persist"])
            self.assertEqual(data[key]["value"], DATA)

        self.assertEqual(data[KEY2]["hdf5_options"]["compression"], COMP)
        self.assertEqual(data[KEY1]["hdf5_options"], dict())

    def test_only_persist_marked_datasets(self):
        data = self.load_ddb_from_disk()

        with self.assertRaises(KeyError):
            data[KEY3]

    def test_memory_format(self):
        ds = self.ddb.get(KEY2)
        self.assertTrue(ds["persist"])
        self.assertEqual(ds["value"], DATA)
        self.assertEqual(ds["hdf5_options"]["compression"], COMP)

        ds = self.ddb.get(KEY3)
        self.assertFalse(ds["persist"])
        self.assertEqual(ds["value"], DATA)
        self.assertTrue(ds["hdf5_options"]["shuffle"])

    def test_delete(self):
        self.ddb.delete(KEY1)
        self.save_ddb_to_disk()

        data = self.load_ddb_from_disk()

        with self.assertRaises(KeyError):
            data[KEY1]

        self.assertTrue(data[KEY2]["persist"])

    def test_update(self):
        self.assertFalse(self.ddb.get(KEY3)["persist"])

        mod = {
            "action": "setitem",
            "path": [KEY3],
            "key": "persist",
            "value": True,
        }

        self.ddb.update(mod)
        self.assertTrue(self.ddb.get(KEY3)["persist"])

    def test_update_hdf5_options(self):
        with self.assertRaises(KeyError):
            self.ddb.get(KEY1)["hdf5_options"]["shuffle"]

        mod = {
            "action": "setitem",
            "path": [KEY1, "hdf5_options"],
            "key": "shuffle",
            "value": False,
        }

        self.ddb.update(mod)
        self.assertFalse(self.ddb.get(KEY1)["hdf5_options"]["shuffle"])

    def test_reset_copies_persist(self):
        self.assertTrue(self.ddb.get(KEY1)["persist"])
        self.ddb.set(KEY1, DATA)
        self.assertTrue(self.ddb.get(KEY1)["persist"])

        self.assertFalse(self.ddb.get(KEY3)["persist"])
        self.ddb.set(KEY3, DATA)
        self.assertFalse(self.ddb.get(KEY3)["persist"])

        self.ddb.set(KEY3, DATA, persist=True)
        self.assertTrue(self.ddb.get(KEY3)["persist"])