def test_selectWeightedNode_lt_mid_equal(self, mock_random): mock_node_1 = mock.Mock() mock_node_2 = mock.Mock() mock_node_3 = mock.Mock() mock_node_4 = mock.Mock() mock_node_5 = mock.Mock() mock_weighted_nodes = [ (mock_node_1, 0.1), (mock_node_2, 0.3), (mock_node_3, 0.57), (mock_node_4, 0.78), (mock_node_5, 1.0), ] mock_random.return_value = 0.5 # r < 0.57, so... # end = 2, mid = 1 # then r > 0.3, so... # begin = 2, mid = 2 # r < 0.57 # mid == begin, so # return w[2][0] expected = mock_weighted_nodes[2][0] ret = path_util.selectWeightedNode(mock_weighted_nodes) self.assertEqual(ret, expected)
def selectExitNode(bw_weights, bwweightscale, cons_rel_stats, descriptors, fast, stable, internal, port): exits = filterExits(cons_rel_stats, descriptors, fast, stable, internal, port) if len(exits) == 0: raise ValueError("No usable exit nodes for requested path.") if len(exits) == 1: return exits[0] weight_pos = 'm' if internal is True else 'e' weights = path_util.getPositionWeights(exits, cons_rel_stats, weight_pos, bw_weights, bwweightscale) weighted_exits = path_util.getWeightedNodes(exits, weights) return path_util.selectWeightedNode(weighted_exits)
def selectMiddleNode(bw_weights, bwweightscale, cons_rel_stats, descriptors, fast, stable, exit_desc, exit_status_entry, guard_desc, guard_status_entry): middles = filterMiddles(cons_rel_stats, descriptors, fast, stable, exit_desc, exit_status_entry, guard_desc, guard_status_entry) if len(middles) == 0: raise ValueError("No usable middle nodes for requested path.") if len(middles) == 1: return middles[0] weights = path_util.getPositionWeights(middles, cons_rel_stats, 'm', bw_weights, bwweightscale) weighted_middles = path_util.getWeightedNodes(middles, weights) return path_util.selectWeightedNode(weighted_middles)