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_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_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_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_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)
 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_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_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 __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_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)
 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_routing_map_provider(self):
        partition_key_ranges = list(
            self.client._ReadPartitionKeyRanges(self.collection_link))

        routing_mp = _PartitionKeyRangeCache(self.client)
        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 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_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 _subtract_range(self, r, partition_key_range):
        """
        Evaluates and returns r - partition_key_range
        :param dict partition_key_range:
            Partition key range.
        :param routing_range._Range r: query range.
        :return:
            The subtract r - partition_key_range.
        :rtype: routing_range._Range
        """
        
        left = max(partition_key_range[routing_range._PartitionKeyRange.MaxExclusive], r.min)

        if left == r.min:
            leftInclusive = r.isMinInclusive
        else:
            leftInclusive = False

        queryRange = routing_range._Range(left, r.max, leftInclusive,
                r.isMaxInclusive)
        return queryRange
Пример #24
0
    def _subtract_range(self, r, partition_key_range):
        """
        Evaluates and returns r - partition_key_range
        :param dict partition_key_range:
            Partition key range.
        :param routing_range._Range r: query range.
        :return:
            The subtract r - partition_key_range.
        :rtype: routing_range._Range
        """

        left = max(
            partition_key_range[routing_range._PartitionKeyRange.MaxExclusive],
            r.min)

        if left == r.min:
            leftInclusive = r.isMinInclusive
        else:
            leftInclusive = False

        queryRange = routing_range._Range(left, r.max, leftInclusive,
                                          r.isMaxInclusive)
        return queryRange
 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])
    def test_routing_map_provider(self):
        partition_key_ranges = list(self.client._ReadPartitionKeyRanges(self.collection_link))

        routing_mp = _PartitionKeyRangeCache(self.client)
        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_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])