示例#1
0
class TestChunksHelper(unittest.TestCase):
    def setUp(self):
        super(TestChunksHelper, self).setUp()

        self.dup_c1_1 = {
            "url": "http://127.0.0.1:6011/C1C1",
            "pos": "0", "size": 1048576,
            "hash": "2E47D13C3E2C47E0C537028AD637CCBF"}
        self.dup_c1_2 = {
            "url": "http://127.0.0.1:6010/C1C2",
            "pos": "0", "size": 1048576,
            "hash": "2E47D13C3E2C47E0C537028AD637CCBF"}
        self.dup_c2_1 = {
            "url": "http://127.0.0.1:6012/C2C1",
            "pos": "1", "size": 1048576,
            "hash": "045B70673D8271767D4D21BCDB040F6C"}
        self.dup_c2_2 = {
            "url": "http://127.0.0.1:6011/C2C2",
            "pos": "1", "size": 1048576,
            "hash": "045B70673D8271767D4D21BCDB040F6C"
        }
        self.dup_chunks_raw = [self.dup_c1_1, self.dup_c1_2,
                               self.dup_c2_1, self.dup_c2_2]
        self.dup_chunks = ChunksHelper(self.dup_chunks_raw)

        self.ec_c0_0 = {
            "url": "http://127.0.0.1:6017/C0_0",
            "pos": "0.0", "size": 1048576,
            "hash": "00000000000000000000000000000000"}
        self.ec_c0_1 = {
            "url": "http://127.0.0.1:6016/C0_1",
            "pos": "0.1", "size": 1048576,
            "hash": "00000000000000000000000000000000"}
        self.ec_c0_2 = {
            "url": "http://127.0.0.1:6011/C0_P",
            "pos": "0.2", "size": 1048576,
            "hash": "00000000000000000000000000000000"}
        self.ec_c1_0 = {
            "url": "http://127.0.0.1:6017/C1_0",
            "pos": "1.0", "size": 1048576,
            "hash": "00000000000000000000000000000000"}
        self.ec_c1_1 = {
            "url": "http://127.0.0.1:6016/C1_1",
            "pos": "1.1", "size": 1048576,
            "hash": "00000000000000000000000000000000"}
        self.ec_c1_2 = {
            "url": "http://127.0.0.1:6011/C1_P",
            "pos": "1.2", "size": 1048576,
            "hash": "00000000000000000000000000000000"}
        self.ec_chunks_raw = [self.ec_c0_0, self.ec_c0_1, self.ec_c0_2,
                              self.ec_c1_0, self.ec_c1_1, self.ec_c1_2]
        self.ec_chunks = ChunksHelper(self.ec_chunks_raw)

    def tearDown(self):
        super(TestChunksHelper, self).tearDown()

    def test_sort_dup(self):
        chunks = ChunksHelper([
            self.dup_c2_2, self.dup_c2_1,
            self.dup_c1_2, self.dup_c1_1
        ])
        self.assertEqual(chunks.raw(), [
            self.dup_c1_1, self.dup_c1_2,
            self.dup_c2_1, self.dup_c2_2
        ])

    def test_sort_ec(self):
        ec_chunks = ChunksHelper([
            self.ec_c1_2, self.ec_c1_1, self.ec_c1_0,
            self.ec_c0_2, self.ec_c0_1, self.ec_c0_0
        ])
        self.assertEqual(ec_chunks.raw(), [
            self.ec_c0_0, self.ec_c0_1, self.ec_c0_2,
            self.ec_c1_0, self.ec_c1_1, self.ec_c1_2
        ])

    def test_dup_search(self):
        res1 = self.dup_chunks.filter(pos="1")
        self.assertEqual(res1.raw(), [self.dup_c2_1, self.dup_c2_2])

        res2 = res1.filter(id="C2C2")
        self.assertEqual(res2.raw(), [self.dup_c2_2])

        res3 = self.dup_chunks.filter(pos="1", id="C2C2")
        self.assertEqual(res3.raw(), [self.dup_c2_2])

        res4 = res3.filter()
        self.assertEqual(res4.raw(), [self.dup_c2_2])

        res5 = res1.filter(id="UnKnOwN")
        self.assertEqual(res5.raw(), [])

    def test_dup_exclude(self):
        res1 = self.dup_chunks.exclude(id="C1C2")
        self.assertEqual(res1.raw(), [self.dup_c1_1, self.dup_c2_1,
                                      self.dup_c2_2])

        res2 = res1.exclude(pos="1")
        self.assertEqual(res2.raw(), [self.dup_c1_1])

        res3 = self.dup_chunks.exclude(pos="1", id="C1C2")
        self.assertEqual(res3.raw(), [self.dup_c1_1])

        res4 = res3.exclude()
        self.assertEqual(res4.raw(), [self.dup_c1_1])

    def test_ec_search(self):
        res1 = self.ec_chunks.filter(metapos=1)
        self.assertEqual(res1.raw(), [self.ec_c1_0, self.ec_c1_1,
                                      self.ec_c1_2])

        res3 = self.ec_chunks.filter(subpos=1)
        self.assertEqual(res3.raw(), [self.ec_c0_1, self.ec_c1_1])

    def test_ec_exclude(self):
        res2 = self.ec_chunks.exclude(metapos=1)
        self.assertEqual(res2.raw(), [self.ec_c0_0, self.ec_c0_1,
                                      self.ec_c0_2])

        res3 = self.ec_chunks.exclude(subpos=2)
        self.assertEqual(res3.raw(), [self.ec_c0_0, self.ec_c0_1,
                                      self.ec_c1_0, self.ec_c1_1])

    def test_one(self):
        res1 = self.dup_chunks.filter(id="C2C2").one()
        self.assertEqual(res1.raw(), self.dup_c2_2)

        res2 = self.dup_chunks.one()
        self.assertIsNone(res2)

        res3 = self.dup_chunks.filter(id="UnKnOwN").one()
        self.assertIsNone(res3)

    def test_all(self):
        res1 = self.dup_chunks.all()
        self.assertEqual(res1[0].raw(), self.dup_c1_1)
        self.assertEqual(res1[1].raw(), self.dup_c1_2)
        self.assertEqual(res1[2].raw(), self.dup_c2_1)
        self.assertEqual(res1[3].raw(), self.dup_c2_2)

        res2 = self.dup_chunks.filter(id="UnKnOwN").all()
        self.assertEqual(res2, [])

    def test_len(self):
        self.assertEqual(len(self.dup_chunks), 4)

    def test_iterator(self):
        chunk_iter = iter(self.dup_chunks)
        self.assertEqual(next(chunk_iter).raw(), self.dup_c1_1)
        self.assertEqual(next(chunk_iter).raw(), self.dup_c1_2)
        self.assertEqual(next(chunk_iter).raw(), self.dup_c2_1)
        self.assertEqual(next(chunk_iter).raw(), self.dup_c2_2)
        self.assertRaises(StopIteration, lambda: next(chunk_iter))

    def test_getitem(self):
        self.assertEqual(self.dup_chunks[0].raw(), self.dup_c1_1)
        self.assertEqual(self.dup_chunks[-1].raw(), self.dup_c2_2)
示例#2
0
class TestChunksHelper(unittest.TestCase):
    def setUp(self):
        super(TestChunksHelper, self).setUp()

        self.dup_c1_1 = {
            "url": "http://127.0.0.1:6011/C1C1",
            "pos": "0", "size": 1048576,
            "hash": "2E47D13C3E2C47E0C537028AD637CCBF"}
        self.dup_c1_2 = {
            "url": "http://127.0.0.1:6010/C1C2",
            "pos": "0", "size": 1048576,
            "hash": "2E47D13C3E2C47E0C537028AD637CCBF"}
        self.dup_c2_1 = {
            "url": "http://127.0.0.1:6012/C2C1",
            "pos": "1", "size": 1048576,
            "hash": "045B70673D8271767D4D21BCDB040F6C"}
        self.dup_c2_2 = {
            "url": "http://127.0.0.1:6011/C2C2",
            "pos": "1", "size": 1048576,
            "hash": "045B70673D8271767D4D21BCDB040F6C"
        }
        self.dup_chunks_raw = [self.dup_c1_1, self.dup_c1_2,
                               self.dup_c2_1, self.dup_c2_2]
        self.dup_chunks = ChunksHelper(self.dup_chunks_raw)

        self.ec_c0_0 = {
            "url": "http://127.0.0.1:6017/C0_0",
            "pos": "0.0", "size": 1048576,
            "hash": "00000000000000000000000000000000"}
        self.ec_c0_1 = {
            "url": "http://127.0.0.1:6016/C0_1",
            "pos": "0.1", "size": 1048576,
            "hash": "00000000000000000000000000000000"}
        self.ec_c0_2 = {
            "url": "http://127.0.0.1:6011/C0_P",
            "pos": "0.2", "size": 1048576,
            "hash": "00000000000000000000000000000000"}
        self.ec_c1_0 = {
            "url": "http://127.0.0.1:6017/C1_0",
            "pos": "1.0", "size": 1048576,
            "hash": "00000000000000000000000000000000"}
        self.ec_c1_1 = {
            "url": "http://127.0.0.1:6016/C1_1",
            "pos": "1.1", "size": 1048576,
            "hash": "00000000000000000000000000000000"}
        self.ec_c1_2 = {
            "url": "http://127.0.0.1:6011/C1_P",
            "pos": "1.2", "size": 1048576,
            "hash": "00000000000000000000000000000000"}
        self.ec_chunks_raw = [self.ec_c0_0, self.ec_c0_1, self.ec_c0_2,
                              self.ec_c1_0, self.ec_c1_1, self.ec_c1_2]
        self.ec_chunks = ChunksHelper(self.ec_chunks_raw)

    def tearDown(self):
        super(TestChunksHelper, self).tearDown()

    def test_sort_dup(self):
        chunks = ChunksHelper([
            self.dup_c2_2, self.dup_c2_1,
            self.dup_c1_2, self.dup_c1_1
        ])
        self.assertEqual(chunks.raw(), [
            self.dup_c1_1, self.dup_c1_2,
            self.dup_c2_1, self.dup_c2_2
        ])

    def test_sort_ec(self):
        ec_chunks = ChunksHelper([
            self.ec_c1_2, self.ec_c1_1, self.ec_c1_0,
            self.ec_c0_2, self.ec_c0_1, self.ec_c0_0
        ])
        self.assertEqual(ec_chunks.raw(), [
            self.ec_c0_0, self.ec_c0_1, self.ec_c0_2,
            self.ec_c1_0, self.ec_c1_1, self.ec_c1_2
        ])

    def test_dup_search(self):
        res1 = self.dup_chunks.filter(pos="1")
        self.assertEqual(res1.raw(), [self.dup_c2_1, self.dup_c2_2])

        res2 = res1.filter(id="C2C2")
        self.assertEqual(res2.raw(), [self.dup_c2_2])

        res3 = self.dup_chunks.filter(pos="1", id="C2C2")
        self.assertEqual(res3.raw(), [self.dup_c2_2])

        res4 = res3.filter()
        self.assertEqual(res4.raw(), [self.dup_c2_2])

        res5 = res1.filter(id="UnKnOwN")
        self.assertEqual(res5.raw(), [])

    def test_dup_exclude(self):
        res1 = self.dup_chunks.exclude(id="C1C2")
        self.assertEqual(res1.raw(), [self.dup_c1_1, self.dup_c2_1,
                                      self.dup_c2_2])

        res2 = res1.exclude(pos="1")
        self.assertEqual(res2.raw(), [self.dup_c1_1])

        res3 = self.dup_chunks.exclude(pos="1", id="C1C2")
        self.assertEqual(res3.raw(), [self.dup_c1_1])

        res4 = res3.exclude()
        self.assertEqual(res4.raw(), [self.dup_c1_1])

    def test_ec_search(self):
        res1 = self.ec_chunks.filter(metapos=1)
        self.assertEqual(res1.raw(), [self.ec_c1_0, self.ec_c1_1,
                                      self.ec_c1_2])

        res3 = self.ec_chunks.filter(subpos=1)
        self.assertEqual(res3.raw(), [self.ec_c0_1, self.ec_c1_1])

    def test_ec_exclude(self):
        res2 = self.ec_chunks.exclude(metapos=1)
        self.assertEqual(res2.raw(), [self.ec_c0_0, self.ec_c0_1,
                                      self.ec_c0_2])

        res3 = self.ec_chunks.exclude(subpos=2)
        self.assertEqual(res3.raw(), [self.ec_c0_0, self.ec_c0_1,
                                      self.ec_c1_0, self.ec_c1_1])

    def test_one(self):
        res1 = self.dup_chunks.filter(id="C2C2").one()
        self.assertEqual(res1.raw(), self.dup_c2_2)

        res2 = self.dup_chunks.one()
        self.assertIsNone(res2)

        res3 = self.dup_chunks.filter(id="UnKnOwN").one()
        self.assertIsNone(res3)

    def test_all(self):
        res1 = self.dup_chunks.all()
        self.assertEqual(res1[0].raw(), self.dup_c1_1)
        self.assertEqual(res1[1].raw(), self.dup_c1_2)
        self.assertEqual(res1[2].raw(), self.dup_c2_1)
        self.assertEqual(res1[3].raw(), self.dup_c2_2)

        res2 = self.dup_chunks.filter(id="UnKnOwN").all()
        self.assertEqual(res2, [])

    def test_len(self):
        self.assertEqual(len(self.dup_chunks), 4)

    def test_iterator(self):
        chunk_iter = iter(self.dup_chunks)
        self.assertEqual(chunk_iter.next().raw(), self.dup_c1_1)
        self.assertEqual(chunk_iter.next().raw(), self.dup_c1_2)
        self.assertEqual(chunk_iter.next().raw(), self.dup_c2_1)
        self.assertEqual(chunk_iter.next().raw(), self.dup_c2_2)
        self.assertRaises(StopIteration, chunk_iter.next)

    def test_getitem(self):
        self.assertEqual(self.dup_chunks[0].raw(), self.dup_c1_1)
        self.assertEqual(self.dup_chunks[-1].raw(), self.dup_c2_2)