chunks: modularize pipeline implementation
Change-Id: Iaa5acbb02a583858db6204716947cceeae793a65
Refs: #3636
diff --git a/tests/chunks/discover-version-fixed.t.cpp b/tests/chunks/discover-version-fixed.t.cpp
index a57e5c8..8f76153 100644
--- a/tests/chunks/discover-version-fixed.t.cpp
+++ b/tests/chunks/discover-version-fixed.t.cpp
@@ -31,8 +31,6 @@
namespace chunks {
namespace tests {
-using namespace ndn::tests;
-
class DiscoverVersionFixedFixture : public DiscoverVersionFixture
{
public:
diff --git a/tests/chunks/discover-version-fixture.hpp b/tests/chunks/discover-version-fixture.hpp
index 9009301..a7d8f0b 100644
--- a/tests/chunks/discover-version-fixture.hpp
+++ b/tests/chunks/discover-version-fixture.hpp
@@ -35,20 +35,28 @@
namespace chunks {
namespace tests {
-class DiscoverVersionFixture : public ndn::tests::UnitTestTimeFixture, virtual protected Options
+using namespace ndn::tests;
+
+class DiscoverVersionFixture : public UnitTestTimeFixture, virtual protected Options
{
public:
DiscoverVersionFixture(const Options& options)
: Options(options)
, face(io)
, name("/ndn/chunks/test")
- , isDiscoveryFinished(false)
, discoveredVersion(0)
+ , isDiscoveryFinished(false)
+ {
+ }
+
+ virtual
+ ~DiscoverVersionFixture()
{
}
protected:
- void setDiscover(unique_ptr<DiscoverVersion> disc)
+ void
+ setDiscover(unique_ptr<DiscoverVersion> disc)
{
discover = std::move(disc);
discover->onDiscoverySuccess.connect(bind(&DiscoverVersionFixture::onSuccess, this, _1));
@@ -56,11 +64,11 @@
}
shared_ptr<Data>
- makeDataWithVersion(uint64_t version)
+ makeDataWithVersion(uint64_t version) const
{
auto data = make_shared<Data>(Name(name).appendVersion(version).appendSegment(0));
data->setFinalBlockId(name::Component::fromSegment(0));
- return ndn::tests::signData(data);
+ return signData(data);
}
static Options
@@ -93,8 +101,8 @@
util::DummyClientFace face;
Name name;
unique_ptr<DiscoverVersion> discover;
- bool isDiscoveryFinished;
uint64_t discoveredVersion;
+ bool isDiscoveryFinished;
};
} // namespace tests
diff --git a/tests/chunks/discover-version-iterative.t.cpp b/tests/chunks/discover-version-iterative.t.cpp
index 233f36c..79c6fb7 100644
--- a/tests/chunks/discover-version-iterative.t.cpp
+++ b/tests/chunks/discover-version-iterative.t.cpp
@@ -31,8 +31,6 @@
namespace chunks {
namespace tests {
-using namespace ndn::tests;
-
class DiscoverVersionIterativeFixture : public DiscoverVersionFixture,
protected DiscoverVersionIterativeOptions
{
diff --git a/tests/chunks/pipeline-interests.t.cpp b/tests/chunks/pipeline-interests-fixed-window.t.cpp
similarity index 87%
rename from tests/chunks/pipeline-interests.t.cpp
rename to tests/chunks/pipeline-interests-fixed-window.t.cpp
index 98abfa4..c6291dd 100644
--- a/tests/chunks/pipeline-interests.t.cpp
+++ b/tests/chunks/pipeline-interests-fixed-window.t.cpp
@@ -23,66 +23,31 @@
* @author Andrea Tosatto
*/
-#include "tools/chunks/catchunks/pipeline-interests.hpp"
+#include "tools/chunks/catchunks/pipeline-interests-fixed-window.hpp"
#include "tools/chunks/catchunks/data-fetcher.hpp"
-#include "tests/test-common.hpp"
-#include <ndn-cxx/util/dummy-client-face.hpp>
+#include "pipeline-interests-fixture.hpp"
namespace ndn {
namespace chunks {
namespace tests {
-using namespace ndn::tests;
-
-class PipelineInterestsFixture : public UnitTestTimeFixture
+class PipelineInterestFixedWindowFixture : public PipelineInterestsFixture
{
public:
- typedef PipelineInterestsOptions Options;
+ typedef PipelineInterestsFixedWindowOptions Options;
public:
- PipelineInterestsFixture()
- : face(io)
+ PipelineInterestFixedWindowFixture()
+ : PipelineInterestsFixture()
, opt(makeOptions())
- , name("/ndn/chunks/test")
- , pipeline(face, opt)
- , nDataSegments(0)
- , nReceivedSegments(0)
- , hasFailed(false)
{
+ setPipeline(make_unique<PipelineInterestsFixedWindow>(face, PipelineInterestsFixedWindow::Options(opt)));
}
-
protected:
- shared_ptr<Data>
- makeDataWithSegment(uint64_t segmentNo, bool setFinalBlockId = true)
- {
- auto data = make_shared<Data>(Name(name).appendVersion(0).appendSegment(segmentNo));
- if (setFinalBlockId)
- data->setFinalBlockId(name::Component::fromSegment(nDataSegments - 1));
- return signData(data);
- }
-
- void
- runWithData(const Data& data)
- {
- pipeline.runWithExcludedSegment(data,
- bind(&PipelineInterestsFixture::onData, this, _1, _2),
- bind(&PipelineInterestsFixture::onFailure, this, _1));
- }
+ Options opt;
private:
- void
- onData(const Interest& interest, const Data& data)
- {
- nReceivedSegments++;
- }
-
- void
- onFailure(const std::string& reason)
- {
- hasFailed = true;
- }
-
static Options
makeOptions()
{
@@ -93,22 +58,12 @@
options.maxPipelineSize = 5;
return options;
}
-
-protected:
- boost::asio::io_service io;
- util::DummyClientFace face;
- Options opt;
- Name name;
- PipelineInterests pipeline;
- uint64_t nDataSegments;
- uint64_t nReceivedSegments;
- bool hasFailed;
};
BOOST_AUTO_TEST_SUITE(Chunks)
-BOOST_AUTO_TEST_SUITE(TestPipelineInterests)
+BOOST_AUTO_TEST_SUITE(TestPipelineInterestsFixedWindow)
-BOOST_FIXTURE_TEST_CASE(FewerSegmentsThanPipelineCapacity, PipelineInterestsFixture)
+BOOST_FIXTURE_TEST_CASE(FewerSegmentsThanPipelineCapacity, PipelineInterestFixedWindowFixture)
{
nDataSegments = 3;
BOOST_ASSERT(nDataSegments <= opt.maxPipelineSize);
@@ -138,7 +93,7 @@
BOOST_CHECK_EQUAL(hasFailed, true);
}
-BOOST_FIXTURE_TEST_CASE(FullPipeline, PipelineInterestsFixture)
+BOOST_FIXTURE_TEST_CASE(FullPipeline, PipelineInterestFixedWindowFixture)
{
nDataSegments = 13;
BOOST_ASSERT(nDataSegments > opt.maxPipelineSize);
@@ -171,7 +126,7 @@
BOOST_CHECK_EQUAL(hasFailed, false);
}
-BOOST_FIXTURE_TEST_CASE(TimeoutAllSegments, PipelineInterestsFixture)
+BOOST_FIXTURE_TEST_CASE(TimeoutAllSegments, PipelineInterestFixedWindowFixture)
{
nDataSegments = 13;
BOOST_ASSERT(nDataSegments > opt.maxPipelineSize);
@@ -196,7 +151,7 @@
BOOST_CHECK_EQUAL(hasFailed, true);
}
-BOOST_FIXTURE_TEST_CASE(TimeoutAfterFinalBlockIdReceived, PipelineInterestsFixture)
+BOOST_FIXTURE_TEST_CASE(TimeoutAfterFinalBlockIdReceived, PipelineInterestFixedWindowFixture)
{
// the FinalBlockId is sent with the first segment, after the first segment failure the pipeline
// should fail
@@ -241,7 +196,7 @@
BOOST_CHECK_EQUAL(face.getNPendingInterests(), 0);
}
-BOOST_FIXTURE_TEST_CASE(TimeoutBeforeFinalBlockIdReceived, PipelineInterestsFixture)
+BOOST_FIXTURE_TEST_CASE(TimeoutBeforeFinalBlockIdReceived, PipelineInterestFixedWindowFixture)
{
// the FinalBlockId is sent only with the last segment, all segments are sent except for the
// second one (segment #1); all segments are received correctly until the FinalBlockId is received
@@ -294,7 +249,7 @@
BOOST_CHECK_EQUAL(hasFailed, true);
}
-BOOST_FIXTURE_TEST_CASE(SegmentReceivedAfterTimeout, PipelineInterestsFixture)
+BOOST_FIXTURE_TEST_CASE(SegmentReceivedAfterTimeout, PipelineInterestFixedWindowFixture)
{
// the FinalBlockId is never sent, all the pipeline elements with a segment number greater than
// segment #0 will fail, after this failure also segment #0 fail and this should trigger an error
@@ -327,7 +282,7 @@
BOOST_CHECK_EQUAL(hasFailed, true);
}
-BOOST_FIXTURE_TEST_CASE(CongestionAllSegments, PipelineInterestsFixture)
+BOOST_FIXTURE_TEST_CASE(CongestionAllSegments, PipelineInterestFixedWindowFixture)
{
nDataSegments = 13;
BOOST_ASSERT(nDataSegments > opt.maxPipelineSize);
diff --git a/tests/chunks/pipeline-interests-fixture.hpp b/tests/chunks/pipeline-interests-fixture.hpp
new file mode 100644
index 0000000..8da4dc1
--- /dev/null
+++ b/tests/chunks/pipeline-interests-fixture.hpp
@@ -0,0 +1,104 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2016, Regents of the University of California,
+ * Colorado State University,
+ * University Pierre & Marie Curie, Sorbonne University.
+ *
+ * This file is part of ndn-tools (Named Data Networking Essential Tools).
+ * See AUTHORS.md for complete list of ndn-tools authors and contributors.
+ *
+ * ndn-tools is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * ndn-tools 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
+ * ndn-tools, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
+ *
+ * @author Andrea Tosatto
+ * @author Weiwei Liu
+ */
+
+#ifndef NDN_TOOLS_TESTS_CHUNKS_PIPELINE_INTERESTS_FIXTURE_HPP
+#define NDN_TOOLS_TESTS_CHUNKS_PIPELINE_INTERESTS_FIXTURE_HPP
+
+#include "tools/chunks/catchunks/pipeline-interests.hpp"
+
+#include "tests/test-common.hpp"
+#include <ndn-cxx/util/dummy-client-face.hpp>
+
+namespace ndn {
+namespace chunks {
+namespace tests {
+
+using namespace ndn::tests;
+
+class PipelineInterestsFixture : public UnitTestTimeFixture
+{
+public:
+ PipelineInterestsFixture()
+ : face(io)
+ , name("/ndn/chunks/test")
+ , nDataSegments(0)
+ , nReceivedSegments(0)
+ , hasFailed(false)
+ {
+ }
+
+protected:
+ void
+ setPipeline(unique_ptr<PipelineInterests> pline)
+ {
+ pipeline = std::move(pline);
+ }
+
+ shared_ptr<Data>
+ makeDataWithSegment(uint64_t segmentNo, bool setFinalBlockId = true) const
+ {
+ auto data = make_shared<Data>(Name(name).appendVersion(0).appendSegment(segmentNo));
+ if (setFinalBlockId)
+ data->setFinalBlockId(name::Component::fromSegment(nDataSegments - 1));
+ return signData(data);
+ }
+
+ void
+ runWithData(const Data& data)
+ {
+ pipeline->run(data,
+ bind(&PipelineInterestsFixture::onData, this, _1, _2),
+ bind(&PipelineInterestsFixture::onFailure, this, _1));
+ }
+
+private:
+ void
+ onData(const Interest& interest, const Data& data)
+ {
+ nReceivedSegments++;
+ }
+
+ void
+ onFailure(const std::string& reason)
+ {
+ hasFailed = true;
+ }
+
+protected:
+ boost::asio::io_service io;
+ util::DummyClientFace face;
+ Name name;
+ unique_ptr<PipelineInterests> pipeline;
+ uint64_t nDataSegments;
+ uint64_t nReceivedSegments;
+ bool hasFailed;
+};
+
+} // namespace tests
+} // namespace chunks
+} // namespace ndn
+
+#endif // NDN_TOOLS_TESTS_CHUNKS_PIPELINE_INTERESTS_FIXTURE_HPP