Add another test to TcpSocketImplTest
authorRaj Bhattacharjea <raj.b@gatech.edu>
Thu, 14 Aug 2008 18:25:33 -0400
changeset 3533 46446b2e3c9d
parent 3532 a88c0d54e43b
child 3534 e170f2c17e03
Add another test to TcpSocketImplTest
src/internet-stack/tcp-socket-impl.cc
--- a/src/internet-stack/tcp-socket-impl.cc	Thu Aug 14 17:39:43 2008 -0400
+++ b/src/internet-stack/tcp-socket-impl.cc	Thu Aug 14 18:25:33 2008 -0400
@@ -1569,12 +1569,17 @@
   virtual bool RunTests (void);
   private:
   void Test1 (void); //send string "Hello world" server->client
+  void Test2 (uint32_t payloadSize);
   Ptr<Node> CreateInternetNode ();
   Ptr<SimpleNetDevice> AddSimpleNetDevice (Ptr<Node>,const char*,const char*);
   
-  void HandleConnectionCreated (Ptr<Socket>, const Address &);
-  void HandleRecv (Ptr<Socket> sock);
-  
+  void Test1_HandleConnectionCreated (Ptr<Socket>, const Address &);
+  void Test1_HandleRecv (Ptr<Socket> sock);
+
+  void Test2_HandleConnectionCreated (Ptr<Socket>, const Address &);
+  void Test2_HandleRecv (Ptr<Socket> sock);
+  uint32_t test2_payloadSize;
+
   void Reset ();
   
   Ptr<Node> node0;
@@ -1606,6 +1611,7 @@
 TcpSocketImplTest::RunTests (void)
 {
   Test1();
+  Test2(600);
   return result;
 }
 
@@ -1638,10 +1644,10 @@
   listeningSock->Listen (0);
   listeningSock->SetAcceptCallback 
     (MakeNullCallback<bool, Ptr< Socket >, const Address &> (),
-     MakeCallback(&TcpSocketImplTest::HandleConnectionCreated,this));
+     MakeCallback(&TcpSocketImplTest::Test1_HandleConnectionCreated,this));
   
   sock1->Connect(serverremoteaddr);
-  sock1->SetRecvCallback (MakeCallback(&TcpSocketImplTest::HandleRecv, this));
+  sock1->SetRecvCallback (MakeCallback(&TcpSocketImplTest::Test1_HandleRecv, this));
   
   Simulator::Run ();
   Simulator::Destroy ();
@@ -1652,6 +1658,49 @@
   Reset ();
 }
 
+void
+TcpSocketImplTest::Test2 (uint32_t payloadSize)
+{
+  test2_payloadSize = payloadSize;
+  const char* netmask = "255.255.255.0";
+  const char* ipaddr0 = "192.168.1.1";
+  const char* ipaddr1 = "192.168.1.2";
+  node0 = CreateInternetNode ();
+  node1 = CreateInternetNode ();
+  dev0 = AddSimpleNetDevice (node0, ipaddr0, netmask);
+  dev1 = AddSimpleNetDevice (node1, ipaddr1, netmask);
+  
+  channel = CreateObject<SimpleChannel> ();
+  dev0->SetChannel (channel);
+  dev1->SetChannel (channel);
+  
+  Ptr<SocketFactory> sockFactory0 = node0->GetObject<TcpSocketFactory> ();
+  Ptr<SocketFactory> sockFactory1 = node1->GetObject<TcpSocketFactory> ();
+  
+  listeningSock = sockFactory0->CreateSocket();
+  sock1 = sockFactory1->CreateSocket();
+  
+  uint16_t port = 50000;
+  InetSocketAddress serverlocaladdr (Ipv4Address::GetAny(), port);
+  InetSocketAddress serverremoteaddr (Ipv4Address(ipaddr0), port);
+  
+  listeningSock->Bind(serverlocaladdr);
+  listeningSock->Listen (0);
+  listeningSock->SetAcceptCallback 
+    (MakeNullCallback<bool, Ptr< Socket >, const Address &> (),
+     MakeCallback(&TcpSocketImplTest::Test2_HandleConnectionCreated,this));
+  
+  sock1->Connect(serverremoteaddr);
+  sock1->SetRecvCallback (MakeCallback(&TcpSocketImplTest::Test2_HandleRecv, this));
+  
+  Simulator::Run ();
+  Simulator::Destroy ();
+  
+  result = result && (rxBytes1 == test2_payloadSize);
+  
+  Reset ();
+}
+
 Ptr<Node>
 TcpSocketImplTest::CreateInternetNode ()
 {
@@ -1675,7 +1724,7 @@
 }
 
 void
-TcpSocketImplTest::HandleConnectionCreated (Ptr<Socket> s, const Address & addr)
+TcpSocketImplTest::Test1_HandleConnectionCreated (Ptr<Socket> s, const Address & addr)
 {
   NS_ASSERT(s != listeningSock);
   NS_ASSERT(sock0 == 0);
@@ -1684,20 +1733,16 @@
   Ptr<Packet> p = Create<Packet> (hello, 13);
   sock0->Send(p);
   
-  sock0->SetRecvCallback (MakeCallback(&TcpSocketImplTest::HandleRecv, this));
+  sock0->SetRecvCallback (MakeCallback(&TcpSocketImplTest::Test1_HandleRecv, this));
 }
 
 void
-TcpSocketImplTest::HandleRecv (Ptr<Socket> sock)
+TcpSocketImplTest::Test1_HandleRecv (Ptr<Socket> sock)
 {
   NS_ASSERT (sock == sock0 | sock == sock1);
   Ptr<Packet> p = sock->Recv();
   uint32_t sz = p->GetSize();
-  if (sock == sock0)
-  {
-    rxBytes0 += sz;
-  }
-  else if (sock == sock1)
+  if (sock == sock1)
   {
     rxBytes1 += sz;
     rxPayload = new uint8_t[sz];
@@ -1710,6 +1755,34 @@
 }
 
 void
+TcpSocketImplTest::Test2_HandleConnectionCreated (Ptr<Socket> s, const Address & addr)
+{
+  NS_ASSERT(s != listeningSock);
+  NS_ASSERT(sock0 == 0);
+  sock0 = s;
+  Ptr<Packet> p = Create<Packet> (test2_payloadSize);
+  sock0->Send(p);
+  
+  sock0->SetRecvCallback (MakeCallback(&TcpSocketImplTest::Test2_HandleRecv, this));
+}
+
+void
+TcpSocketImplTest::Test2_HandleRecv (Ptr<Socket> sock)
+{
+  NS_ASSERT (sock == sock0 | sock == sock1);
+  Ptr<Packet> p = sock->Recv();
+  uint32_t sz = p->GetSize();
+  if (sock == sock1)
+  {
+    rxBytes1 += sz;
+  }
+  else
+  {
+    NS_FATAL_ERROR ("Recv from unknown socket "<<sock);
+  }
+}
+
+void
 TcpSocketImplTest::Reset ()
 {
   node0 = 0;