View | Details | Raw Unified | Return to bug 1982
Collapse All | Expand All

(-)a/src/internet/test/tcp-header-test.cc (-88 / +67 lines)
 Lines 27-123    Link Here 
27
27
28
namespace ns3 {
28
namespace ns3 {
29
29
30
#define GET_RANDOM_UINT32(RandomVariable) \
31
  static_cast<uint32_t> (RandomVariable->GetInteger (0, UINT32_MAX))
32
33
#define GET_RANDOM_UINT16(RandomVariable) \
34
  static_cast<uint16_t> (RandomVariable->GetInteger (0, UINT16_MAX))
35
36
#define GET_RANDOM_UINT8(RandomVariable) \
37
  static_cast<uint8_t> (RandomVariable->GetInteger (0, UINT8_MAX))
38
39
#define GET_RANDOM_UINT6(RandomVariable) \
40
  static_cast<uint8_t> (RandomVariable->GetInteger (0, UINT8_MAX >> 2))
41
30
class TcpHeaderGetSetTestCase : public TestCase
42
class TcpHeaderGetSetTestCase : public TestCase
31
{
43
{
32
public:
44
public:
33
  TcpHeaderGetSetTestCase (uint16_t sourcePort, uint16_t destinationPort,
45
  TcpHeaderGetSetTestCase (std::string name);
34
                           SequenceNumber32 sequenceNumber, SequenceNumber32 ackNumber,
35
                           uint8_t flags, uint16_t m_windowSize, uint16_t m_urgentPointer,
36
                           std::string name);
37
protected:
46
protected:
38
  uint16_t m_sourcePort;        //!< Source port
39
  uint16_t m_destinationPort;   //!< Destination port
40
  SequenceNumber32 m_sequenceNumber;  //!< Sequence number
41
  SequenceNumber32 m_ackNumber;       //!< ACK number
42
  uint8_t m_flags;              //!< Flags (really a uint6_t)
43
  uint16_t m_windowSize;        //!< Window size
44
  uint16_t m_urgentPointer;     //!< Urgent pointer
45
46
private:
47
private:
47
  virtual void DoRun (void);
48
  virtual void DoRun (void);
48
  virtual void DoTeardown (void);
49
  virtual void DoTeardown (void);
49
50
50
  TcpHeader m_header;
51
  Buffer m_buffer;
52
};
51
};
53
52
54
TcpHeaderGetSetTestCase::TcpHeaderGetSetTestCase (
53
TcpHeaderGetSetTestCase::TcpHeaderGetSetTestCase (std::string name) : TestCase (name)
55
  uint16_t sourcePort, uint16_t destinationPort,
56
  SequenceNumber32 sequenceNumber, SequenceNumber32 ackNumber,
57
  uint8_t flags, uint16_t windowSize, uint16_t urgentPointer,
58
  std::string name) : TestCase (name)
59
{
54
{
60
  m_sourcePort = sourcePort;
55
}
61
  m_destinationPort = destinationPort;
56
void TcpHeaderGetSetTestCase::DoRun (void)
62
  m_sequenceNumber = sequenceNumber;
57
{
63
  m_ackNumber = ackNumber;
58
  uint16_t sourcePort;        //!< Source port
64
  m_flags = flags;
59
  uint16_t destinationPort;   //!< Destination port
65
  m_windowSize = windowSize;
60
  SequenceNumber32 sequenceNumber;  //!< Sequence number
66
  m_urgentPointer = urgentPointer;
61
  SequenceNumber32 ackNumber;       //!< ACK number
62
  uint8_t flags;              //!< Flags (really a uint6_t)
63
  uint16_t windowSize;        //!< Window size
64
  uint16_t urgentPointer;     //!< Urgent pointer
65
  TcpHeader header;
66
  Buffer buffer;
67
67
68
  m_header.SetSourcePort (m_sourcePort);
68
  Ptr<UniformRandomVariable> x = CreateObject<UniformRandomVariable> ();
69
  m_header.SetDestinationPort (m_destinationPort);
69
  for (uint32_t i = 0; i < 1000; ++i)
70
  m_header.SetSequenceNumber (m_sequenceNumber);
70
    {
71
  m_header.SetAckNumber (m_ackNumber);
71
      sourcePort = GET_RANDOM_UINT16 (x);
72
  m_header.SetFlags (m_flags);
72
      destinationPort = GET_RANDOM_UINT16 (x);
73
  m_header.SetWindowSize (m_windowSize);
73
      sequenceNumber = SequenceNumber32 (GET_RANDOM_UINT32 (x));
74
  m_header.SetUrgentPointer (m_urgentPointer);
74
      ackNumber = SequenceNumber32 (GET_RANDOM_UINT32 (x));
75
      flags = GET_RANDOM_UINT6 (x);
76
      windowSize = GET_RANDOM_UINT16 (x);
77
      urgentPointer = GET_RANDOM_UINT16 (x);
75
78
76
  NS_TEST_ASSERT_MSG_EQ (m_header.GetLength (), 5, "TcpHeader without option is"
79
      header.SetSourcePort (sourcePort);
80
      header.SetDestinationPort (destinationPort);
81
      header.SetSequenceNumber (sequenceNumber);
82
      header.SetAckNumber (ackNumber);
83
      header.SetFlags (flags);
84
      header.SetWindowSize (windowSize);
85
      header.SetUrgentPointer (urgentPointer);
86
87
      NS_TEST_ASSERT_MSG_EQ (header.GetLength (), 5, "TcpHeader without option is"
77
                         " not 5 word");
88
                         " not 5 word");
78
89
79
  m_buffer.AddAtStart (m_header.GetSerializedSize ());
90
      buffer.AddAtStart (header.GetSerializedSize ());
80
  m_header.Serialize (m_buffer.Begin ());
91
      header.Serialize (buffer.Begin ());
81
}
82
92
83
void TcpHeaderGetSetTestCase::DoRun (void)
93
      NS_TEST_ASSERT_MSG_EQ (sourcePort, header.GetSourcePort (),
84
{
85
  NS_TEST_ASSERT_MSG_EQ (m_sourcePort, m_header.GetSourcePort (),
86
                         "Different source port found");
94
                         "Different source port found");
87
  NS_TEST_ASSERT_MSG_EQ (m_destinationPort, m_header.GetDestinationPort (),
95
      NS_TEST_ASSERT_MSG_EQ (destinationPort, header.GetDestinationPort (),
88
                         "Different destination port found");
96
                         "Different destination port found");
89
  NS_TEST_ASSERT_MSG_EQ (m_sequenceNumber, m_header.GetSequenceNumber (),
97
      NS_TEST_ASSERT_MSG_EQ (sequenceNumber, header.GetSequenceNumber (),
90
                         "Different sequence number found");
98
                         "Different sequence number found");
91
  NS_TEST_ASSERT_MSG_EQ (m_ackNumber, m_header.GetAckNumber (),
99
      NS_TEST_ASSERT_MSG_EQ (ackNumber, header.GetAckNumber (),
92
                         "Different ack number found");
100
                         "Different ack number found");
93
  NS_TEST_ASSERT_MSG_EQ (m_flags, m_header.GetFlags (),
101
      NS_TEST_ASSERT_MSG_EQ (flags, header.GetFlags (),
94
                         "Different flags found");
102
                         "Different flags found");
95
  NS_TEST_ASSERT_MSG_EQ (m_windowSize, m_header.GetWindowSize (),
103
      NS_TEST_ASSERT_MSG_EQ (windowSize, header.GetWindowSize (),
96
                         "Different window size found");
104
                         "Different window size found");
97
  NS_TEST_ASSERT_MSG_EQ (m_urgentPointer, m_header.GetUrgentPointer (),
105
      NS_TEST_ASSERT_MSG_EQ (urgentPointer, header.GetUrgentPointer (),
98
                         "Different urgent pointer found");
106
                         "Different urgent pointer found");
99
107
100
  NS_TEST_ASSERT_MSG_EQ (m_header.GetLength (), 5, "TcpHeader without option is"
108
      NS_TEST_ASSERT_MSG_EQ (header.GetLength (), 5, "TcpHeader without option is"
101
                         " not 5 word");
109
                         " not 5 word");
102
110
103
  TcpHeader copyHeader;
111
      TcpHeader copyHeader;
104
112
105
  copyHeader.Deserialize (m_buffer.Begin ());
113
      copyHeader.Deserialize (buffer.Begin ());
106
114
107
  NS_TEST_ASSERT_MSG_EQ (m_sourcePort, copyHeader.GetSourcePort (),
115
      NS_TEST_ASSERT_MSG_EQ (sourcePort, copyHeader.GetSourcePort (),
108
                         "Different source port found in deserialized header");
116
                         "Different source port found in deserialized header");
109
  NS_TEST_ASSERT_MSG_EQ (m_destinationPort, copyHeader.GetDestinationPort (),
117
      NS_TEST_ASSERT_MSG_EQ (destinationPort, copyHeader.GetDestinationPort (),
110
                         "Different destination port found in deserialized header");
118
                         "Different destination port found in deserialized header");
111
  NS_TEST_ASSERT_MSG_EQ (m_sequenceNumber, copyHeader.GetSequenceNumber (),
119
      NS_TEST_ASSERT_MSG_EQ (sequenceNumber, copyHeader.GetSequenceNumber (),
112
                         "Different sequence number found in deserialized header");
120
                         "Different sequence number found in deserialized header");
113
  NS_TEST_ASSERT_MSG_EQ (m_ackNumber, copyHeader.GetAckNumber (),
121
      NS_TEST_ASSERT_MSG_EQ (ackNumber, copyHeader.GetAckNumber (),
114
                         "Different ack number found in deserialized header");
122
                         "Different ack number found in deserialized header");
115
  NS_TEST_ASSERT_MSG_EQ (m_flags, copyHeader.GetFlags (),
123
      NS_TEST_ASSERT_MSG_EQ (flags, copyHeader.GetFlags (),
116
                         "Different flags found in deserialized header");
124
                         "Different flags found in deserialized header");
117
  NS_TEST_ASSERT_MSG_EQ (m_windowSize, copyHeader.GetWindowSize (),
125
      NS_TEST_ASSERT_MSG_EQ (windowSize, copyHeader.GetWindowSize (),
118
                         "Different window size found in deserialized header");
126
                         "Different window size found in deserialized header");
119
  NS_TEST_ASSERT_MSG_EQ (m_urgentPointer, copyHeader.GetUrgentPointer (),
127
      NS_TEST_ASSERT_MSG_EQ (urgentPointer, copyHeader.GetUrgentPointer (),
120
                         "Different urgent pointer found in deserialized header");
128
                         "Different urgent pointer found in deserialized header");
129
    }
121
}
130
}
122
131
123
void TcpHeaderGetSetTestCase::DoTeardown (void)
132
void TcpHeaderGetSetTestCase::DoTeardown (void)
 Lines 313-356    Link Here 
313
322
314
}
323
}
315
324
316
#define GET_RANDOM_UINT32(RandomVariable) \
317
  static_cast<uint32_t> (RandomVariable->GetInteger (0, UINT32_MAX))
318
319
#define GET_RANDOM_UINT16(RandomVariable) \
320
  static_cast<uint16_t> (RandomVariable->GetInteger (0, UINT16_MAX))
321
322
#define GET_RANDOM_UINT8(RandomVariable) \
323
  static_cast<uint8_t> (RandomVariable->GetInteger (0, UINT8_MAX))
324
325
#define GET_RANDOM_UINT6(RandomVariable) \
326
  static_cast<uint8_t> (RandomVariable->GetInteger (0, UINT8_MAX >> 2))
327
328
static class TcpHeaderTestSuite : public TestSuite
325
static class TcpHeaderTestSuite : public TestSuite
329
{
326
{
330
public:
327
public:
331
  TcpHeaderTestSuite ()
328
  TcpHeaderTestSuite ()
332
    : TestSuite ("tcp-header", UNIT)
329
    : TestSuite ("tcp-header", UNIT)
333
  {
330
  {
334
    Ptr<UniformRandomVariable> x = CreateObject<UniformRandomVariable> ();
331
    AddTestCase (new TcpHeaderGetSetTestCase ("GetSet test cases"), TestCase::QUICK);
335
332
    AddTestCase (new TcpHeaderWithRFC793OptionTestCase ("Test for options in RFC 793"), TestCase::QUICK);
336
    for (uint32_t i = 0; i < 1000; ++i)
337
      {
338
        std::stringstream ss;
339
        ss << i;
340
341
        AddTestCase (new TcpHeaderGetSetTestCase (GET_RANDOM_UINT16 (x),
342
                                                  GET_RANDOM_UINT16 (x),
343
                                                  SequenceNumber32 (GET_RANDOM_UINT32 (x)),
344
                                                  SequenceNumber32 (GET_RANDOM_UINT32 (x)),
345
                                                  GET_RANDOM_UINT6 (x),
346
                                                  GET_RANDOM_UINT16 (x),
347
                                                  GET_RANDOM_UINT16 (x),
348
                                                  "Case number " + ss.str ()),
349
                     TestCase::QUICK);
350
      }
351
352
    AddTestCase (new TcpHeaderWithRFC793OptionTestCase ("Test for options in RFC 793"),
353
                 TestCase::QUICK);
354
  }
333
  }
355
334
356
} g_TcpHeaderTestSuite;
335
} g_TcpHeaderTestSuite;
(-)a/src/internet/test/tcp-option-test.cc (-18 / +12 lines)
 Lines 93-99    Link Here 
93
class TcpOptionTSTestCase : public TestCase
93
class TcpOptionTSTestCase : public TestCase
94
{
94
{
95
public:
95
public:
96
  TcpOptionTSTestCase (std::string name, uint32_t timestamp, uint32_t echo);
96
  TcpOptionTSTestCase (std::string name);
97
97
98
  void TestSerialize ();
98
  void TestSerialize ();
99
  void TestDeserialize ();
99
  void TestDeserialize ();
 Lines 108-126    Link Here 
108
};
108
};
109
109
110
110
111
TcpOptionTSTestCase::TcpOptionTSTestCase (std::string name, uint32_t timestamp,
111
TcpOptionTSTestCase::TcpOptionTSTestCase (std::string name)
112
                                          uint32_t echo)
113
  : TestCase (name)
112
  : TestCase (name)
114
{
113
{
115
  m_timestamp = timestamp;
116
  m_echo = echo;
117
}
114
}
118
115
119
void
116
void
120
TcpOptionTSTestCase::DoRun ()
117
TcpOptionTSTestCase::DoRun ()
121
{
118
{
122
  TestSerialize ();
119
  Ptr<UniformRandomVariable> x = CreateObject<UniformRandomVariable> ();
123
  TestDeserialize ();
120
121
  for (uint32_t i = 0; i < 1000; ++i)
122
    {
123
      m_timestamp = x->GetInteger ();
124
      m_echo = x->GetInteger ();
125
      TestSerialize ();
126
      TestDeserialize ();
127
    }
124
}
128
}
125
129
126
void
130
void
 Lines 171-187    Link Here 
171
        AddTestCase (new TcpOptionWSTestCase ("Testing window "
175
        AddTestCase (new TcpOptionWSTestCase ("Testing window "
172
                                              "scale value", i), TestCase::QUICK);
176
                                              "scale value", i), TestCase::QUICK);
173
      }
177
      }
174
178
    AddTestCase (new TcpOptionTSTestCase ("Testing serialization of random values for timestamp"), TestCase::QUICK);
175
    Ptr<UniformRandomVariable> x = CreateObject<UniformRandomVariable> ();
176
177
    for (uint32_t i = 0; i < 1000; ++i)
178
      {
179
        AddTestCase (new TcpOptionTSTestCase ("Testing serialization of random "
180
                                              "values for timestamp",
181
                                              x->GetInteger (),
182
                                              x->GetInteger ()), TestCase::QUICK);
183
      }
184
185
  }
179
  }
186
180
187
} g_TcpOptionTestSuite;
181
} g_TcpOptionTestSuite;

Return to bug 1982