postfix commit 11358:9a04bd20a224 and add test case (was raising error: default initialization of an object of const type on some systems)
authorTom Henderson <tomh@tomh.org>
Tue, 05 May 2015 13:27:01 -0700
changeset 11364 5bff09f31559
parent 11363 049b9704bc05
child 11365 b52835f1548e
postfix commit 11358:9a04bd20a224 and add test case (was raising error: default initialization of an object of const type on some systems)
src/internet/model/tcp-header.cc
src/internet/model/tcp-header.h
src/internet/test/tcp-header-test.cc
--- a/src/internet/model/tcp-header.cc	Mon May 04 23:25:28 2015 -0700
+++ b/src/internet/model/tcp-header.cc	Tue May 05 13:27:01 2015 -0700
@@ -52,7 +52,7 @@
 }
 
 std::string
-TcpHeader::FlagsToString(const uint8_t& flags, const std::string& delimiter)
+TcpHeader::FlagsToString (uint8_t flags, const std::string& delimiter)
 {
   static const char* flagNames[8] = {
     "FIN",
@@ -65,14 +65,17 @@
     "CWR"
   };
   std::string flagsDescription = "";
-  for(int i = 0; i < 8; ++i)
-  {
-    if( flags & (1 << i) )
+  for (uint8_t i = 0; i < 8; ++i)
     {
-      if(flagsDescription.length() > 0) flagsDescription += delimiter;
-      flagsDescription.append(flagNames[i]);
+      if (flags & (1 << i))
+        {
+          if (flagsDescription.length() > 0) 
+            {
+              flagsDescription += delimiter;
+            }
+          flagsDescription.append (flagNames[i]);
+        }
     }
-  }
   return flagsDescription;
 }
 
--- a/src/internet/model/tcp-header.h	Mon May 04 23:25:28 2015 -0700
+++ b/src/internet/model/tcp-header.h	Tue May 05 13:27:01 2015 -0700
@@ -50,12 +50,19 @@
   /**
    * \brief Converts an integer into a human readable list of Tcp flags
    *
-   * \param flags List of TCP flags to convert to a readable string
+   * \param flags Bitfield of TCP flags to convert to a readable string
    * \param delimiter String to insert between flags
    *
+   * FIN=0x1, SYN=0x2, RST=0x4, PSH=0x8, ACK=0x10, URG=0x20, ECE=0x40, CWR=0x80
+   * TcpHeader::FlagsToString (0x1) should return the following string;
+   *     "FIN"
+   *
+   * TcpHeader::FlagsToString (0xff) should return the following string;
+   *     "FIN|SYN|RST|PSH|ACK|URG|ECE|CWR";
+   *
    * \return the generated string
    **/
-  static std::string FlagsToString(const uint8_t& flags, const std::string& delimiter="|");
+  static std::string FlagsToString (uint8_t flags, const std::string& delimiter = "|");
 
   /**
    * \brief Enable checksum calculation for TCP
--- a/src/internet/test/tcp-header-test.cc	Mon May 04 23:25:28 2015 -0700
+++ b/src/internet/test/tcp-header-test.cc	Tue May 05 13:27:01 2015 -0700
@@ -322,6 +322,65 @@
 
 }
 
+class TcpHeaderFlagsToString : public TestCase
+{
+public:
+  TcpHeaderFlagsToString (std::string name);
+
+private:
+  virtual void DoRun (void);
+};
+
+TcpHeaderFlagsToString::TcpHeaderFlagsToString (std::string name)
+  : TestCase (name)
+{
+}
+
+void
+TcpHeaderFlagsToString::DoRun (void)
+{
+  std::string str, target;
+  str = TcpHeader::FlagsToString (0x0);
+  target = "";
+  NS_TEST_ASSERT_MSG_EQ (str, target, "str " << str <<  " does not equal target " << target);
+  str = TcpHeader::FlagsToString (0x1);
+  target = "FIN";
+  NS_TEST_ASSERT_MSG_EQ (str, target, "str " << str <<  " does not equal target " << target);
+  str = TcpHeader::FlagsToString (0x2);
+  target = "SYN";
+  NS_TEST_ASSERT_MSG_EQ (str, target, "str " << str <<  " does not equal target " << target);
+  str = TcpHeader::FlagsToString (0x4);
+  target = "RST";
+  NS_TEST_ASSERT_MSG_EQ (str, target, "str " << str <<  " does not equal target " << target);
+  str = TcpHeader::FlagsToString (0x8);
+  target = "PSH";
+  NS_TEST_ASSERT_MSG_EQ (str, target, "str " << str <<  " does not equal target " << target);
+  str = TcpHeader::FlagsToString (0x10);
+  target = "ACK";
+  NS_TEST_ASSERT_MSG_EQ (str, target, "str " << str <<  " does not equal target " << target);
+  str = TcpHeader::FlagsToString (0x20);
+  target = "URG";
+  NS_TEST_ASSERT_MSG_EQ (str, target, "str " << str <<  " does not equal target " << target);
+  str = TcpHeader::FlagsToString (0x40);
+  target = "ECE";
+  NS_TEST_ASSERT_MSG_EQ (str, target, "str " << str <<  " does not equal target " << target);
+  str = TcpHeader::FlagsToString (0x80);
+  target = "CWR";
+  NS_TEST_ASSERT_MSG_EQ (str, target, "str " << str <<  " does not equal target " << target);
+  str = TcpHeader::FlagsToString (0x3);
+  target = "FIN|SYN";
+  NS_TEST_ASSERT_MSG_EQ (str, target, "str " << str <<  " does not equal target " << target);
+  str = TcpHeader::FlagsToString (0x5);
+  target = "FIN|RST";
+  NS_TEST_ASSERT_MSG_EQ (str, target, "str " << str <<  " does not equal target " << target);
+  str = TcpHeader::FlagsToString (0xff);
+  target = "FIN|SYN|RST|PSH|ACK|URG|ECE|CWR";
+  NS_TEST_ASSERT_MSG_EQ (str, target, "str " << str <<  " does not equal target " << target);
+  str = TcpHeader::FlagsToString (0xff, ":");
+  target = "FIN:SYN:RST:PSH:ACK:URG:ECE:CWR";
+  NS_TEST_ASSERT_MSG_EQ (str, target, "str " << str <<  " does not equal target " << target);
+}
+
 static class TcpHeaderTestSuite : public TestSuite
 {
 public:
@@ -330,6 +389,7 @@
   {
     AddTestCase (new TcpHeaderGetSetTestCase ("GetSet test cases"), TestCase::QUICK);
     AddTestCase (new TcpHeaderWithRFC793OptionTestCase ("Test for options in RFC 793"), TestCase::QUICK);
+    AddTestCase (new TcpHeaderFlagsToString ("Test flags to string function"), TestCase::QUICK);
   }
 
 } g_TcpHeaderTestSuite;