Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(27)

Unified Diff: src/internet/test/tcp-option-test.cc

Issue 110860043: SOCIS2014 - Tcp Options Review (Closed)
Patch Set: SOCIS Final Review: Tcp Option TimeStamp Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/internet/model/tcp-socket-base.cc ('k') | src/internet/test/tcp-timestamp-test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/internet/test/tcp-option-test.cc
diff --git a/src/internet/test/tcp-option-test.cc b/src/internet/test/tcp-option-test.cc
new file mode 100644
index 0000000000000000000000000000000000000000..fad6b10b86060754faff15dac029802af1d6d89d
--- /dev/null
+++ b/src/internet/test/tcp-option-test.cc
@@ -0,0 +1,189 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Natale Patriciello <natale.patriciello@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include "ns3/test.h"
+#include "ns3/core-module.h"
+#include "ns3/tcp-option.h"
+#include "../src/internet/model/tcp-option-winscale.h"
+#include "../src/internet/model/tcp-option-ts.h"
+
+#include <string.h>
+
+namespace ns3 {
+
+class TcpOptionWSTestCase : public TestCase
+{
+public:
+ TcpOptionWSTestCase (std::string name, uint8_t scale);
+
+ void TestSerialize ();
+ void TestDeserialize ();
+
+private:
+ virtual void DoRun (void);
+ virtual void DoTeardown (void);
+
+ uint8_t m_scale;
+ Buffer m_buffer;
+};
+
+
+TcpOptionWSTestCase::TcpOptionWSTestCase (std::string name, uint8_t scale) :
+ TestCase (name)
+{
+ m_scale = scale;
+}
+
+void
+TcpOptionWSTestCase::DoRun ()
+{
+ TestSerialize ();
+ TestDeserialize ();
+}
+
+void
+TcpOptionWSTestCase::TestSerialize ()
+{
+ TcpOptionWinScale opt;
+
+ opt.SetScale (m_scale);
+ NS_TEST_EXPECT_MSG_EQ (m_scale, opt.GetScale (), "Scale isn't saved correctly");
+
+ m_buffer.AddAtStart (opt.GetSerializedSize ());
+
+ opt.Serialize (m_buffer.Begin ());
+}
+
+void
+TcpOptionWSTestCase::TestDeserialize ()
+{
+ TcpOptionWinScale opt;
+
+ Buffer::Iterator start = m_buffer.Begin ();
+ uint8_t kind = start.PeekU8 ();
+
+ NS_TEST_EXPECT_MSG_EQ (kind, TcpOption::WINSCALE, "Different kind found");
+
+ opt.Deserialize (start);
+
+ NS_TEST_EXPECT_MSG_EQ (m_scale, opt.GetScale (), "Different scale found");
+}
+
+void
+TcpOptionWSTestCase::DoTeardown ()
+{
+}
+
+class TcpOptionTSTestCase : public TestCase
+{
+public:
+ TcpOptionTSTestCase (std::string name, uint32_t timestamp, uint32_t echo);
+
+ void TestSerialize ();
+ void TestDeserialize ();
+
+private:
+ virtual void DoRun (void);
+ virtual void DoTeardown (void);
+
+ uint32_t m_timestamp;
+ uint32_t m_echo;
+ Buffer m_buffer;
+};
+
+
+TcpOptionTSTestCase::TcpOptionTSTestCase (std::string name, uint32_t timestamp,
+ uint32_t echo) :
+ TestCase (name)
+{
+ m_timestamp = timestamp;
+ m_echo = echo;
+}
+
+void
+TcpOptionTSTestCase::DoRun ()
+{
+ TestSerialize ();
+ TestDeserialize ();
+}
+
+void
+TcpOptionTSTestCase::TestSerialize ()
+{
+ TcpOptionTS opt;
+
+ opt.SetTimestamp (m_timestamp);
+ opt.SetEcho (m_echo);
+
+ NS_TEST_EXPECT_MSG_EQ (m_timestamp, opt.GetTimestamp (), "TS isn't saved correctly");
+ NS_TEST_EXPECT_MSG_EQ (m_echo, opt.GetEcho (), "echo isn't saved correctly");
+
+ m_buffer.AddAtStart (opt.GetSerializedSize ());
+
+ opt.Serialize (m_buffer.Begin ());
+}
+
+void
+TcpOptionTSTestCase::TestDeserialize ()
+{
+ TcpOptionTS opt;
+
+ Buffer::Iterator start = m_buffer.Begin ();
+ uint8_t kind = start.PeekU8 ();
+
+ NS_TEST_EXPECT_MSG_EQ (kind, TcpOption::TS, "Different kind found");
+
+ opt.Deserialize (start);
+
+ NS_TEST_EXPECT_MSG_EQ (m_timestamp, opt.GetTimestamp (), "Different TS found");
+ NS_TEST_EXPECT_MSG_EQ (m_echo, opt.GetEcho (), "Different echo found");
+}
+
+void
+TcpOptionTSTestCase::DoTeardown ()
+{
+}
+
+static class TcpOptionTestSuite : public TestSuite
+{
+public:
+ TcpOptionTestSuite ()
+ : TestSuite ("tcp-option", UNIT)
+ {
+ for (uint8_t i=0; i<15; ++i)
+ {
+ AddTestCase (new TcpOptionWSTestCase ("Testing window "
+ "scale value", i), TestCase::QUICK);
+ }
+
+ Ptr<UniformRandomVariable> x = CreateObject<UniformRandomVariable> ();
+
+ for (uint32_t i=0; i<1000; ++i)
+ {
+ AddTestCase (new TcpOptionTSTestCase ("Testing serialization of random "
+ "values for timestamp",
+ x->GetInteger (),
+ x->GetInteger ()), TestCase::QUICK);
+ }
+
+ }
+
+} g_TcpOptionTestSuite;
+
+} // namespace ns3
« no previous file with comments | « src/internet/model/tcp-socket-base.cc ('k') | src/internet/test/tcp-timestamp-test.cc » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b