Esempio n. 1
0
    def test_get_broken(self):
        print
        print "test get broken data"
        self.backend1.start()

        self._gen_data("some value", prefix='test1', loop_num=1024, sector=0)
        tempered_key = None
        for key in self.backend1.generate_key(prefix="test2", count=1, sector=0):
            tempered_key = key
            store = MCStore(self.backend1_addr)
            store.set(tempered_key, string_large)
            store.close()
        self._gen_data("other value", prefix='test3', loop_num=1024, sector=0)
        self.assertEqual(self.backend1.item_count(), 2049)

        # flush hint
        self.backend1.stop()
        self.backend1.start()

        #make sure we produce a crc error
        temper_with_key_value(self.backend1.db_home, self.backend1.db_depth, tempered_key, delete_hint=False)
        self.assertEqual(self.backend1.item_count(), 2049)
        print "when beansdb encounter broken data when reading, it should delete it from htree"
        store = MCStore(self.backend1_addr)
        store.get(tempered_key) is None
        store.close()
        self.assertEqual(self.backend1.item_count(), 2048)
        self._check_data("some value", prefix="test1", loop_num=1024, sector=0)
        self._check_data("other value", prefix="test3", loop_num=1024, sector=0)
        self.backend1.stop()
Esempio n. 2
0
 def test_special_key(self):
     self.backend1.start()
     kvs = [('a'*250, 1), ("a", range(1000))]
     store = MCStore(self.backend1_addr)
     for k,v in kvs:
         assert(store.set(k, v))
         assert(v == store.get(k))
     self.backend1.stop()
     self.backend1.start()
     store = MCStore(self.backend1_addr)
     for (k,v) in kvs:
         assert(v == store.get(k))
Esempio n. 3
0
 def test_special_key(self):
     self.backend1.start()
     kvs = [('a' * 250, 1), ("a", range(1000))]
     store = MCStore(self.backend1_addr)
     for k, v in kvs:
         assert (store.set(k, v))
         assert (v == store.get(k))
     self.backend1.stop()
     self.backend1.start()
     store = MCStore(self.backend1_addr)
     for (k, v) in kvs:
         assert (v == store.get(k))
Esempio n. 4
0
 def test_set_verion(self):
     self.backend1.start()
     store = MCStore(self.backend1_addr)
     key = "key1"
     store.set(key, "aaa")
     self.assertEqual(store.get(key), "aaa")
     self.assertEqual(self._get_version(store, key), 1)
     store.set_raw(key, "bbb", rev=3)
     self.assertEqual(self._get_version(store, key), 3)
     store.set_raw(key, "bbb", rev=4)
     self.assertEqual(self._get_version(store, key), 4) # current behavior will raise version
     store.set_raw(key, "ccc", rev=2)
     self.assertEqual(store.get(key), "bbb")
     self.assertEqual(self._get_version(store, key), 4) # current behavior will raise version
Esempio n. 5
0
 def test_set_verion(self):
     self.backend1.start()
     store = MCStore(self.backend1_addr)
     key = "key1"
     store.set(key, "aaa")
     self.append(256)
     self.assertEqual(store.get(key), "aaa")
     self.assertEqual(self._get_meta(store, key), (1, 0, self.last_pos))
     store.set_raw(key, "bbb", rev=3)
     self.append(256)
     self.assertEqual(self._get_meta(store, key), (3, 0, self.last_pos))
     store.set_raw(key, "bbb", rev=4)
     self.assertEqual(self._get_meta(store, key), (4, 0, self.last_pos)) # current behavior will raise version
     store.set_raw(key, "ccc", rev=2)
     self.assertEqual(store.get(key), "bbb")
     self.assertEqual(self._get_meta(store, key), (4, 0, self.last_pos)) # current behavior will raise version
Esempio n. 6
0
 def _check_data(self, data, prefix='', loop_num=10 * 1024):
     store = MCStore(self.backend1_addr)
     for key in self.backend1.generate_key(prefix=prefix, count=loop_num):
         try:
             self.assertEqual(store.get(key), data)
         except Exception, e:
             return self.fail("fail to check key %s: %s" % (key, str(e)))
Esempio n. 7
0
 def _check_data(self, data, prefix='', loop_num=10 * 1024):
     store = MCStore(self.backend1_addr)
     for key in self.backend1.generate_key(prefix=prefix, count=loop_num):
         try:
             self.assertEqual(store.get(key), data)
         except Exception, e:
             return self.fail("fail to check key %s: %s" % (key, str(e)))
Esempio n. 8
0
 def test_delete_version(self):
     self.backend1.start()
     store = MCStore(self.backend1_addr)
     key = "key2"
     store.set(key, "aaa")
     self.assertEqual(self._get_version(store, key), 1)
     store.delete(key)
     self.assertEqual(self._get_version(store, key), None)
     store.set(key, "bbb")
     self.assertEqual(store.get(key), 'bbb')
     self.assertEqual(self._get_version(store, key), 3)
Esempio n. 9
0
 def test_set_verion(self):
     self.backend1.start()
     store = MCStore(self.backend1_addr)
     key = "key1"
     store.set(key, "aaa")
     self.append(256)
     self.assertEqual(store.get(key), "aaa")
     self.assertEqual(self._get_meta(store, key), (1, 0, self.last_pos))
     store.set_raw(key, "bbb", rev=3)
     self.append(256)
     self.assertEqual(self._get_meta(store, key), (3, 0, self.last_pos))
     store.set_raw(key, "bbb", rev=4)
     self.assertEqual(
         self._get_meta(store, key),
         (4, 0, self.last_pos))  # current behavior will raise version
     store.set_raw(key, "ccc", rev=2)
     self.assertEqual(store.get(key), "bbb")
     self.assertEqual(
         self._get_meta(store, key),
         (4, 0, self.last_pos))  # current behavior will raise version
Esempio n. 10
0
    def _test_compress(self, overflow):
        self.backend1.start()
        value = string.letters
        store = MCStore(self.backend1_addr)
        compressed_value = zlib.compress(value, 0)
        key = 'k' * (256 - len(compressed_value) - 24 + (1 if overflow else 0))

        value_easy_compress = 'v' * len(compressed_value)

        assert (store.set(key, value_easy_compress))
        assert (store.get(key) == value_easy_compress)
        self.append(256)
        self.assertEqual(self._get_meta(store, key), (1, 0, self.last_pos))

        assert (store.set_raw(key, compressed_value, flag=0x00000010))
        assert (store.get(key) == value)
        self.append(512 if overflow else 256)
        self.assertEqual(self._get_meta(store, key), (2, 0, self.last_pos))

        assert (store.set(key, 'aaa'))
        self.append(256)
        self.assertEqual(self._get_meta(store, key), (3, 0, self.last_pos))
Esempio n. 11
0
    def _test_compress(self, overflow):
        self.backend1.start()
        value =  string.letters
        store = MCStore(self.backend1_addr)
        compressed_value = zlib.compress(value, 0)
        key = 'k' * (256 - len(compressed_value) - 24 + (1 if overflow else 0))

        value_easy_compress = 'v'* len(compressed_value)

        assert(store.set(key, value_easy_compress))
        assert(store.get(key) == value_easy_compress)
        self.append(256)
        self.assertEqual(self._get_meta(store, key), (1, 0, self.last_pos))

        assert(store.set_raw(key, compressed_value, flag = 0x00000010))
        assert(store.get(key) == value)
        self.append(512 if overflow else 256)
        self.assertEqual(self._get_meta(store, key), (2, 0, self.last_pos))

        assert(store.set(key, 'aaa'))
        self.append(256)
        self.assertEqual(self._get_meta(store, key), (3, 0, self.last_pos))
Esempio n. 12
0
    def test_get_broken(self):
        print
        print "test get broken data"
        self.backend1.start()

        self._gen_data("some value", prefix='test1', loop_num=1024, sector=0)
        tempered_key = None
        for key in self.backend1.generate_key(prefix="test2",
                                              count=1,
                                              sector=0):
            tempered_key = key
            store = MCStore(self.backend1_addr)
            store.set(tempered_key, string_large)
            store.close()
        self._gen_data("other value", prefix='test3', loop_num=1024, sector=0)
        self.assertEqual(self.backend1.item_count(), 2049)

        # flush hint
        self.backend1.stop()
        self.backend1.start()

        #make sure we produce a crc error
        temper_with_key_value(self.backend1.db_home,
                              self.backend1.db_depth,
                              tempered_key,
                              delete_hint=False)
        self.assertEqual(self.backend1.item_count(), 2049)
        print "when beansdb encounter broken data when reading, it should delete it from htree"
        store = MCStore(self.backend1_addr)
        store.get(tempered_key) is None
        store.close()
        self.assertEqual(self.backend1.item_count(), 2048)
        self._check_data("some value", prefix="test1", loop_num=1024, sector=0)
        self._check_data("other value",
                         prefix="test3",
                         loop_num=1024,
                         sector=0)
        self.backend1.stop()
Esempio n. 13
0
    def test_gen_data(self):
        self.backend1.start()
        store = MCStore(self.backend1_addr)
        self.assert_(store.set("largekey", string_large))
        self.assert_(store.get("largekey") == string_large)

        loop_num = 16 * 1024
        for i in xrange(loop_num):
            key = "test%s" % (i)
            if not store.set(key, 1):
                print "failed to set %s" % (key)
                return self.fail("fail")
            if not store.set(key, 2):
                print "failed to set %s" % (key)
                return self.fail("fail")
        print "done set"
        for i in xrange(loop_num):
            key = "test%s" % (i)
            try:
                self.assertEqual(store.get(key), 2)
            except Exception, e:
                print key, "error", e
                return self.fail("fail")
Esempio n. 14
0
    def test_big_value(self):
        self.backend1.start()
        store = MCStore(self.backend1_addr)

        key = "largekey"
        size = 10 * 1024 * 1024
        rsize = (((size + len(key) + 24) >> 8) + 1) << 8
        string_large = random_string(size)
        assert(store.set(key, string_large))
        assert(store.get(key) == string_large)
        self.append(rsize)
        self.assertEqual(self._get_meta(store, key), (1, 0, self.last_pos))

        assert(store.set(key, 'aaa'))
        self.append(256)
        self.assertEqual(self._get_meta(store, key), (2, 0, self.last_pos))
Esempio n. 15
0
    def test_big_value(self):
        self.backend1.start()
        store = MCStore(self.backend1_addr)

        key = "largekey"
        size = 10 * 1024 * 1024
        rsize = (((size + len(key) + 24) >> 8) + 1) << 8
        string_large = random_string(size)
        assert (store.set(key, string_large))
        assert (store.get(key) == string_large)
        self.append(rsize)
        self.assertEqual(self._get_meta(store, key), (1, 0, self.last_pos))

        assert (store.set(key, 'aaa'))
        self.append(256)
        self.assertEqual(self._get_meta(store, key), (2, 0, self.last_pos))
Esempio n. 16
0
    def test_delete_version(self):
        self.backend1.start()
        store = MCStore(self.backend1_addr)
        key = "key1"

        store.set(key, "aaa")
        self.append(256)
        self.assertEqual(self._get_meta(store, key), (1, 0, self.last_pos))

        store.delete(key)
        self.append(256)
        self.assertEqual(self._get_meta(store, key), (-2, 0, self.last_pos))

        store.set(key, "bbb")
        self.append(256)
        self.assertEqual(store.get(key), 'bbb')
        self.assertEqual(self._get_meta(store, key), (3, 0, self.last_pos))
Esempio n. 17
0
    def test_delete_version(self):
        self.backend1.start()
        store = MCStore(self.backend1_addr)
        key = "key1"

        store.set(key, "aaa")
        self.append(256)
        self.assertEqual(self._get_meta(store, key), (1, 0, self.last_pos))

        store.delete(key)
        self.append(256)
        self.assertEqual(self._get_meta(store, key), (-2, 0, self.last_pos))

        store.set(key, "bbb")
        self.append(256)
        self.assertEqual(store.get(key), 'bbb')
        self.assertEqual(self._get_meta(store, key), (3, 0, self.last_pos))