Ejemplo n.º 1
0
 def test_throws_exception_on_start_when_path_is_wrong_type(self):
     db = None
     with self.assertRaises(pmemkv.Error):
         db = Database(self.engine, {"path":1234, "size": 1073741824})
     with self.assertRaises(pmemkv.ConfigTypeError):
         db = Database(self.engine, {"path":1234, "size": 1073741824})
     self.assertEqual(db, None)
Ejemplo n.º 2
0
 def test_get_same_element_two_times(self):
     db = Database(self.engine, self.config)
     db['dict_test'] = "123"
     val1 = db['dict_test']
     val2 = db['dict_test']
     self.assertEqual(val1, val2)
     db.stop()
Ejemplo n.º 3
0
 def test_dict_get_item(self):
     db = Database(self.engine, self.config)
     key = "dict_test"
     db[key] = "123"
     temp = db[key]
     self.assertEqual(temp, "123")
     db.stop()
Ejemplo n.º 4
0
 def test_delete_same_element_two_times(self):
     db = Database(self.engine, self.config)
     db['dict_test'] = "123"
     del db['dict_test']
     with self.assertRaises(KeyError):
         del db['dict_test']
     db.stop()
Ejemplo n.º 5
0
 def test_dict_item_del(self):
     db = Database(self.engine, self.config)
     db['dict_test'] = "123"
     del db['dict_test']
     with self.assertRaises(KeyError):
         temp = db['dict_test']
     db.stop()
Ejemplo n.º 6
0
 def test_throws_exception_on_start_when_engine_is_invalid(self):
     db = None
     with self.assertRaises(pmemkv.Error):
         db = Database(r"nope.nope", self.config)
     with self.assertRaises(pmemkv.WrongEngineName):
         db = Database(r"nope.nope", self.config)
     self.assertEqual(db, None)
Ejemplo n.º 7
0
 def test_throws_exception_on_start_when_config_is_empty(self):
     db = None
     with self.assertRaises(pmemkv.Error):
         db = Database(self.engine, {})
     """ InvalidArgument is for consistency with pmemkv interface
     reference in pmemkv test: basic_tests/PmemkvCApiTest.NullConfig
     """
     with self.assertRaises(pmemkv.InvalidArgument):
         db = Database(self.engine, {})
Ejemplo n.º 8
0
 def test_puts_basic_values(self):
     db = Database(self.engine, self.config)
     self.assertFalse(db.exists(r"key1"))
     db.put(r"key1", r"value1")
     self.assertTrue(db.exists(r"key1"))
     self.assertEqual(db.get_string(r"key1"), r"value1")
     db.stop()
Ejemplo n.º 9
0
 def test_puts_utf8_key(self):
     db = Database(self.engine, self.config)
     val = r"to remember, note, record"
     db.put(r"记", val)
     self.assertTrue(db.exists(r"记"))
     self.assertEqual(db.get_string(r"记"), val)
     db.stop()
Ejemplo n.º 10
0
 def test_stops_engine_multiple_times(self):
     db = Database(self.engine, self.config)
     self.assertFalse(db.stopped)
     db.stop()
     self.assertTrue(db.stopped)
     db.stop()
     self.assertTrue(db.stopped)
     db.stop()
     self.assertTrue(db.stopped)
Ejemplo n.º 11
0
 def test_databases_interference(self):
     db1 = Database(self.engine, self.config)
     db2 = Database(self.engine, self.config)
     db1['1'] = "A"
     db2['2'] = "B"
     with self.assertRaises(KeyError):
         temp = db2['1']
     db1.stop()
     db2.stop()
Ejemplo n.º 12
0
 def test_throws_exception_on_start_when_config_is_empty(self):
     db = None
     try:
         db = Database(self.engine, "{}")
         self.assertFalse(True)
     except ValueError as ve:
         self.assertEqual(ve.args[0], "pmemkv_open failed")
     self.assertEqual(db, None)
Ejemplo n.º 13
0
    def test_throws_exception_in_context_manager(self):
        class TestException(Exception):
            pass

        def callback(val):
            raise TestException()

        key = "dict_test"
        val = "123"
        with Database(self.engine, self.config) as db:
            db[key] = val
            with self.assertRaises(TestException):
                db.get(key, callback)
        with self.assertRaises(TestException):
            with Database(self.engine, self.config) as db:
                db[key] = val
                db.get(key, callback)
Ejemplo n.º 14
0
 def test_throws_exception_on_start_when_engine_is_invalid(self):
     db = None
     try:
         db = Database(r"nope.nope", self.config)
         self.assertFalse(True)
     except ValueError as ve:
         self.assertEqual(ve.args[0], "pmemkv_open failed")
     self.assertEqual(db, None)
Ejemplo n.º 15
0
 def test_throws_exception_on_start_when_path_is_wrong_type(self):
     db = None
     try:
         db = Database(self.engine, '{"path":1234}')
         self.assertFalse(True)
     except ValueError as ve:
         self.assertEqual(ve.args[0], "pmemkv_open failed")
     self.assertEqual(db, None)
Ejemplo n.º 16
0
    def test_get_lambda_in_callback(self):
        key = "dict_test"
        val = "123"
        db = Database(self.engine, self.config)
        db[key] = val

        db.get(key, lambda v, k=key: self.assertEqual(memoryview(v).tobytes(),
                                             "123".encode('utf-8')))
        db.get(key, lambda v, k=key: self.assertEqual(k, "dict_test"))
        db.stop()
Ejemplo n.º 17
0
 def test_get_out_of_bound_access_in_callback(self):
     key = "dict_test"
     val = "123"
     db = Database(self.engine, self.config)
     db[key] = val
     with self.assertRaises(IndexError):
         db.get(key, lambda v: memoryview(v).tobytes()[4])
     with self.assertRaises(TypeError):
         db.get(key, lambda v: memoryview(v)[1])
     db.stop()
Ejemplo n.º 18
0
 def test_exception_on_start_when_config_is_malformed(self):
     db = None
     try:
         db = Database(self.engine, "{")
         self.assertFalse(True)
     except ValueError as ve:
         self.assertEqual(
             ve.args[0], "Creating a pmemkv config from JSON string failed")
     self.assertEqual(db, None)
Ejemplo n.º 19
0
    def test_uses_get_keys(self):
        db = Database(self.engine, self.config)
        db.put(r"1", r"one")
        db.put(r"2", r"two")

        self.formatter = r"<{}>,"

        self.key = r""
        db.get_keys(self.all_and_each)
        self.assertEqual(self.key_and_value, r"<1>,<2>,")

        db.stop()
Ejemplo n.º 20
0
 def test_throws_exception_on_start_when_path_is_invalid(self):
     db = None
     with self.assertRaises(pmemkv.Error):
         db = Database(self.engine, {"path":"/tmp/123/234/345/456/567/678/nope.nope", "size": 1073741824})
     """ This part need to be commented out due to pmemkv issue
         https://github.com/pmem/pmemkv/issues/565
     with self.assertRaises(pmemkv.InvalidArgument):
         db = Database(self.engine, {"path":"/tmp/123/234/345/456/567/678/nope.nope", "size": 1073741824})
     """
     self.assertEqual(db, None)
Ejemplo n.º 21
0
 def test_throws_exception_on_start_when_path_is_invalid(self):
     db = None
     try:
         db = Database(
             self.engine,
             "{\"path\":\"/tmp/123/234/345/456/567/678/nope.nope\"}")
         self.assertFalse(True)
     except ValueError as ve:
         self.assertEqual(ve.args[0], "pmemkv_open failed")
     self.assertEqual(db, None)
Ejemplo n.º 22
0
 def test_get_exception_in_callback(self):
     class LocalException(Exception):
         pass
     def callback(key):
         raise LocalException('TestException')
     db = Database(self.engine, self.config)
     key = "dict_test"
     val = "123"
     db[key] = val
     try:
         db.get(key, callback)
     except LocalException as e:
         db.stop()
         self.assertEqual(type(e).__name__ , "LocalException")
     db.stop()
Ejemplo n.º 23
0
 def test_get_assert_in_callback(self):
     def callback (key):
         self.assertEqual(memoryview(key).tobytes(), "123".encode('utf-8'))
     key = "dict_test"
     val = "123"
     db = Database(self.engine, self.config)
     db[key] = val
     db.get(key, callback)
     db.stop()
Ejemplo n.º 24
0
 def test_stop_engine_multiple_times(self):
     """ In case of failure, this test cause segmentation fault.
     As there is no way to catch segmentation fault in python, just do not
     assert anything.
     """
     db = Database(self.engine, self.config)
     db.stop()
     db.stop()
     db.stop()
Ejemplo n.º 25
0
    def test_get_with_value_indexing(self):
        key = "dict_test"
        val = "123"
        db = Database(self.engine, self.config)
        db[key] = val

        db.get(key,
               lambda v, k=key: self.assertEqual(
                   (memoryview(v)[0:2]).tobytes(), "12".encode('utf-8')))
        db.stop()
Ejemplo n.º 26
0
    def test_get_copy_to_class_member(self):
        class Callback:
            def __init__(self):
                self.result = None

            def __call__(self, key):
                self.result = bytes(key)

        callback = Callback()
        db = Database(self.engine, self.config)
        key = "dict_test"
        val = "123"
        db[key] = val
        db.get(key, callback)
        db.remove(key)
        db[key] = "Some other string"
        self.assertEqual(callback.result.decode(), val)
        db.stop()
Ejemplo n.º 27
0
 def test_get_AttributeError_in_callback(self):
     def callback (key):
         self.assertEqual(key.NonexistentMethod(), "123".encode('utf-8'))
     key = "dict_test"
     val = "123"
     db = Database(self.engine, self.config)
     db[key] = val
     try:
         db.get(key, callback)
     except Exception as e:
         assert type(e).__name__ == "AttributeError"
     db.stop()
Ejemplo n.º 28
0
 def test_get_copy_to_class_member(self):
     class Callback:
         def __init__(self):
             self.result = None
         def __call__(self, key):
             self.result = memoryview(key)
     callback = Callback()
     db = Database(self.engine, self.config)
     key = "dict_test"
     val = "123"
     db[key] = val
     db.get(key, callback)
     self.assertEqual(callback.result.tobytes(), "123".encode('utf-8'))
     db.stop()
Ejemplo n.º 29
0
 def test_call_del_inside_callback(self):
     def callback(val):
         del(val)
         # check if buffer protocol object was properly removed
         with self.assertRaises(UnboundLocalError):
             del(val)
     key = "dict_test"
     val = "123"
     db = Database(self.engine, self.config)
     db[key] = val
     db.get(key, callback)
     # check if key is accessable
     self.assertEqual(db[key], val)
     db.stop()
Ejemplo n.º 30
0
 def test_gets_missing_key(self):
     db = Database(self.engine, self.config)
     self.assertFalse(db.exists(r"key1"))
     with self.assertRaises(KeyError):
         db.get_string(r"key1")
     db.stop()