예제 #1
0
 def test_send_back_from_non_peer(self):
     """Test send back from non peer"""
     message = Message('ucla', 1)
     self.sri.add_link(Link(self.ucla, 1))
     self.utah.add_link(Link(self.sri, 1))
     message.send(self.utah)
     assert message.location().name == 'ucla', message.location
예제 #2
0
    def setUp(self):
        self.ucla = Node('ucla')
        self.sri = Node('sri')

        self.ucla.add_link(Link(self.sri, 1))

        self.utah = Node('utah')
        self.sri.add_link(Link(self.utah, 1))
예제 #3
0
    def test_send_with_two_routes(self):
        """Test send with two routes"""
        ucsb = Node('ucsb')
        self.ucla.add_link(Link(ucsb, 1))
        ucsb.add_link(Link(self.sri, 1))

        message = Message('utah', 1)
        message.send(self.ucla)
        assert message.location().name == 'utah', message.location
예제 #4
0
    def test_send_by_least_busy_route(self):
        """Test send by least busy route"""
        ucsb = Node('ucsb')
        self.ucla.add_link(Link(ucsb, 1))
        ucsb.add_link(Link(self.sri, 1))
        self.ucla.links['sri'].weight = 10

        message = Message('utah', 1)
        message.send(self.ucla)
        assert message.route_nodes == [self.utah, self.sri, ucsb, self.ucla]
예제 #5
0
    def test_create_network(self):
        """Test create network"""

        assert self.ucla.__str__() == 'ucla-->[]', self.ucla.__str__()
        self.ucla.add_link(Link(self.sri, 0))
        assert self.ucla.links['sri'].dest.name == 'sri'
        assert self.ucla.__str__() == "ucla-->['sri']", self.ucla.__str__()
예제 #6
0
 def test_link_to_rl_buffer(self):
     """
     Links can indicate whether messages sent via them should be
     added to the right to left or the left to right buffer.
     """
     message = Message('sri', 1)
     self.sri.add_message = MagicMock()
     self.ucla.add_link(Link(self.sri, 0, True))
     self.ucla.add_message(message)
     for _ in range(self.ucla.buffer_length):
         self.ucla.process()
     self.sri.add_message.assert_called_with(message, 1)
예제 #7
0
 def __init__(self, network, transmitter=None):
     self.nodes = {}
     self.transmitter = transmitter
     if self.transmitter is None:
         display = None
     else:
         display = Wireless(self.transmitter)
     for node in network:
         if not node['from'] in self.nodes:
             from_node = Node(node['from'], display)
             self.nodes[from_node.name] = from_node
         else:
             from_node = self.nodes[node['from']]
         if not node['to'] in self.nodes:
             to_node = Node(node['to'], display)
             self.nodes[to_node.name] = to_node
         else:
             to_node = self.nodes[node['to']]
         self.nodes[node['from']].add_link(
             Link(to_node, node['weight'], node['r2l']))
         if node['bidirectional']:
             self.nodes[node['to']].add_link(
                 Link(from_node, node['weight'], not node['r2l']))
예제 #8
0
    def test_message_gets_sent_when_leaves_buffer(self):
        """
        When a message gets to the end of the buffer it should be sent to the
        next node on its route

        Unless this is the last node on the route...
        """

        self.ucla.add_link(Link(self.sri, 0))
        message = Message('sri', 1)
        message.route(self.ucla)
        self.sri.add_message = MagicMock()
        self.ucla.add_message(message)
        for _ in range(self.ucla.buffer_length):
            self.ucla.process()
        assert self.sri.add_message.call_count == 1
        assert self.ucla.buffer_contents(0) == [None, None, None
                                                ], self.ucla.buffer_contents(0)
예제 #9
0
    def test_dont_go_round_in_circles(self):
        """
        If there is a route back to the origin, check we don't end up going round in circles
        """
        NODES = ['ucla', 'ucsb', 'sri', 'utah']

        LINKS = [('ucla', 'sri', 1), ('ucla', 'ucsb', 1), ('ucsb', 'sri', 1),
                 ('sri', 'utah', 1), ('utah', 'sri', 1), ('sri', 'ucsb', 1),
                 ('sri', 'ucla', 1), ('ucsb', 'ucla', 1)]

        network = {}
        for node in NODES:
            network[node] = Node(node)

        for link in LINKS:
            network[link[0]].add_link(Link(network[link[1]], link[2]))

        message = Message('utah', 1)
        message.route(network['ucla'])
        assert message.route_nodes[0] == network['utah']