Example #1
0
class TestPageString(TestCase):
    def setUp(self):
        self.database = DB()
        self.storage = Storage(None, self.database)
        self.changeset = Changeset(self.database)
        self.changeset.add(DummyPage(self.database))  # fill page 0

    def test_encode_decode_single_page_index(self):
        word = randomword(100)
        page = StringPageIndex(self.database, word, total_length=len(word))
        page_copy = StringPageIndex(self.database)
        page_copy.unserialize(page.serialize())
        self.assertEqual((page.total_length, page.next_page, page.data),
                (page_copy.total_length, page_copy.next_page, page_copy.data))

    def test_encode_decode_single_page_noindex(self):
        word = randomword(100)
        page = StringPage(self.database, word)
        page_copy = StringPage(self.database)
        page_copy.unserialize(page.serialize())
        self.assertEqual((page.next_page, page.data),
                (page_copy.next_page, page_copy.data))

    def test_create_single_page(self):
        word = randomword(100)
        page_number = StringPageIndex.create(self.database, self.changeset,
                word)
        self.changeset.close()
        page = StringPageIndex(self.database)
        page.unserialize(self.storage.read(page_number))
        self.assertEqual((page.total_length, page.next_page, page.data),
                (100, 0, word))

    def test_create_multi_page(self):
        length = 2000
        word = randomword(length)
        page_number = StringPageIndex.create(self.database, self.changeset,
                word)
        self.changeset.close()
        page = StringPageIndex(self.database)
        page.unserialize(self.storage.read(page_number))
        self.assertEqual(page.total_length, length)

        data = page.data
        next_page = page.next_page
        while next_page > 0:
            page = StringPage(self.database)
            page.unserialize(self.storage.read(next_page))
            data += page.data
            next_page = page.next_page
        self.assertEqual(len(data), len(word))
        self.assertEqual(data, word)
Example #2
0
class TestChangeset(TestCase):
    def setUp(self):
        self.database = DB()
        self.storage = Storage(None, self.database)
        self.changeset = Changeset(self.database)

    def test_get_page(self):
        data = {}
        for i in range(0, 2):
            word = randomword(512)
            self.storage.write(((i, word), ))
            data[i] = word

        for i in range(0, 2):
            page = self.changeset.read(i, DummyPage)
            self.assertEqual(page.data, data[i])

    def test_get_page_reversed(self):
        data = {}
        for i in range(0, 2):
            word = randomword(512)
            self.storage.write(((i, word), ))
            data[i] = word

        self.changeset.close()

        for i in reversed(range(0, 2)):
            page = self.changeset.read(i, DummyPage)
            self.assertEqual(page.data, data[i])

    def test_get_page_twice(self):
        data = {}
        for i in range(0, 2):
            word = randomword(512)
            self.storage.write(((i, word), ))
            data[i] = word

        self.changeset.close()

        pages = []
        for i in range(0, 2):
            pages.append(self.changeset.read(i, DummyPage))

        for i in range(0, 2):
            self.assertIs(self.changeset.read(i, DummyPage), pages[i])

    def test_write_page(self):
        data = {}
        for i in range(0, 2):
            word = randomword(512)
            self.changeset.write(i, DummyPage(self.database, word))
            data[i] = word

        self.changeset.close()

        for i in range(0, 2):
            page = self.storage.read(i)
            self.assertEqual(page, data[i])

    def test_add(self):
        data = {}
        for i in range(1, 2):
            word = randomword(512)
            self.changeset.add(DummyPage(self.database, word))
            data[i] = word

        self.changeset.close()

        for i in range(1, 2):
            page = self.storage.read(i)
            self.assertEqual(page, data[i])

    def test_add_db_freelist1(self):
        self.do_test_add_db_freelist(1)

    def test_add_db_freelist2(self):
        self.do_test_add_db_freelist(1)

    def test_add_db_freelist3(self):
        self.do_test_add_db_freelist(1)

    def do_test_add_db_freelist(self, freelist_key):
            data = {}
            for i in range(0, 3):
                word = randomword(512)
                self.changeset.add(DummyPage(self.database, word))
                data[i] = word

            self.database.freelist_item = freelist_key
            word = randomword(512)
            self.changeset.add(DummyPage(self.database, word))
            data[freelist_key] = word

            self.changeset.close()

            for i in range(1, 3):
                page = self.storage.read(i)
                self.assertEqual(page, data[i])

    def test_add_changeset_freelist1(self):
        self.do_test_add_changeset_freelist(1)

    def test_add_changeset_freelist2(self):
        self.do_test_add_changeset_freelist(2)

    def do_test_add_changeset_freelist(self, freelist_key):
        data = {}
        for i in range(0, 3):
            word = randomword(512)
            self.changeset.add(DummyPage(self.database, word))
            data[i] = word

        self.changeset.freelist_item = freelist_key
        word = randomword(512)
        self.changeset.add(DummyPage(self.database, word))
        data[freelist_key] = word

        self.changeset.close()

        for i in range(1, 3):
            page = self.storage.read(i)
            self.assertEqual(page, data[i])