def setUp(self): try: os.makedirs(_TEST_DIR) except OSError as e: if e.errno != errno.EEXIST: raise try: os.unlink(_TEST_STORE_FILE) except OSError as e: if e.errno != errno.ENOENT: raise self.store = JsonStore(_TEST_STORE_NAME, _TEST_DIR)
def get_queue(self): from pdagent.pdqueue import PDQueue from pdagent.jsonstore import JsonStore backoff_db = JsonStore("backoff", self.default_dirs["db_dir"]) backoff_interval = self.main_config["backoff_interval_secs"] retry_limit_for_possible_errors = \ self.main_config["retry_limit_for_possible_errors"] counter_db = JsonStore("aggregates", self.default_dirs["db_dir"]) return PDQueue( lock_class=FileLock, queue_dir=self.default_dirs["outqueue_dir"], time_calc=time, event_size_max_bytes=4 * 1024 * 1024, # 4MB limit. backoff_db=backoff_db, backoff_interval=backoff_interval, retry_limit_for_possible_errors=retry_limit_for_possible_errors, counter_db=counter_db)
def test_write_and_read(self): j = { "foo": "bar", "baz": 1 } self.store.set(j) self.assertEqual(self.store.get(), j) # ensure that json is persisted. self.assertTrue(os.path.isfile(_TEST_STORE_FILE)) fp = None try: fp = open(_TEST_STORE_FILE, "r") self.assertEqual(json.load(fp), j) finally: if fp: fp.close() # ensure that a different store can pick up persisted content. self.assertEqual(JsonStore(_TEST_STORE_NAME, _TEST_DIR).get(), j)
class JsonStoreTest(unittest.TestCase): def setUp(self): try: os.makedirs(_TEST_DIR) except OSError as e: if e.errno != errno.EEXIST: raise try: os.unlink(_TEST_STORE_FILE) except OSError as e: if e.errno != errno.ENOENT: raise self.store = JsonStore(_TEST_STORE_NAME, _TEST_DIR) def test_first_read(self): j = self.store.get() self.assertTrue(j is None) def test_write_and_read(self): j = { "foo": "bar", "baz": 1 } self.store.set(j) self.assertEqual(self.store.get(), j) # ensure that json is persisted. self.assertTrue(os.path.isfile(_TEST_STORE_FILE)) fp = None try: fp = open(_TEST_STORE_FILE, "r") self.assertEqual(json.load(fp), j) finally: if fp: fp.close() # ensure that a different store can pick up persisted content. self.assertEqual(JsonStore(_TEST_STORE_NAME, _TEST_DIR).get(), j) def test_failed_write(self): j = { "foo": "bar", "baz": True } self.store.set(j) # successful write. # now make file not writable, and check that set fails. try: os.chmod(_TEST_DIR, stat.S_IREAD | stat.S_IEXEC) k = dict(j) k["baz"] = False self.assertRaises(IOError, self.store.set, k) # old value is retained in this case. self.assertEqual(self.store.get(), j) finally: os.chmod( _TEST_DIR, stat.S_IREAD | stat.S_IWRITE | stat.S_IEXEC) def test_bad_data(self): j = { "foo": "bar", "baz": True } self.store.set(j) # successful write. # now corrupt the persisted data. out = open(_TEST_STORE_FILE, "w") out.write("bad json!") out.close() # bad json => data is cleared. self.assertEqual(self.store.get(), None)