示例#1
0
 def test_not_sent_until_permitted(self):
     i = DeferredIOWorker(IOWorker())
     i.set_receive_handler(self.call_later)
     i.block()
     i.send("foo")
     self.assertFalse(i._io_worker._ready_to_send)
     self.assertFalse(i._send_queue.empty())
     i.unblock()
     self.assertTrue(i._send_queue.empty())
     i._io_worker._consume_send_buf(3)
     self.assertFalse(i._io_worker._ready_to_send)
示例#2
0
 def test_not_sent_until_permitted(self):
   i = DeferredIOWorker(IOWorker())
   i.set_receive_handler(self.call_later)
   i.block()
   i.send("foo")
   self.assertFalse(i._io_worker._ready_to_send)
   self.assertFalse(i._send_queue.empty())
   i.unblock()
   self.assertTrue(i._send_queue.empty())
   i._io_worker._consume_send_buf(3)
   self.assertFalse(i._io_worker._ready_to_send)
示例#3
0
    def test_receive_consume(self):
        i = DeferredIOWorker(IOWorker())
        i.set_receive_handler(self.call_later)
        self.data = None

        def consume(worker):
            self.data = worker.peek_receive_buf()
            worker.consume_receive_buf(len(self.data))

        i.set_receive_handler(consume)
        i.block()
        i._io_worker._push_receive_data("bar")
        self.assertEqual(self.data, None)
        i.unblock()
        self.assertEqual(self.data, "bar")
        # data has been consumed
        i._io_worker._push_receive_data("hepp")
        self.assertEqual(self.data, "hepp")
示例#4
0
    def test_not_received_until_permitted(self):
        i = DeferredIOWorker(IOWorker())
        i.set_receive_handler(self.call_later)
        i.block()
        self.data = None

        def d(worker):
            self.data = worker.peek_receive_buf()

        i.set_receive_handler(d)
        i._io_worker._push_receive_data("bar")
        self.assertEqual(self.data, None)
        i.unblock()
        self.assertEqual(self.data, "bar")
        # Now if unblocked, should go through immediately
        # Note: d does not consume the data
        i._io_worker._push_receive_data("hepp")
        self.assertEqual(self.data, "barhepp")
示例#5
0
 def test_receive_consume(self):
   i = DeferredIOWorker(IOWorker())
   i.set_receive_handler(self.call_later)
   self.data = None
   def consume(worker):
     self.data = worker.peek_receive_buf()
     worker.consume_receive_buf(len(self.data))
   i.set_receive_handler(consume)
   i.block()
   i._io_worker._push_receive_data("bar")
   self.assertEqual(self.data, None)
   i.unblock()
   self.assertEqual(self.data, "bar")
   # data has been consumed
   i._io_worker._push_receive_data("hepp")
   self.assertEqual(self.data, "hepp")
示例#6
0
 def test_not_received_until_permitted(self):
   i = DeferredIOWorker(IOWorker())
   i.set_receive_handler(self.call_later)
   i.block()
   self.data = None
   def d(worker):
     self.data = worker.peek_receive_buf()
   i.set_receive_handler(d)
   i._io_worker._push_receive_data("bar")
   self.assertEqual(self.data, None)
   i.unblock()
   self.assertEqual(self.data, "bar")
   # Now if unblocked, should go through immediately
   # Note: d does not consume the data
   i._io_worker._push_receive_data("hepp")
   self.assertEqual(self.data, "barhepp")
示例#7
0
 def create_connection(controller_info, switch):
     ''' Connect switches to controllers. May raise a TimeoutError '''
     # TODO(cs): move this into a ConnectionFactory class
     socket = connect_socket_with_backoff(controller_info.address,
                                          controller_info.port,
                                          max_backoff_seconds=8)
     # Set non-blocking
     socket.setblocking(0)
     io_worker = DeferredIOWorker(
         io_master.create_worker_for_socket(socket))
     return DeferredOFConnection(io_worker, switch.dpid, god_scheduler)
示例#8
0
 def create_connection(self, controller_info, switch, max_backoff_seconds=1024):
   ''' Connect switches to controllers. May raise a TimeoutError '''
   # TODO(cs): move this into a ConnectionFactory class
   while controller_info.address == "__address__":
     log.debug("Waiting for controller address for %s..." % controller_info.label)
     time.sleep(5)
   if self.multiplex_sockets:
     socket_ctor = STSMockSocket
   else:
     socket_ctor = socket.socket
   sock = connect_socket_with_backoff(controller_info.address,
                                      controller_info.port,
                                      max_backoff_seconds=max_backoff_seconds,
                                      socket_ctor=socket_ctor)
   # Set non-blocking
   sock.setblocking(0)
   io_worker = DeferredIOWorker(self.io_master.create_worker_for_socket(sock))
   connection = DeferredOFConnection(io_worker, controller_info.cid, switch.dpid, self.openflow_buffer)
   return connection