def test_simple(self):
        r = routing_range.Range("AB", "AC", True, False)
        self.validate_against_cached_collection_results([r])

        ranges = [
            routing_range.Range("0000000040", "0000000045", True, False),
            routing_range.Range("0000000045", "0000000046", True, False),
            routing_range.Range("0000000046", "0000000050", True, False)
        ]
        self.validate_against_cached_collection_results(ranges)
 def test_two_ranges_in_one_partition_key_range(self):
     # two ranges fall in the same partition key range
     ranges = [
         routing_range.Range("05C1C9CD673400", "05C1C9CD673401", True,
                             False),
         routing_range.Range("05C1C9CD673402", "05C1C9CD673403", True,
                             False),
     ]
     self.validate_against_cached_collection_results(ranges)
     self.validate_overlapping_ranges_results(
         ranges, self.partition_key_ranges[1:2])
    def test_two_adjacent_boundary(self):
        ranges = [
            # self.partition_key_ranges[1]
            routing_range.Range("05C1C9CD673398", "05C1D9CD673398", True,
                                False),

            # self.partition_key_ranges[2]
            routing_range.Range("05C1D9CD673398", "05C1D9CD673399", True,
                                False),
        ]
        self.validate_against_cached_collection_results(ranges)
        self.validate_overlapping_ranges_results(
            ranges, self.partition_key_ranges[1:3])
    def test_advanced(self):
        partition_key_ranges = [{
            u'id': u'0',
            u'minInclusive': u'',
            u'maxExclusive': u'05C1C9CD673398'
        }, {
            u'id': u'1',
            u'minInclusive': u'05C1C9CD673398',
            u'maxExclusive': u'05C1D9CD673398'
        }, {
            u'id': u'2',
            u'minInclusive': u'05C1D9CD673398',
            u'maxExclusive': u'05C1E399CD6732'
        }, {
            u'id': u'3',
            u'minInclusive': u'05C1E399CD6732',
            u'maxExclusive': u'05C1E9CD673398'
        }, {
            u'id': u'4',
            u'minInclusive': u'05C1E9CD673398',
            u'maxExclusive': u'FF'
        }]
        partitionRangeWithInfo = [(r, True) for r in partition_key_ranges]

        pkRange = routing_range.Range("", "FF", True, False)
        collection_routing_map = CollectionRoutingMap.CompleteRoutingMap(
            partitionRangeWithInfo, 'sample collection id')
        overlapping_partition_key_ranges = collection_routing_map.get_overlapping_ranges(
            pkRange)

        self.assertEqual(len(overlapping_partition_key_ranges),
                         len(partition_key_ranges))
        self.assertEqual(overlapping_partition_key_ranges,
                         partition_key_ranges)
 def test_simple_boundary(self):
     ranges = [
         routing_range.Range("05C1C9CD673398", "05C1D9CD673398", True,
                             False),
     ]
     self.validate_against_cached_collection_results(ranges)
     self.validate_overlapping_ranges_results(
         ranges, self.partition_key_ranges[1:2])
    def test_full_range(self):
        # query range is the whole partition key range
        pkRange = routing_range.Range("", "FF", True, False)
        overlapping_partition_key_ranges = self.get_overlapping_ranges(
            [pkRange])
        self.assertEqual(len(overlapping_partition_key_ranges),
                         len(self.partition_key_ranges))
        self.assertEqual(overlapping_partition_key_ranges,
                         self.partition_key_ranges)

        pkRange = routing_range.Range("", "FF", False, False)
        overlapping_partition_key_ranges = self.get_overlapping_ranges(
            [pkRange])
        self.assertEqual(overlapping_partition_key_ranges,
                         self.partition_key_ranges)
        self.assertEqual(
            self.cached_collection_routing_map.get_overlapping_ranges(
                [pkRange]), self.partition_key_ranges)
Пример #7
0
    def test_routing_map_provider(self):
        partition_key_ranges = list(
            self.client.client_connection._ReadPartitionKeyRanges(
                self.collection_link))

        routing_mp = PartitionKeyRangeCache(self.client.client_connection)
        overlapping_partition_key_ranges = routing_mp.get_overlapping_ranges(
            self.collection_link, routing_range.Range("", "FF", True, False))
        self.assertEqual(len(overlapping_partition_key_ranges),
                         len(partition_key_ranges))
        self.assertEqual(overlapping_partition_key_ranges,
                         partition_key_ranges)
    def test_bad_overlapping_query_ranges(self):
        # they share AA point
        r1 = routing_range.Range("", "AA", True, True)
        r2 = routing_range.Range("AA", "FF", True, False)

        def func_one_point_overlap():
            self.smart_routing_map_provider.get_overlapping_ranges(
                "sample collection id", [r1, r2])

        self.assertRaises(ValueError, func_one_point_overlap)

        # overlapping range
        r1 = routing_range.Range("", "AB", True, False)
        r2 = routing_range.Range("AA", "FA", True, False)

        def func_overlap():
            self.smart_routing_map_provider.get_overlapping_ranges(
                "sample collection id", [r1, r2])

        self.assertRaises(ValueError, func_overlap)

        r1 = routing_range.Range("AB", "AC", True, False)
        r1 = routing_range.Range("AA", "AB", True, False)

        def func_non_sorted():
            self.smart_routing_map_provider.get_overlapping_ranges(
                "sample collection id", [r1, r2])

        self.assertRaises(ValueError, func_overlap)
    def __init__(self, range_by_id, range_by_info,
                 ordered_partition_key_ranges, ordered_partition_info,
                 collection_unique_id):
        self._rangeById = range_by_id
        self._rangeByInfo = range_by_info
        self._orderedPartitionKeyRanges = ordered_partition_key_ranges

        self._orderedRanges = [
            routing_range.Range(pkr[PartitionKeyRange.MinInclusive],
                                pkr[PartitionKeyRange.MaxExclusive], True,
                                False) for pkr in ordered_partition_key_ranges
        ]
        self._orderedPartitionInfo = ordered_partition_info
        self._collectionUniqueId = collection_unique_id
    def test_empty_ranges(self):
        # query range is the whole partition key range
        pkRange = routing_range.Range("", "FF", True, False)
        overlapping_partition_key_ranges = self.get_overlapping_ranges(
            [pkRange])
        self.assertEqual(len(overlapping_partition_key_ranges),
                         len(self.partition_key_ranges))
        self.assertEqual(overlapping_partition_key_ranges,
                         self.partition_key_ranges)

        # query range list is empty
        overlapping_partition_key_ranges = self.get_overlapping_ranges([])
        self.assertEqual(len(overlapping_partition_key_ranges), 0)

        # validate the overlaping partition key ranges results for empty ranges is empty
        empty_start_range = routing_range.Range("", "", False, True)
        empty_end_range = routing_range.Range("FF", "FF", False, True)
        empty_range = routing_range.Range("AA", "AA", False, True)
        self.validate_empty_query_ranges(
            [empty_range], [empty_start_range], [empty_end_range],
            [empty_start_range, empty_range],
            [empty_start_range, empty_end_range],
            [empty_range, empty_end_range],
            [empty_range, empty_range, empty_end_range])
    def test_empty_ranges_are_thrown_away(self):
        e1 = routing_range.Range("", "", True, False)
        r1 = routing_range.Range("", "AB", True, False)
        e2 = routing_range.Range("AB", "AB", True, False)
        r2 = routing_range.Range("AB", "AC", True, False)
        e3 = routing_range.Range("AC", "AC", True, False)
        e4 = routing_range.Range("AD", "AD", True, False)

        self.validate_overlapping_ranges_results([e1, r1, e2, r2, e3, e4],
                                                 self.get_overlapping_ranges(
                                                     [r1, r2]))
        self.validate_against_cached_collection_results(
            [e1, r1, e2, r2, e3, e4])
 def test_complex(self):
     ranges = [
         # all are covered by self.partition_key_ranges[1]
         routing_range.Range("05C1C9CD673398", "05C1D9CD673391", True,
                             False),
         routing_range.Range("05C1D9CD673391", "05C1D9CD673392", True,
                             False),
         routing_range.Range("05C1D9CD673393", "05C1D9CD673395", True,
                             False),
         routing_range.Range("05C1D9CD673395", "05C1D9CD673395", True,
                             False),
         # all are covered by self.partition_key_ranges[4]]
         routing_range.Range("05C1E9CD673398", "05C1E9CD673401", True,
                             False),
         routing_range.Range("05C1E9CD673402", "05C1E9CD673403", True,
                             False),
         # empty range
         routing_range.Range("FF", "FF", True, False),
     ]
     self.validate_against_cached_collection_results(ranges)
     self.validate_overlapping_ranges_results(
         ranges,
         [self.partition_key_ranges[1], self.partition_key_ranges[4]])
    def test_collection_routing_map(self):

        Id = 'id'
        MinInclusive = 'minInclusive'
        MaxExclusive = 'maxExclusive'

        partitionKeyRanges = \
                    [
                        ({Id : "2",
                        MinInclusive : "0000000050",
                        MaxExclusive : "0000000070"},
                        2),
                        ({Id : "0",
                        MinInclusive : "",
                        MaxExclusive : "0000000030"},
                        0),
                        ({Id : "1",
                        MinInclusive : "0000000030",
                        MaxExclusive : "0000000050"},
                        1),
                        ({Id : "3",
                        MinInclusive : "0000000070",
                        MaxExclusive : "FF"},
                        3)
                    ]

        crm = CollectionRoutingMap.CompleteRoutingMap(partitionKeyRanges, "")

        self.assertEqual("0", crm._orderedPartitionKeyRanges[0][Id])
        self.assertEqual("1", crm._orderedPartitionKeyRanges[1][Id])
        self.assertEqual("2", crm._orderedPartitionKeyRanges[2][Id])
        self.assertEqual("3", crm._orderedPartitionKeyRanges[3][Id])

        self.assertEqual(0, crm._orderedPartitionInfo[0])
        self.assertEqual(1, crm._orderedPartitionInfo[1])
        self.assertEqual(2, crm._orderedPartitionInfo[2])
        self.assertEqual(3, crm._orderedPartitionInfo[3])

        self.assertEqual("0", crm.get_range_by_effective_partition_key("")[Id])
        self.assertEqual(
            "0",
            crm.get_range_by_effective_partition_key("0000000000")[Id])
        self.assertEqual(
            "1",
            crm.get_range_by_effective_partition_key("0000000030")[Id])
        self.assertEqual(
            "1",
            crm.get_range_by_effective_partition_key("0000000031")[Id])
        self.assertEqual(
            "3",
            crm.get_range_by_effective_partition_key("0000000071")[Id])

        self.assertEqual("0", crm.get_range_by_partition_key_range_id("0")[Id])
        self.assertEqual("1", crm.get_range_by_partition_key_range_id("1")[Id])

        fullRangeMinToMaxRange = routing_range.Range(
            CollectionRoutingMap.MinimumInclusiveEffectivePartitionKey,
            CollectionRoutingMap.MaximumExclusiveEffectivePartitionKey, True,
            False)
        overlappingRanges = crm.get_overlapping_ranges(
            [fullRangeMinToMaxRange])
        self.assertEqual(4, len(overlappingRanges))

        onlyParitionRanges = [item[0] for item in partitionKeyRanges]

        def getKey(r):
            return r['id']

        onlyParitionRanges.sort(key=getKey)
        self.assertEqual(overlappingRanges, onlyParitionRanges)

        noPoint = routing_range.Range(
            CollectionRoutingMap.MinimumInclusiveEffectivePartitionKey,
            CollectionRoutingMap.MinimumInclusiveEffectivePartitionKey, False,
            False)
        self.assertEqual(0, len(crm.get_overlapping_ranges([noPoint])))

        onePoint = routing_range.Range("0000000040", "0000000040", True, True)
        overlappingPartitionKeyRanges = crm.get_overlapping_ranges([onePoint])
        self.assertEqual(1, len(overlappingPartitionKeyRanges))
        self.assertEqual("1", overlappingPartitionKeyRanges[0][Id])

        ranges = [
            routing_range.Range("0000000040", "0000000045", True, True),
            routing_range.Range("0000000045", "0000000046", True, True),
            routing_range.Range("0000000046", "0000000050", True, True)
        ]
        overlappingPartitionKeyRanges = crm.get_overlapping_ranges(ranges)

        self.assertEqual(2, len(overlappingPartitionKeyRanges))
        self.assertEqual("1", overlappingPartitionKeyRanges[0][Id])
        self.assertEqual("2", overlappingPartitionKeyRanges[1][Id])