blob: 70a10a79fcb1cd011072ff7d3bcb63cabded0002 [file] [log] [blame]
Alexander Afanasyevf1e013f2012-07-11 17:59:40 -07001/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2/*
3 * Copyright (c) 2011 University of California, Los Angeles
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation;
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 *
Alexander Afanasyevcf6dc922012-08-10 16:55:27 -070018 * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
19 * Ilya Moiseenko <iliamo@cs.ucla.edu>
Alexander Afanasyevf1e013f2012-07-11 17:59:40 -070020 */
21
22#include "ns3/core-module.h"
23#include "ns3/ndnSIM-module.h"
24#include "ndnSIM-serialization.h"
25
26#include <boost/lexical_cast.hpp>
Alexander Afanasyevee762552013-07-10 22:29:22 -070027#include "ns3/ndnSIM/model/wire/ndnsim.h"
Alexander Afanasyevf1e013f2012-07-11 17:59:40 -070028
29using namespace std;
30
Alexander Afanasyevcf6dc922012-08-10 16:55:27 -070031namespace ns3 {
32
33using namespace ndn;
Alexander Afanasyevf1e013f2012-07-11 17:59:40 -070034
Alexander Afanasyev2b4c9472012-08-09 15:00:38 -070035NS_LOG_COMPONENT_DEFINE ("ndn.Serialization");
Alexander Afanasyevf1e013f2012-07-11 17:59:40 -070036
37void
38InterestSerializationTest::DoRun ()
39{
Alexander Afanasyevee762552013-07-10 22:29:22 -070040 Ptr<Interest> source = Create<Interest> ();
Alexander Afanasyevbd9c18e2012-11-19 15:23:41 -080041
Alexander Afanasyevee762552013-07-10 22:29:22 -070042 source->SetName (Create<Name> (boost::lexical_cast<Name> ("/test/test2")));
43 NS_TEST_ASSERT_MSG_EQ (source->GetName (), boost::lexical_cast<Name> ("/test/test2"), "set/get name failed");
Alexander Afanasyevf1e013f2012-07-11 17:59:40 -070044
Alexander Afanasyevee762552013-07-10 22:29:22 -070045 source->SetScope (2);
46 NS_TEST_ASSERT_MSG_EQ (source->GetScope (), 2, "set/get scope failed");
Alexander Afanasyevf1e013f2012-07-11 17:59:40 -070047
Alexander Afanasyevee762552013-07-10 22:29:22 -070048 source->SetInterestLifetime (Seconds (100));
49 NS_TEST_ASSERT_MSG_EQ (source->GetInterestLifetime (), Seconds (100), "set/get interest lifetime failed");
Alexander Afanasyevf1e013f2012-07-11 17:59:40 -070050
Alexander Afanasyevee762552013-07-10 22:29:22 -070051 source->SetNonce (200);
52 NS_TEST_ASSERT_MSG_EQ (source->GetNonce (), 200, "set/get nonce failed");
Alexander Afanasyevf1e013f2012-07-11 17:59:40 -070053
Alexander Afanasyevee762552013-07-10 22:29:22 -070054 source->SetNack (10);
55 NS_TEST_ASSERT_MSG_EQ (source->GetNack (), 10, "set/get NACK failed");
Alexander Afanasyevf1e013f2012-07-11 17:59:40 -070056
Alexander Afanasyevee762552013-07-10 22:29:22 -070057 NS_TEST_ASSERT_MSG_EQ (source->GetWire (), 0, "Wire should be empty");
58 NS_TEST_ASSERT_MSG_NE (source->GetPayload (), 0, "Payload should not be empty");
59
60 Ptr<Packet> packet = wire::ndnSIM::Interest::ToWire (source);
61
62 NS_TEST_ASSERT_MSG_NE (source->GetWire (), 0, "Wire should not be empty now");
63
64 Ptr<Interest> target = wire::ndnSIM::Interest::FromWire (packet);
Alexander Afanasyevf1e013f2012-07-11 17:59:40 -070065
Alexander Afanasyevee762552013-07-10 22:29:22 -070066 NS_TEST_ASSERT_MSG_EQ (source->GetName () , target->GetName () , "source/target name failed");
67 NS_TEST_ASSERT_MSG_EQ (source->GetScope () , target->GetScope () , "source/target scope failed");
68 NS_TEST_ASSERT_MSG_EQ (source->GetInterestLifetime (), target->GetInterestLifetime (), "source/target interest lifetime failed");
69 NS_TEST_ASSERT_MSG_EQ (source->GetNonce () , target->GetNonce () , "source/target nonce failed");
70 NS_TEST_ASSERT_MSG_EQ (source->GetNack () , target->GetNack () , "source/target NACK failed");
Alexander Afanasyevabb493a2013-07-19 15:31:33 -070071
72 NS_TEST_ASSERT_MSG_EQ (source->GetExclude () , 0, "exclude should be empty");
73 NS_TEST_ASSERT_MSG_EQ (target->GetExclude () , 0, "exclude should be empty");
74
75 Ptr<Exclude> exclude = Create<Exclude> ();
76 exclude->excludeAfter (name::Component ());
77 source->SetExclude (exclude);
78
79 NS_TEST_ASSERT_MSG_EQ (boost::lexical_cast<std::string> (*source->GetExclude ()),
80 " ----> ", "exclude should contain only <ANY/>");
81
82 exclude->appendExclude (name::Component ("alex"), false);
83 exclude->excludeAfter (name::Component ("zhenkai"));
84
85 source->SetExclude (exclude);
86 NS_TEST_ASSERT_MSG_EQ (boost::lexical_cast<std::string> (*source->GetExclude ()),
87 " ----> alex zhenkai ----> ", "exclude should contain only <ANY/>");
88
89 NS_TEST_ASSERT_MSG_EQ (source->GetWire (), 0, "Wire should be empty");
90 NS_TEST_ASSERT_MSG_NE (source->GetPayload (), 0, "Payload should not be empty");
91
92 packet = wire::ndnSIM::Interest::ToWire (source);
93 target = wire::ndnSIM::Interest::FromWire (packet);
94 NS_TEST_ASSERT_MSG_NE (target->GetExclude (), 0, "exclude should not be empty");
95
96 NS_TEST_ASSERT_MSG_EQ (boost::lexical_cast<std::string> (*target->GetExclude ()),
97 " ----> alex zhenkai ----> ", "exclude should contain only <ANY/>");
Alexander Afanasyevf1e013f2012-07-11 17:59:40 -070098}
99
100void
101ContentObjectSerializationTest::DoRun ()
102{
Alexander Afanasyevee762552013-07-10 22:29:22 -0700103 Ptr<ContentObject> source = Create<ContentObject> (Create<Packet> (1024));
Alexander Afanasyev11fdadd2012-11-19 15:43:17 -0800104
Alexander Afanasyevee762552013-07-10 22:29:22 -0700105 source->SetName (Create<Name> (boost::lexical_cast<Name> ("/test/test2/1")));
106 NS_TEST_ASSERT_MSG_EQ (source->GetName (), boost::lexical_cast<Name> ("/test/test2/1"), "set/get name failed");
Alexander Afanasyev11fdadd2012-11-19 15:43:17 -0800107
Alexander Afanasyevee762552013-07-10 22:29:22 -0700108 source->SetFreshness (Seconds (10));
109 NS_TEST_ASSERT_MSG_EQ (source->GetFreshness (), Seconds (10), "set/get freshness failed");
Alexander Afanasyev11fdadd2012-11-19 15:43:17 -0800110
Alexander Afanasyevee762552013-07-10 22:29:22 -0700111 source->SetTimestamp (Seconds (100));
112 NS_TEST_ASSERT_MSG_EQ (source->GetTimestamp (), Seconds (100), "set/get timestamp failed");
Alexander Afanasyev11fdadd2012-11-19 15:43:17 -0800113
Alexander Afanasyevee762552013-07-10 22:29:22 -0700114 NS_TEST_ASSERT_MSG_EQ (source->GetSignature (), 0, "initialization of signature failed");
Alexander Afanasyevd6e5c5f2013-03-30 19:09:56 -0700115
Alexander Afanasyevee762552013-07-10 22:29:22 -0700116 Ptr<Packet> packet = wire::ndnSIM::Data::ToWire (source);
117 int size = packet->GetSize ();
118
119 source->SetSignature (10);
120 NS_TEST_ASSERT_MSG_EQ (source->GetSignature (), 10, "set/get signature failed");
121
122 packet = wire::ndnSIM::Data::ToWire (source);
123 NS_TEST_ASSERT_MSG_EQ (packet->GetSize (), static_cast<unsigned int> (size + 4), "Signature size should have increased by 4");
124
125 Ptr<ContentObject> target = wire::ndnSIM::Data::FromWire (packet);
Alexander Afanasyevd6e5c5f2013-03-30 19:09:56 -0700126
Alexander Afanasyevee762552013-07-10 22:29:22 -0700127 NS_TEST_ASSERT_MSG_EQ (source->GetName () , target->GetName () , "source/target name failed");
128 NS_TEST_ASSERT_MSG_EQ (source->GetFreshness (), target->GetFreshness (), "source/target freshness failed");
129 NS_TEST_ASSERT_MSG_EQ (source->GetTimestamp (), target->GetTimestamp (), "source/target timestamp failed");
130 NS_TEST_ASSERT_MSG_EQ (source->GetSignature (), target->GetSignature (), "source/target signature failed");
Alexander Afanasyevf1e013f2012-07-11 17:59:40 -0700131}
132
133}