Home | History | Annotate | Download | only in netprotos
      1 # Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 
      6 class FakeHost(object):
      7     """A fake implementation of a lansim.host.Host object.
      8 
      9     This class replaces the real Host class and should be used for unit testing.
     10     """
     11 
     12     def __init__(self, ip_addr):
     13         self.ip_addr = ip_addr
     14 
     15         # List of FakeSocket objects returned by socket()
     16         self._sockets = []
     17 
     18 
     19     def socket(self, family, sock_type):
     20         """Creates a new FakeSocket and returns it.
     21 
     22         @param family: The socket family, for example AF_INET.
     23         @param sock_type: The socket type, for example SOCK_DGRAM.
     24         @return: a FakeSocket object.
     25         """
     26         sock = FakeSocket(self, family, sock_type)
     27         self._sockets.append(sock)
     28         return sock
     29 
     30 
     31 class FakeSocket(object):
     32     """A fake socket interface implementation.
     33 
     34     This class implements a fake socket object as returned by the Host.socket()
     35     method.
     36     """
     37 
     38     def __init__(self, host, family, sock_type):
     39         self._host = host
     40         self._family = family
     41         self._sock_type = sock_type
     42         self._bound = False
     43 
     44 
     45     def listen(self, ip_addr, port, recv_callback):
     46         """Bind and listen on the ip_addr:port.
     47 
     48         The fake implementation only stores these value as members of the
     49         FakeSocket to allow the test inspect those values.
     50 
     51         @param ip_addr: Local destination ip_addr.
     52         @param port: Local destination port number.
     53         @param recv_callback: A callback function that accepts three
     54         arguments, the received string, the sender IPv4 address and the
     55         sender port number.
     56         """
     57         self._bound = True
     58         self._bind_ip_addr = ip_addr
     59         self._bind_port = port
     60         self._bind_recv_callback = recv_callback
     61 
     62