Add another test to TcpSocketImplTest
authorRaj Bhattacharjea <raj.b@gatech.edu>
Thu Aug 14 18:25:33 2008 -0400 (18 months ago)
changeset 354946446b2e3c9d
parent 3548 a88c0d54e43b
child 3550 e170f2c17e03
Add another test to TcpSocketImplTest
src/internet-stack/tcp-socket-impl.cc
     1.1 --- a/src/internet-stack/tcp-socket-impl.cc	Thu Aug 14 17:39:43 2008 -0400
     1.2 +++ b/src/internet-stack/tcp-socket-impl.cc	Thu Aug 14 18:25:33 2008 -0400
     1.3 @@ -1569,12 +1569,17 @@
     1.4    virtual bool RunTests (void);
     1.5    private:
     1.6    void Test1 (void); //send string "Hello world" server->client
     1.7 +  void Test2 (uint32_t payloadSize);
     1.8    Ptr<Node> CreateInternetNode ();
     1.9    Ptr<SimpleNetDevice> AddSimpleNetDevice (Ptr<Node>,const char*,const char*);
    1.10    
    1.11 -  void HandleConnectionCreated (Ptr<Socket>, const Address &);
    1.12 -  void HandleRecv (Ptr<Socket> sock);
    1.13 -  
    1.14 +  void Test1_HandleConnectionCreated (Ptr<Socket>, const Address &);
    1.15 +  void Test1_HandleRecv (Ptr<Socket> sock);
    1.16 +
    1.17 +  void Test2_HandleConnectionCreated (Ptr<Socket>, const Address &);
    1.18 +  void Test2_HandleRecv (Ptr<Socket> sock);
    1.19 +  uint32_t test2_payloadSize;
    1.20 +
    1.21    void Reset ();
    1.22    
    1.23    Ptr<Node> node0;
    1.24 @@ -1606,6 +1611,7 @@
    1.25  TcpSocketImplTest::RunTests (void)
    1.26  {
    1.27    Test1();
    1.28 +  Test2(600);
    1.29    return result;
    1.30  }
    1.31  
    1.32 @@ -1638,10 +1644,10 @@
    1.33    listeningSock->Listen (0);
    1.34    listeningSock->SetAcceptCallback 
    1.35      (MakeNullCallback<bool, Ptr< Socket >, const Address &> (),
    1.36 -     MakeCallback(&TcpSocketImplTest::HandleConnectionCreated,this));
    1.37 +     MakeCallback(&TcpSocketImplTest::Test1_HandleConnectionCreated,this));
    1.38    
    1.39    sock1->Connect(serverremoteaddr);
    1.40 -  sock1->SetRecvCallback (MakeCallback(&TcpSocketImplTest::HandleRecv, this));
    1.41 +  sock1->SetRecvCallback (MakeCallback(&TcpSocketImplTest::Test1_HandleRecv, this));
    1.42    
    1.43    Simulator::Run ();
    1.44    Simulator::Destroy ();
    1.45 @@ -1652,6 +1658,49 @@
    1.46    Reset ();
    1.47  }
    1.48  
    1.49 +void
    1.50 +TcpSocketImplTest::Test2 (uint32_t payloadSize)
    1.51 +{
    1.52 +  test2_payloadSize = payloadSize;
    1.53 +  const char* netmask = "255.255.255.0";
    1.54 +  const char* ipaddr0 = "192.168.1.1";
    1.55 +  const char* ipaddr1 = "192.168.1.2";
    1.56 +  node0 = CreateInternetNode ();
    1.57 +  node1 = CreateInternetNode ();
    1.58 +  dev0 = AddSimpleNetDevice (node0, ipaddr0, netmask);
    1.59 +  dev1 = AddSimpleNetDevice (node1, ipaddr1, netmask);
    1.60 +  
    1.61 +  channel = CreateObject<SimpleChannel> ();
    1.62 +  dev0->SetChannel (channel);
    1.63 +  dev1->SetChannel (channel);
    1.64 +  
    1.65 +  Ptr<SocketFactory> sockFactory0 = node0->GetObject<TcpSocketFactory> ();
    1.66 +  Ptr<SocketFactory> sockFactory1 = node1->GetObject<TcpSocketFactory> ();
    1.67 +  
    1.68 +  listeningSock = sockFactory0->CreateSocket();
    1.69 +  sock1 = sockFactory1->CreateSocket();
    1.70 +  
    1.71 +  uint16_t port = 50000;
    1.72 +  InetSocketAddress serverlocaladdr (Ipv4Address::GetAny(), port);
    1.73 +  InetSocketAddress serverremoteaddr (Ipv4Address(ipaddr0), port);
    1.74 +  
    1.75 +  listeningSock->Bind(serverlocaladdr);
    1.76 +  listeningSock->Listen (0);
    1.77 +  listeningSock->SetAcceptCallback 
    1.78 +    (MakeNullCallback<bool, Ptr< Socket >, const Address &> (),
    1.79 +     MakeCallback(&TcpSocketImplTest::Test2_HandleConnectionCreated,this));
    1.80 +  
    1.81 +  sock1->Connect(serverremoteaddr);
    1.82 +  sock1->SetRecvCallback (MakeCallback(&TcpSocketImplTest::Test2_HandleRecv, this));
    1.83 +  
    1.84 +  Simulator::Run ();
    1.85 +  Simulator::Destroy ();
    1.86 +  
    1.87 +  result = result && (rxBytes1 == test2_payloadSize);
    1.88 +  
    1.89 +  Reset ();
    1.90 +}
    1.91 +
    1.92  Ptr<Node>
    1.93  TcpSocketImplTest::CreateInternetNode ()
    1.94  {
    1.95 @@ -1675,7 +1724,7 @@
    1.96  }
    1.97  
    1.98  void
    1.99 -TcpSocketImplTest::HandleConnectionCreated (Ptr<Socket> s, const Address & addr)
   1.100 +TcpSocketImplTest::Test1_HandleConnectionCreated (Ptr<Socket> s, const Address & addr)
   1.101  {
   1.102    NS_ASSERT(s != listeningSock);
   1.103    NS_ASSERT(sock0 == 0);
   1.104 @@ -1684,20 +1733,16 @@
   1.105    Ptr<Packet> p = Create<Packet> (hello, 13);
   1.106    sock0->Send(p);
   1.107    
   1.108 -  sock0->SetRecvCallback (MakeCallback(&TcpSocketImplTest::HandleRecv, this));
   1.109 +  sock0->SetRecvCallback (MakeCallback(&TcpSocketImplTest::Test1_HandleRecv, this));
   1.110  }
   1.111  
   1.112  void
   1.113 -TcpSocketImplTest::HandleRecv (Ptr<Socket> sock)
   1.114 +TcpSocketImplTest::Test1_HandleRecv (Ptr<Socket> sock)
   1.115  {
   1.116    NS_ASSERT (sock == sock0 | sock == sock1);
   1.117    Ptr<Packet> p = sock->Recv();
   1.118    uint32_t sz = p->GetSize();
   1.119 -  if (sock == sock0)
   1.120 -  {
   1.121 -    rxBytes0 += sz;
   1.122 -  }
   1.123 -  else if (sock == sock1)
   1.124 +  if (sock == sock1)
   1.125    {
   1.126      rxBytes1 += sz;
   1.127      rxPayload = new uint8_t[sz];
   1.128 @@ -1710,6 +1755,34 @@
   1.129  }
   1.130  
   1.131  void
   1.132 +TcpSocketImplTest::Test2_HandleConnectionCreated (Ptr<Socket> s, const Address & addr)
   1.133 +{
   1.134 +  NS_ASSERT(s != listeningSock);
   1.135 +  NS_ASSERT(sock0 == 0);
   1.136 +  sock0 = s;
   1.137 +  Ptr<Packet> p = Create<Packet> (test2_payloadSize);
   1.138 +  sock0->Send(p);
   1.139 +  
   1.140 +  sock0->SetRecvCallback (MakeCallback(&TcpSocketImplTest::Test2_HandleRecv, this));
   1.141 +}
   1.142 +
   1.143 +void
   1.144 +TcpSocketImplTest::Test2_HandleRecv (Ptr<Socket> sock)
   1.145 +{
   1.146 +  NS_ASSERT (sock == sock0 | sock == sock1);
   1.147 +  Ptr<Packet> p = sock->Recv();
   1.148 +  uint32_t sz = p->GetSize();
   1.149 +  if (sock == sock1)
   1.150 +  {
   1.151 +    rxBytes1 += sz;
   1.152 +  }
   1.153 +  else
   1.154 +  {
   1.155 +    NS_FATAL_ERROR ("Recv from unknown socket "<<sock);
   1.156 +  }
   1.157 +}
   1.158 +
   1.159 +void
   1.160  TcpSocketImplTest::Reset ()
   1.161  {
   1.162    node0 = 0;