def testHashSpaceRepeatableLookups(self): hashSpace = Flexihash() for i in range(1, 10): hashSpace.addTarget("target" + str(i)) self.assertEqual(hashSpace.lookup('t1'), hashSpace.lookup('t1')) self.assertEqual(hashSpace.lookup('t2'), hashSpace.lookup('t2'))
def testFallbackPrecedenceWhenServerRemoved(self): mockHasher = MockHasher() hashSpace = Flexihash(mockHasher, 1) mockHasher.setHashValue(10) hashSpace.addTarget("t1") mockHasher.setHashValue(20) hashSpace.addTarget("t2") mockHasher.setHashValue(30) hashSpace.addTarget("t3") mockHasher.setHashValue(15) self.assertEqual(hashSpace.lookup('resource'), 't2') self.assertEqual(hashSpace.lookupList('resource', 3), ['t2', 't3', 't1']) hashSpace.removeTarget('t2') self.assertEqual(hashSpace.lookup('resource'), 't3') self.assertEqual(hashSpace.lookupList('resource', 3), ['t3', 't1']) hashSpace.removeTarget('t3') self.assertEqual(hashSpace.lookup('resource'), 't1') self.assertEqual(hashSpace.lookupList('resource', 3), ['t1'])
def test_basic(self): fh = Flexihash() fh.addTarget("a") fh.addTarget("b") fh.addTarget("c") self.assertEqual(fh.lookup("1"), "a") self.assertEqual(fh.lookup("2"), "b") self.assertEqual(fh.lookup("3"), "a")
def testHashSpaceLookupsAreValidTargets(self): targets = ["target" + str(i) for i in range(1, 10)] hashSpace = Flexihash() hashSpace.addTargets(targets) for i in range(1, 10): self.assertTrue(hashSpace.lookup("r"+str(i)) in targets, 'target must be in list of targets')
def testHashSpaceConsistentLookupsWithNewInstance(self): hashSpace1 = Flexihash() for i in range(1, 10): hashSpace1.addTarget("target" + str(i)) results1 = [] for i in range(1, 100): results1.append(hashSpace1.lookup("t"+str(i))) hashSpace2 = Flexihash() for i in range(1, 10): hashSpace2.addTarget("target" + str(i)) results2 = [] for i in range(1, 100): results2.append(hashSpace2.lookup("t"+str(i))) self.assertEqual(results1, results2)
def testHashSpaceConsistentLookupsWithNewInstance(self): hashSpace1 = Flexihash() for i in range(1, 10): hashSpace1.addTarget("target" + str(i)) results1 = [] for i in range(1, 100): results1.append(hashSpace1.lookup("t" + str(i))) hashSpace2 = Flexihash() for i in range(1, 10): hashSpace2.addTarget("target" + str(i)) results2 = [] for i in range(1, 100): results2.append(hashSpace2.lookup("t" + str(i))) self.assertEqual(results1, results2)
def testHashSpaceLookupsAreValidTargets(self): targets = ["target" + str(i) for i in range(1, 10)] hashSpace = Flexihash() hashSpace.addTargets(targets) for i in range(1, 10): self.assertTrue( hashSpace.lookup("r" + str(i)) in targets, 'target must be in list of targets')
def testHashSpaceConsistentLookupsAfterAddingAndRemoving(self): hashSpace = Flexihash() for i in range(1, 10): hashSpace.addTarget("target" + str(i)) results1 = [] for i in range(1, 100): results1.append(hashSpace.lookup("t"+str(i))) hashSpace \ .addTarget('new-target') \ .removeTarget('new-target') \ .addTarget('new-target') \ .removeTarget('new-target') results2 = [] for i in range(1, 100): results2.append(hashSpace.lookup("t"+str(i))) # This is probably optimistic, as adding/removing a target may # clobber existing targets and is not expected to restore them. self.assertEqual(results1, results2)
def testHashSpaceConsistentLookupsAfterAddingAndRemoving(self): hashSpace = Flexihash() for i in range(1, 10): hashSpace.addTarget("target" + str(i)) results1 = [] for i in range(1, 100): results1.append(hashSpace.lookup("t" + str(i))) hashSpace \ .addTarget('new-target') \ .removeTarget('new-target') \ .addTarget('new-target') \ .removeTarget('new-target') results2 = [] for i in range(1, 100): results2.append(hashSpace.lookup("t" + str(i))) # This is probably optimistic, as adding/removing a target may # clobber existing targets and is not expected to restore them. self.assertEqual(results1, results2)
def testFallbackPrecedenceWhenServerRemoved(self): mockHasher = MockHasher() hashSpace = Flexihash(mockHasher, 1) mockHasher.setHashValue(10) hashSpace.addTarget("t1") mockHasher.setHashValue(20) hashSpace.addTarget("t2") mockHasher.setHashValue(30) hashSpace.addTarget("t3") mockHasher.setHashValue(15) self.assertEqual(hashSpace.lookup('resource'), 't2') self.assertEqual( hashSpace.lookupList('resource', 3), ['t2', 't3', 't1'] ) hashSpace.removeTarget('t2') self.assertEqual(hashSpace.lookup('resource'), 't3') self.assertEqual( hashSpace.lookupList('resource', 3), ['t3', 't1'] ) hashSpace.removeTarget('t3') self.assertEqual(hashSpace.lookup('resource'), 't1') self.assertEqual( hashSpace.lookupList('resource', 3), ['t1'] )