util: rename Scheduler::scheduleEvent to schedule
Deprecate Scheduler::scheduleEvent and Scheduler::cancelEvent refs #4883 Change-Id: I2bb16922aff04300d92dfd276dd436958a96929a
This commit is contained in:
1 parent
fd6123173d
commit
a5f233e103
18 files changed
+139
-185
No files matched your search
@@ -1,6 +1,6 @@
|
||||
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||
/*
|
||||
* Copyright (c) 2013-2018 Regents of the University of California.
|
||||
* Copyright (c) 2013-2019 Regents of the University of California.
|
||||
*
|
||||
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
|
||||
*
|
||||
@@ -56,7 +56,7 @@ public:
|
||||
std::cout << "Sending " << interest << std::endl;
|
||||
|
||||
// Schedule a new event
|
||||
m_scheduler.scheduleEvent(3_s, [this] { delayedInterest(); });
|
||||
m_scheduler.schedule(3_s, [this] { delayedInterest(); });
|
||||
|
||||
// m_ioService.run() will block until all events finished or m_ioService.stop() is called
|
||||
m_ioService.run();
|
||||
|
||||
+1
-1
@@ -318,7 +318,7 @@ Face::doProcessEvents(time::milliseconds timeout, bool keepThread)
|
||||
}
|
||||
|
||||
if (timeout > time::milliseconds::zero()) {
|
||||
m_impl->m_processEventsTimeoutEvent = m_impl->m_scheduler.scheduleEvent(timeout,
|
||||
m_impl->m_processEventsTimeoutEvent = m_impl->m_scheduler.schedule(timeout,
|
||||
[&io = m_ioService, &work = m_impl->m_ioServiceWork] {
|
||||
io.stop();
|
||||
work.reset();
|
||||
|
||||
@@ -185,8 +185,8 @@ private:
|
||||
void
|
||||
scheduleTimeoutEvent(Scheduler& scheduler)
|
||||
{
|
||||
m_timeoutEvent = scheduler.scheduleEvent(m_interest->getInterestLifetime(),
|
||||
[=] { this->invokeTimeoutCallback(); });
|
||||
m_timeoutEvent = scheduler.schedule(m_interest->getInterestLifetime(),
|
||||
[=] { this->invokeTimeoutCallback(); });
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -45,7 +45,7 @@ InMemoryStorageEntry::setData(const Data& data)
|
||||
void
|
||||
InMemoryStorageEntry::scheduleMarkStale(Scheduler& sched, time::nanoseconds after)
|
||||
{
|
||||
m_markStaleEventId = sched.scheduleEvent(after, [this] { m_isFresh = false; });
|
||||
m_markStaleEventId = sched.schedule(after, [this] { m_isFresh = false; });
|
||||
}
|
||||
|
||||
} // namespace ndn
|
||||
+2
-2
@@ -57,7 +57,7 @@ public:
|
||||
|
||||
m_resolver.async_resolve(q, bind(&Resolver::onResolveResult, this, _1, _2, self));
|
||||
|
||||
m_resolveTimeout = m_scheduler.scheduleEvent(timeout, [=] { onResolveTimeout(self); });
|
||||
m_resolveTimeout = m_scheduler.schedule(timeout, [=] { onResolveTimeout(self); });
|
||||
}
|
||||
|
||||
iterator
|
||||
@@ -71,7 +71,7 @@ private:
|
||||
onResolveResult(const boost::system::error_code& error,
|
||||
iterator it, const shared_ptr<Resolver>& self)
|
||||
{
|
||||
m_scheduler.cancelEvent(m_resolveTimeout);
|
||||
m_resolveTimeout.cancel();
|
||||
// ensure the Resolver isn't destructed while callbacks are still pending, see #2653
|
||||
m_resolver.get_io_service().post([self] {});
|
||||
|
||||
|
||||
@@ -184,7 +184,7 @@ void
|
||||
NetworkMonitorImplOsx::scheduleCfLoop()
|
||||
{
|
||||
// poll each second for new events
|
||||
m_cfLoopEvent = m_scheduler.scheduleEvent(1_s, [this] {
|
||||
m_cfLoopEvent = m_scheduler.schedule(1_s, [this] {
|
||||
// this should dispatch ready events and exit
|
||||
CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, true);
|
||||
scheduleCfLoop();
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||
/*
|
||||
* Copyright (c) 2013-2018 Regents of the University of California.
|
||||
* Copyright (c) 2013-2019 Regents of the University of California.
|
||||
*
|
||||
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
|
||||
*
|
||||
@@ -85,8 +85,8 @@ CertificateFetcherFromNetwork::nackCallback(const lp::Nack& nack,
|
||||
|
||||
--certRequest->nRetriesLeft;
|
||||
if (certRequest->nRetriesLeft >= 0) {
|
||||
m_scheduler.scheduleEvent(certRequest->waitAfterNack,
|
||||
[=] { fetch(certRequest, state, continueValidation); });
|
||||
m_scheduler.schedule(certRequest->waitAfterNack,
|
||||
[=] { fetch(certRequest, state, continueValidation); });
|
||||
certRequest->waitAfterNack *= 2;
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -151,7 +151,7 @@ NotificationSubscriberBase::afterReceiveNack(const lp::Nack& nack)
|
||||
onNack(nack);
|
||||
|
||||
time::milliseconds delay = exponentialBackoff(nack);
|
||||
m_nackEvent = m_scheduler.scheduleEvent(delay, [this] { sendInitialInterest(); });
|
||||
m_nackEvent = m_scheduler.schedule(delay, [this] { sendInitialInterest(); });
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -98,7 +98,7 @@ Scheduler::Scheduler(boost::asio::io_service& ioService)
|
||||
Scheduler::~Scheduler() = default;
|
||||
|
||||
EventId
|
||||
Scheduler::scheduleEvent(time::nanoseconds after, EventCallback callback)
|
||||
Scheduler::schedule(time::nanoseconds after, EventCallback callback)
|
||||
{
|
||||
BOOST_ASSERT(callback != nullptr);
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ using EventCallback = std::function<void()>;
|
||||
/** \brief A handle of scheduled event.
|
||||
*
|
||||
* \code
|
||||
* EventId eid = scheduler.scheduleEvent(10_ms, [] { doSomething(); });
|
||||
* EventId eid = scheduler.schedule(10_ms, [] { doSomething(); });
|
||||
* eid.cancel(); // cancel the event
|
||||
* \endcode
|
||||
*
|
||||
@@ -116,7 +116,7 @@ operator<<(std::ostream& os, const EventId& eventId);
|
||||
*
|
||||
* \code
|
||||
* {
|
||||
* ScopedEventId eid = scheduler.scheduleEvent(10_ms, [] { doSomething(); });
|
||||
* ScopedEventId eid = scheduler.schedule(10_ms, [] { doSomething(); });
|
||||
* } // eid goes out of scope, canceling the event
|
||||
* \endcode
|
||||
*
|
||||
@@ -154,12 +154,20 @@ public:
|
||||
* \return EventId that can be used to cancel the scheduled event
|
||||
*/
|
||||
EventId
|
||||
scheduleEvent(time::nanoseconds after, EventCallback callback);
|
||||
schedule(time::nanoseconds after, EventCallback callback);
|
||||
|
||||
/** \brief Cancel a scheduled event
|
||||
*
|
||||
* You may also invoke `eid.cancel()`
|
||||
/** \deprecated use schedule(after, callback)
|
||||
*/
|
||||
[[deprecated("use schedule(after, callback)")]]
|
||||
EventId
|
||||
scheduleEvent(time::nanoseconds after, EventCallback callback)
|
||||
{
|
||||
return schedule(after, std::move(callback));
|
||||
}
|
||||
|
||||
/** \deprecated use EventId::cancel()
|
||||
*/
|
||||
[[deprecated("use EventId::cancel()")]]
|
||||
void
|
||||
cancelEvent(const EventId& eid)
|
||||
{
|
||||
|
||||
@@ -126,34 +126,12 @@ SegmentFetcher::fetchFirstSegment(const Interest& baseInterest, bool isRetransmi
|
||||
interest.refreshNonce();
|
||||
}
|
||||
|
||||
weak_ptr<SegmentFetcher> weakSelf = m_this;
|
||||
|
||||
m_nSegmentsInFlight++;
|
||||
auto pendingInterest = m_face.expressInterest(interest,
|
||||
bind(&SegmentFetcher::afterSegmentReceivedCb,
|
||||
this, _1, _2, weakSelf),
|
||||
bind(&SegmentFetcher::afterNackReceivedCb,
|
||||
this, _1, _2, weakSelf),
|
||||
nullptr);
|
||||
auto timeoutEvent =
|
||||
m_scheduler.scheduleEvent(m_options.useConstantInterestTimeout ? m_options.maxTimeout : getEstimatedRto(),
|
||||
bind(&SegmentFetcher::afterTimeoutCb, this, interest, weakSelf));
|
||||
|
||||
if (isRetransmission) {
|
||||
updateRetransmittedSegment(0, pendingInterest, timeoutEvent);
|
||||
}
|
||||
else {
|
||||
BOOST_ASSERT(m_pendingSegments.count(0) == 0);
|
||||
m_pendingSegments.emplace(0, PendingSegment{SegmentState::FirstInterest, time::steady_clock::now(),
|
||||
pendingInterest, timeoutEvent});
|
||||
}
|
||||
sendInterest(0, interest, isRetransmission);
|
||||
}
|
||||
|
||||
void
|
||||
SegmentFetcher::fetchSegmentsInWindow(const Interest& origInterest)
|
||||
{
|
||||
weak_ptr<SegmentFetcher> weakSelf = m_this;
|
||||
|
||||
if (checkAllSegmentsReceived()) {
|
||||
// All segments have been retrieved
|
||||
return finalizeFetch();
|
||||
@@ -194,31 +172,42 @@ SegmentFetcher::fetchSegmentsInWindow(const Interest& origInterest)
|
||||
interest.setMustBeFresh(false);
|
||||
interest.setInterestLifetime(m_options.interestLifetime);
|
||||
interest.refreshNonce();
|
||||
|
||||
m_nSegmentsInFlight++;
|
||||
auto pendingInterest = m_face.expressInterest(interest,
|
||||
bind(&SegmentFetcher::afterSegmentReceivedCb,
|
||||
this, _1, _2, weakSelf),
|
||||
bind(&SegmentFetcher::afterNackReceivedCb,
|
||||
this, _1, _2, weakSelf),
|
||||
nullptr);
|
||||
auto timeoutEvent =
|
||||
m_scheduler.scheduleEvent(m_options.useConstantInterestTimeout ? m_options.maxTimeout : getEstimatedRto(),
|
||||
bind(&SegmentFetcher::afterTimeoutCb, this, interest, weakSelf));
|
||||
|
||||
if (segment.second) { // Retransmission
|
||||
updateRetransmittedSegment(segment.first, pendingInterest, timeoutEvent);
|
||||
}
|
||||
else { // First request for segment
|
||||
BOOST_ASSERT(m_pendingSegments.count(segment.first) == 0);
|
||||
m_pendingSegments.emplace(segment.first, PendingSegment{SegmentState::FirstInterest,
|
||||
time::steady_clock::now(),
|
||||
pendingInterest, timeoutEvent});
|
||||
m_highInterest = segment.first;
|
||||
}
|
||||
sendInterest(segment.first, interest, segment.second);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
SegmentFetcher::sendInterest(uint64_t segNum, const Interest& interest, bool isRetransmission)
|
||||
{
|
||||
weak_ptr<SegmentFetcher> weakSelf = m_this;
|
||||
|
||||
++m_nSegmentsInFlight;
|
||||
auto pendingInterest = m_face.expressInterest(interest,
|
||||
[this, weakSelf] (const Interest& interest, const Data& data) {
|
||||
afterSegmentReceivedCb(interest, data, weakSelf);
|
||||
},
|
||||
[this, weakSelf] (const Interest& interest, const lp::Nack& nack) {
|
||||
afterNackReceivedCb(interest, nack, weakSelf);
|
||||
},
|
||||
nullptr);
|
||||
|
||||
auto timeout = m_options.useConstantInterestTimeout ? m_options.maxTimeout : getEstimatedRto();
|
||||
auto timeoutEvent = m_scheduler.schedule(timeout, [this, interest, weakSelf] {
|
||||
afterTimeoutCb(interest, weakSelf);
|
||||
});
|
||||
|
||||
if (isRetransmission) {
|
||||
updateRetransmittedSegment(segNum, pendingInterest, timeoutEvent);
|
||||
return;
|
||||
}
|
||||
|
||||
PendingSegment pendingSegment{SegmentState::FirstInterest, time::steady_clock::now(),
|
||||
pendingInterest, timeoutEvent};
|
||||
bool isNew = m_pendingSegments.emplace(segNum, std::move(pendingSegment)).second;
|
||||
BOOST_VERIFY(isNew);
|
||||
m_highInterest = segNum;
|
||||
}
|
||||
|
||||
void
|
||||
SegmentFetcher::afterSegmentReceivedCb(const Interest& origInterest, const Data& data,
|
||||
const weak_ptr<SegmentFetcher>& weakSelf)
|
||||
|
||||
@@ -188,6 +188,9 @@ private:
|
||||
void
|
||||
fetchSegmentsInWindow(const Interest& origInterest);
|
||||
|
||||
void
|
||||
sendInterest(uint64_t segNum, const Interest& interest, bool isRetransmission);
|
||||
|
||||
void
|
||||
afterSegmentReceivedCb(const Interest& origInterest, const Data& data,
|
||||
const weak_ptr<SegmentFetcher>& weakSelf);
|
||||
|
||||
@@ -87,7 +87,7 @@ protected:
|
||||
}
|
||||
|
||||
outcome = '?';
|
||||
return sched.scheduleEvent(delay, [this, interest, &outcome] {
|
||||
return sched.schedule(delay, [this, interest, &outcome] {
|
||||
face2->expressInterest(interest,
|
||||
[&] (const Interest&, const Data&) { outcome = 'D'; },
|
||||
[&] (const Interest&, const lp::Nack&) { outcome = 'N'; },
|
||||
@@ -108,7 +108,7 @@ protected:
|
||||
scheduler::EventId
|
||||
terminateAfter(time::nanoseconds delay)
|
||||
{
|
||||
return sched.scheduleEvent(delay, [this] { face.getIoService().stop(); });
|
||||
return sched.schedule(delay, [this] { face.getIoService().stop(); });
|
||||
}
|
||||
|
||||
protected:
|
||||
@@ -184,19 +184,19 @@ BOOST_FIXTURE_TEST_CASE_TEMPLATE(RegisterUnregisterPrefix, TransportType, Transp
|
||||
[&] (const Name&) { ++nRegSuccess; },
|
||||
[] (const Name&, const std::string& msg) { BOOST_ERROR("unexpected register prefix failure: " << msg); });
|
||||
|
||||
this->sched.scheduleEvent(1_s, [&nRegSuccess] {
|
||||
this->sched.schedule(1_s, [&nRegSuccess] {
|
||||
BOOST_CHECK_EQUAL(nRegSuccess, 1);
|
||||
std::string output = executeCommand("nfdc route list | grep /Hello/World");
|
||||
BOOST_CHECK(!output.empty());
|
||||
});
|
||||
|
||||
this->sched.scheduleEvent(2_s, [this, id, &nUnregSuccess] {
|
||||
this->sched.schedule(2_s, [this, id, &nUnregSuccess] {
|
||||
this->face.unregisterPrefix(id,
|
||||
[&] { ++nUnregSuccess; },
|
||||
[] (const std::string& msg) { BOOST_ERROR("unexpected unregister prefix failure: " << msg); });
|
||||
});
|
||||
|
||||
this->sched.scheduleEvent(3_s, [&nUnregSuccess] {
|
||||
this->sched.schedule(3_s, [&nUnregSuccess] {
|
||||
BOOST_CHECK_EQUAL(nUnregSuccess, 1);
|
||||
|
||||
// Boost.Test would fail if a child process exits with non-zero. http://stackoverflow.com/q/5325202
|
||||
@@ -221,7 +221,7 @@ BOOST_FIXTURE_TEST_CASE_TEMPLATE(RegularFilter, TransportType, Transports, FaceF
|
||||
[&] (const Name&) { ++nRegSuccess2; },
|
||||
[] (const Name&, const std::string& msg) { BOOST_ERROR("unexpected register prefix failure: " << msg); });
|
||||
|
||||
this->sched.scheduleEvent(500_ms, [] {
|
||||
this->sched.schedule(500_ms, [] {
|
||||
std::string output = executeCommand("nfdc route list | grep /Hello/World");
|
||||
BOOST_CHECK(!output.empty());
|
||||
});
|
||||
@@ -247,7 +247,7 @@ BOOST_FIXTURE_TEST_CASE_TEMPLATE(RegexFilter, TransportType, Transports, FaceFix
|
||||
[&] (const Name&) { ++nRegSuccess; },
|
||||
[] (const Name&, const std::string& msg) { BOOST_ERROR("unexpected register prefix failure: " << msg); });
|
||||
|
||||
this->sched.scheduleEvent(700_ms, [] {
|
||||
this->sched.schedule(700_ms, [] {
|
||||
std::string output = executeCommand("nfdc route list | grep /Hello/World");
|
||||
BOOST_CHECK(!output.empty());
|
||||
});
|
||||
@@ -272,7 +272,7 @@ BOOST_FIXTURE_TEST_CASE_TEMPLATE(RegexFilterNoRegister, TransportType, Transport
|
||||
this->face.setInterestFilter(InterestFilter("/Hello/World", "<><b><c>?"),
|
||||
[&] (const InterestFilter&, const Interest& interest) { BOOST_ERROR("unexpected Interest"); });
|
||||
|
||||
this->sched.scheduleEvent(700_ms, [] {
|
||||
this->sched.schedule(700_ms, [] {
|
||||
// Boost.Test would fail if a child process exits with non-zero. http://stackoverflow.com/q/5325202
|
||||
std::string output = executeCommand("nfdc route list | grep /Hello/World || true");
|
||||
BOOST_CHECK(output.empty());
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||
/*
|
||||
* Copyright (c) 2013-2018 Regents of the University of California.
|
||||
* Copyright (c) 2013-2019 Regents of the University of California.
|
||||
*
|
||||
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
|
||||
*
|
||||
@@ -45,13 +45,13 @@ BOOST_AUTO_TEST_CASE(ScheduleCancel)
|
||||
|
||||
auto d1 = timedExecute([&] {
|
||||
for (size_t i = 0; i < nEvents; ++i) {
|
||||
eventIds[i] = sched.scheduleEvent(1_s, []{});
|
||||
eventIds[i] = sched.schedule(1_s, []{});
|
||||
}
|
||||
});
|
||||
|
||||
auto d2 = timedExecute([&] {
|
||||
for (size_t i = 0; i < nEvents; ++i) {
|
||||
sched.cancelEvent(eventIds[i]);
|
||||
eventIds[i].cancel();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -72,13 +72,13 @@ BOOST_AUTO_TEST_CASE(Execute)
|
||||
time::steady_clock::TimePoint t2;
|
||||
// +1ms ensures this extra event is executed last. In case the overhead is less than 1ms,
|
||||
// it will be reported as 1ms.
|
||||
sched.scheduleEvent(t1 - time::steady_clock::now() + 1_ms, [&] {
|
||||
sched.schedule(t1 - time::steady_clock::now() + 1_ms, [&] {
|
||||
t2 = time::steady_clock::now();
|
||||
BOOST_REQUIRE_EQUAL(nExpired, nEvents);
|
||||
});
|
||||
|
||||
for (size_t i = 0; i < nEvents; ++i) {
|
||||
sched.scheduleEvent(t1 - time::steady_clock::now(), [&] { ++nExpired; });
|
||||
sched.schedule(t1 - time::steady_clock::now(), [&] { ++nExpired; });
|
||||
}
|
||||
|
||||
io.run();
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||
/*
|
||||
* Copyright (c) 2013-2018 Regents of the University of California.
|
||||
* Copyright (c) 2013-2019 Regents of the University of California.
|
||||
*
|
||||
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
|
||||
*
|
||||
@@ -128,15 +128,9 @@ BOOST_AUTO_TEST_CASE(InterestSignature)
|
||||
auto interest = makeInterest("/SecurityTestSignatureSha256WithEcdsa/InterestSignature/Interest1");
|
||||
auto interest11 = makeInterest("/SecurityTestSignatureSha256WithEcdsa/InterestSignature/Interest1");
|
||||
|
||||
scheduler.scheduleEvent(100_ms, [&] {
|
||||
m_keyChain.sign(*interest, security::SigningInfo(identity));
|
||||
});
|
||||
|
||||
scheduler.schedule(100_ms, [&] { m_keyChain.sign(*interest, security::SigningInfo(identity)); });
|
||||
advanceClocks(100_ms);
|
||||
scheduler.scheduleEvent(100_ms, [&] {
|
||||
m_keyChain.sign(*interest11, security::SigningInfo(identity));
|
||||
});
|
||||
|
||||
scheduler.schedule(100_ms, [&] { m_keyChain.sign(*interest11, security::SigningInfo(identity)); });
|
||||
advanceClocks(100_ms);
|
||||
|
||||
Block interestBlock(interest->wireEncode().wire(), interest->wireEncode().size());
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||
/*
|
||||
* Copyright (c) 2013-2018 Regents of the University of California.
|
||||
* Copyright (c) 2013-2019 Regents of the University of California.
|
||||
*
|
||||
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
|
||||
*
|
||||
@@ -133,15 +133,9 @@ BOOST_AUTO_TEST_CASE(InterestSignature)
|
||||
auto interest = makeInterest("/SecurityTestSignatureSha256WithRsa/InterestSignature/Interest1");
|
||||
auto interest11 = makeInterest("/SecurityTestSignatureSha256WithRsa/InterestSignature/Interest1");
|
||||
|
||||
scheduler.scheduleEvent(100_ms, [&] {
|
||||
m_keyChain.sign(*interest, security::SigningInfo(identity));
|
||||
});
|
||||
|
||||
scheduler.schedule(100_ms, [&] { m_keyChain.sign(*interest, security::SigningInfo(identity)); });
|
||||
advanceClocks(100_ms);
|
||||
scheduler.scheduleEvent(100_ms, [&] {
|
||||
m_keyChain.sign(*interest11, security::SigningInfo(identity));
|
||||
});
|
||||
|
||||
scheduler.schedule(100_ms, [&] { m_keyChain.sign(*interest11, security::SigningInfo(identity)); });
|
||||
advanceClocks(100_ms);
|
||||
|
||||
Block interestBlock(interest->wireEncode().wire(), interest->wireEncode().size());
|
||||
|
||||
@@ -53,25 +53,21 @@ BOOST_AUTO_TEST_CASE(Events)
|
||||
size_t count1 = 0;
|
||||
size_t count2 = 0;
|
||||
|
||||
scheduler.scheduleEvent(500_ms, [&] {
|
||||
++count1;
|
||||
BOOST_CHECK_EQUAL(count2, 1);
|
||||
});
|
||||
scheduler.schedule(500_ms, [&] {
|
||||
++count1;
|
||||
BOOST_CHECK_EQUAL(count2, 1);
|
||||
});
|
||||
|
||||
EventId i = scheduler.scheduleEvent(1_s, [&] {
|
||||
BOOST_ERROR("This event should not have been fired");
|
||||
});
|
||||
scheduler.cancelEvent(i);
|
||||
EventId i = scheduler.schedule(1_s, [] { BOOST_ERROR("This event should not have been fired"); });
|
||||
i.cancel();
|
||||
|
||||
scheduler.scheduleEvent(250_ms, [&] {
|
||||
BOOST_CHECK_EQUAL(count1, 0);
|
||||
++count2;
|
||||
});
|
||||
scheduler.schedule(250_ms, [&] {
|
||||
BOOST_CHECK_EQUAL(count1, 0);
|
||||
++count2;
|
||||
});
|
||||
|
||||
i = scheduler.scheduleEvent(50_ms, [&] {
|
||||
BOOST_ERROR("This event should not have been fired");
|
||||
});
|
||||
scheduler.cancelEvent(i);
|
||||
i = scheduler.schedule(50_ms, [&] { BOOST_ERROR("This event should not have been fired"); });
|
||||
i.cancel();
|
||||
|
||||
advanceClocks(25_ms, 1000_ms);
|
||||
BOOST_CHECK_EQUAL(count1, 1);
|
||||
@@ -83,7 +79,7 @@ BOOST_AUTO_TEST_CASE(CallbackException)
|
||||
class MyException : public std::exception
|
||||
{
|
||||
};
|
||||
scheduler.scheduleEvent(10_ms, [] {
|
||||
scheduler.schedule(10_ms, [] {
|
||||
// use plain 'throw' to ensure that Scheduler does not depend on the
|
||||
// internal machinery of NDN_THROW and that it can catch all exceptions
|
||||
// regardless of how they are thrown by the application
|
||||
@@ -91,7 +87,7 @@ BOOST_AUTO_TEST_CASE(CallbackException)
|
||||
});
|
||||
|
||||
bool isCallbackInvoked = false;
|
||||
scheduler.scheduleEvent(20_ms, [&isCallbackInvoked] { isCallbackInvoked = true; });
|
||||
scheduler.schedule(20_ms, [&isCallbackInvoked] { isCallbackInvoked = true; });
|
||||
|
||||
BOOST_CHECK_THROW(this->advanceClocks(6_ms, 2), MyException);
|
||||
this->advanceClocks(6_ms, 2);
|
||||
@@ -101,7 +97,7 @@ BOOST_AUTO_TEST_CASE(CallbackException)
|
||||
BOOST_AUTO_TEST_CASE(CancelEmptyEvent)
|
||||
{
|
||||
EventId i;
|
||||
scheduler.cancelEvent(i);
|
||||
i.cancel();
|
||||
|
||||
// avoid "test case [...] did not check any assertions" message from Boost.Test
|
||||
BOOST_CHECK(true);
|
||||
@@ -110,43 +106,33 @@ BOOST_AUTO_TEST_CASE(CancelEmptyEvent)
|
||||
BOOST_AUTO_TEST_CASE(SelfCancel)
|
||||
{
|
||||
EventId selfEventId;
|
||||
selfEventId = scheduler.scheduleEvent(100_ms, [&] {
|
||||
scheduler.cancelEvent(selfEventId);
|
||||
});
|
||||
|
||||
selfEventId = scheduler.schedule(100_ms, [&] { selfEventId.cancel(); });
|
||||
BOOST_REQUIRE_NO_THROW(advanceClocks(100_ms, 10));
|
||||
}
|
||||
|
||||
class SelfRescheduleFixture : public SchedulerFixture
|
||||
{
|
||||
public:
|
||||
SelfRescheduleFixture()
|
||||
: count(0)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
reschedule()
|
||||
{
|
||||
EventId eventId = scheduler.scheduleEvent(100_ms,
|
||||
bind(&SelfRescheduleFixture::reschedule, this));
|
||||
scheduler.cancelEvent(selfEventId);
|
||||
EventId eventId = scheduler.schedule(100_ms, bind(&SelfRescheduleFixture::reschedule, this));
|
||||
selfEventId.cancel();
|
||||
selfEventId = eventId;
|
||||
|
||||
if (count < 5)
|
||||
count++;
|
||||
else
|
||||
scheduler.cancelEvent(selfEventId);
|
||||
selfEventId.cancel();
|
||||
}
|
||||
|
||||
void
|
||||
reschedule2()
|
||||
{
|
||||
scheduler.cancelEvent(selfEventId);
|
||||
selfEventId.cancel();
|
||||
|
||||
if (count < 5) {
|
||||
selfEventId = scheduler.scheduleEvent(100_ms,
|
||||
bind(&SelfRescheduleFixture::reschedule2, this));
|
||||
selfEventId = scheduler.schedule(100_ms, bind(&SelfRescheduleFixture::reschedule2, this));
|
||||
count++;
|
||||
}
|
||||
}
|
||||
@@ -154,90 +140,70 @@ public:
|
||||
void
|
||||
reschedule3()
|
||||
{
|
||||
scheduler.cancelEvent(selfEventId);
|
||||
selfEventId.cancel();
|
||||
|
||||
scheduler.scheduleEvent(100_ms, [&] { ++count; });
|
||||
scheduler.scheduleEvent(100_ms, [&] { ++count; });
|
||||
scheduler.scheduleEvent(100_ms, [&] { ++count; });
|
||||
scheduler.scheduleEvent(100_ms, [&] { ++count; });
|
||||
scheduler.scheduleEvent(100_ms, [&] { ++count; });
|
||||
scheduler.scheduleEvent(100_ms, [&] { ++count; });
|
||||
scheduler.schedule(100_ms, [&] { ++count; });
|
||||
scheduler.schedule(100_ms, [&] { ++count; });
|
||||
scheduler.schedule(100_ms, [&] { ++count; });
|
||||
scheduler.schedule(100_ms, [&] { ++count; });
|
||||
scheduler.schedule(100_ms, [&] { ++count; });
|
||||
scheduler.schedule(100_ms, [&] { ++count; });
|
||||
}
|
||||
|
||||
public:
|
||||
EventId selfEventId;
|
||||
size_t count;
|
||||
size_t count = 0;
|
||||
};
|
||||
|
||||
BOOST_FIXTURE_TEST_CASE(Reschedule, SelfRescheduleFixture)
|
||||
{
|
||||
selfEventId = scheduler.scheduleEvent(0_s,
|
||||
bind(&SelfRescheduleFixture::reschedule, this));
|
||||
|
||||
selfEventId = scheduler.schedule(0_s, bind(&SelfRescheduleFixture::reschedule, this));
|
||||
BOOST_REQUIRE_NO_THROW(advanceClocks(50_ms, 1000_ms));
|
||||
|
||||
BOOST_CHECK_EQUAL(count, 5);
|
||||
}
|
||||
|
||||
BOOST_FIXTURE_TEST_CASE(Reschedule2, SelfRescheduleFixture)
|
||||
{
|
||||
selfEventId = scheduler.scheduleEvent(0_s,
|
||||
bind(&SelfRescheduleFixture::reschedule2, this));
|
||||
|
||||
selfEventId = scheduler.schedule(0_s, bind(&SelfRescheduleFixture::reschedule2, this));
|
||||
BOOST_REQUIRE_NO_THROW(advanceClocks(50_ms, 1000_ms));
|
||||
|
||||
BOOST_CHECK_EQUAL(count, 5);
|
||||
}
|
||||
|
||||
BOOST_FIXTURE_TEST_CASE(Reschedule3, SelfRescheduleFixture)
|
||||
{
|
||||
selfEventId = scheduler.scheduleEvent(0_s,
|
||||
bind(&SelfRescheduleFixture::reschedule3, this));
|
||||
|
||||
selfEventId = scheduler.schedule(0_s, bind(&SelfRescheduleFixture::reschedule3, this));
|
||||
BOOST_REQUIRE_NO_THROW(advanceClocks(50_ms, 1000_ms));
|
||||
|
||||
BOOST_CHECK_EQUAL(count, 6);
|
||||
}
|
||||
|
||||
class CancelAllFixture : public SchedulerFixture
|
||||
{
|
||||
public:
|
||||
CancelAllFixture()
|
||||
: count(0)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
event()
|
||||
{
|
||||
++count;
|
||||
|
||||
scheduler.scheduleEvent(1_s, [&] { event(); });
|
||||
scheduler.schedule(1_s, [&] { event(); });
|
||||
}
|
||||
|
||||
public:
|
||||
uint32_t count;
|
||||
uint32_t count = 0;
|
||||
};
|
||||
|
||||
BOOST_FIXTURE_TEST_CASE(CancelAll, CancelAllFixture)
|
||||
{
|
||||
scheduler.scheduleEvent(500_ms, [&] { scheduler.cancelAllEvents(); });
|
||||
|
||||
scheduler.scheduleEvent(1_s, [&] { event(); });
|
||||
|
||||
scheduler.scheduleEvent(3_s, [] {
|
||||
BOOST_ERROR("This event should have been cancelled" );
|
||||
});
|
||||
scheduler.schedule(500_ms, [&] { scheduler.cancelAllEvents(); });
|
||||
scheduler.schedule(1_s, [&] { event(); });
|
||||
scheduler.schedule(3_s, [] { BOOST_ERROR("This event should have been cancelled" ); });
|
||||
|
||||
advanceClocks(100_ms, 100);
|
||||
|
||||
BOOST_CHECK_EQUAL(count, 0);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(CancelAllWithScopedEventId) // Bug 3691
|
||||
{
|
||||
Scheduler sched(io);
|
||||
ScopedEventId eid = sched.scheduleEvent(10_ms, []{});
|
||||
ScopedEventId eid = sched.schedule(10_ms, []{});
|
||||
sched.cancelAllEvents();
|
||||
eid.cancel(); // should not crash
|
||||
|
||||
@@ -263,7 +229,7 @@ BOOST_AUTO_TEST_CASE(Compare)
|
||||
BOOST_CHECK_EQUAL(eid == eid2, true);
|
||||
BOOST_CHECK_EQUAL(eid != eid2, false);
|
||||
|
||||
eid = scheduler.scheduleEvent(10_ms, []{});
|
||||
eid = scheduler.schedule(10_ms, []{});
|
||||
BOOST_CHECK_EQUAL(eid == eid2, false);
|
||||
BOOST_CHECK_EQUAL(eid != eid2, true);
|
||||
|
||||
@@ -271,7 +237,7 @@ BOOST_AUTO_TEST_CASE(Compare)
|
||||
BOOST_CHECK_EQUAL(eid, eid2);
|
||||
BOOST_CHECK_EQUAL(eid != eid2, false);
|
||||
|
||||
eid2 = scheduler.scheduleEvent(10_ms, []{});
|
||||
eid2 = scheduler.schedule(10_ms, []{});
|
||||
BOOST_CHECK_EQUAL(eid == eid2, false);
|
||||
BOOST_CHECK_NE(eid, eid2);
|
||||
}
|
||||
@@ -282,12 +248,12 @@ BOOST_AUTO_TEST_CASE(Valid)
|
||||
BOOST_CHECK_EQUAL(static_cast<bool>(eid), false);
|
||||
BOOST_CHECK_EQUAL(!eid, true);
|
||||
|
||||
eid = scheduler.scheduleEvent(10_ms, []{});
|
||||
eid = scheduler.schedule(10_ms, []{});
|
||||
BOOST_CHECK_EQUAL(static_cast<bool>(eid), true);
|
||||
BOOST_CHECK_EQUAL(!eid, false);
|
||||
|
||||
EventId eid2 = eid;
|
||||
scheduler.cancelEvent(eid2);
|
||||
eid2.cancel();
|
||||
BOOST_CHECK(!eid);
|
||||
BOOST_CHECK(!eid2);
|
||||
}
|
||||
@@ -295,17 +261,17 @@ BOOST_AUTO_TEST_CASE(Valid)
|
||||
BOOST_AUTO_TEST_CASE(DuringCallback)
|
||||
{
|
||||
EventId eid;
|
||||
EventId eid2 = scheduler.scheduleEvent(20_ms, []{});
|
||||
EventId eid2 = scheduler.schedule(20_ms, []{});
|
||||
|
||||
bool isCallbackInvoked = false;
|
||||
eid = scheduler.scheduleEvent(10_ms, [this, &eid, &eid2, &isCallbackInvoked] {
|
||||
eid = scheduler.schedule(10_ms, [&eid, &eid2, &isCallbackInvoked] {
|
||||
isCallbackInvoked = true;
|
||||
|
||||
// eid is "expired" during callback execution
|
||||
BOOST_CHECK(!eid);
|
||||
BOOST_CHECK_NE(eid, eid2);
|
||||
|
||||
scheduler.cancelEvent(eid2);
|
||||
eid2.cancel();
|
||||
BOOST_CHECK_EQUAL(eid, eid2);
|
||||
});
|
||||
|
||||
@@ -316,7 +282,7 @@ BOOST_AUTO_TEST_CASE(DuringCallback)
|
||||
BOOST_AUTO_TEST_CASE(Reset)
|
||||
{
|
||||
bool isCallbackInvoked = false;
|
||||
EventId eid = scheduler.scheduleEvent(10_ms, [&isCallbackInvoked] { isCallbackInvoked = true; });
|
||||
EventId eid = scheduler.schedule(10_ms, [&isCallbackInvoked] { isCallbackInvoked = true; });
|
||||
eid.reset();
|
||||
BOOST_CHECK(!eid);
|
||||
|
||||
@@ -331,7 +297,7 @@ BOOST_AUTO_TEST_CASE(ToString)
|
||||
EventId eid;
|
||||
BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(eid), nullString);
|
||||
|
||||
eid = scheduler.scheduleEvent(10_ms, []{});
|
||||
eid = scheduler.schedule(10_ms, []{});
|
||||
BOOST_TEST_MESSAGE("eid=" << eid);
|
||||
BOOST_CHECK_NE(boost::lexical_cast<std::string>(eid), nullString);
|
||||
}
|
||||
@@ -346,7 +312,7 @@ BOOST_AUTO_TEST_CASE(Destruct)
|
||||
{
|
||||
int hit = 0;
|
||||
{
|
||||
ScopedEventId se = scheduler.scheduleEvent(10_ms, [&] { ++hit; });
|
||||
ScopedEventId se = scheduler.schedule(10_ms, [&] { ++hit; });
|
||||
} // se goes out of scope
|
||||
this->advanceClocks(1_ms, 15);
|
||||
BOOST_CHECK_EQUAL(hit, 0);
|
||||
@@ -355,8 +321,8 @@ BOOST_AUTO_TEST_CASE(Destruct)
|
||||
BOOST_AUTO_TEST_CASE(Assign)
|
||||
{
|
||||
int hit1 = 0, hit2 = 0;
|
||||
ScopedEventId se1 = scheduler.scheduleEvent(10_ms, [&] { ++hit1; });
|
||||
se1 = scheduler.scheduleEvent(10_ms, [&] { ++hit2; });
|
||||
ScopedEventId se1 = scheduler.schedule(10_ms, [&] { ++hit1; });
|
||||
se1 = scheduler.schedule(10_ms, [&] { ++hit2; });
|
||||
this->advanceClocks(1_ms, 15);
|
||||
BOOST_CHECK_EQUAL(hit1, 0);
|
||||
BOOST_CHECK_EQUAL(hit2, 1);
|
||||
@@ -366,7 +332,7 @@ BOOST_AUTO_TEST_CASE(Release)
|
||||
{
|
||||
int hit = 0;
|
||||
{
|
||||
ScopedEventId se = scheduler.scheduleEvent(10_ms, [&] { ++hit; });
|
||||
ScopedEventId se = scheduler.schedule(10_ms, [&] { ++hit; });
|
||||
se.release();
|
||||
} // se goes out of scope
|
||||
this->advanceClocks(1_ms, 15);
|
||||
@@ -378,7 +344,7 @@ BOOST_AUTO_TEST_CASE(Move)
|
||||
int hit = 0;
|
||||
unique_ptr<ScopedEventId> se2;
|
||||
{
|
||||
ScopedEventId se = scheduler.scheduleEvent(10_ms, [&] { ++hit; });
|
||||
ScopedEventId se = scheduler.schedule(10_ms, [&] { ++hit; });
|
||||
se2 = make_unique<ScopedEventId>(std::move(se)); // move constructor
|
||||
} // se goes out of scope
|
||||
this->advanceClocks(1_ms, 15);
|
||||
@@ -386,7 +352,7 @@ BOOST_AUTO_TEST_CASE(Move)
|
||||
|
||||
ScopedEventId se3;
|
||||
{
|
||||
ScopedEventId se = scheduler.scheduleEvent(10_ms, [&] { ++hit; });
|
||||
ScopedEventId se = scheduler.schedule(10_ms, [&] { ++hit; });
|
||||
se3 = std::move(se); // move assignment
|
||||
} // se goes out of scope
|
||||
this->advanceClocks(1_ms, 15);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||
/*
|
||||
* Copyright (c) 2013-2018 Regents of the University of California.
|
||||
* Copyright (c) 2013-2019 Regents of the University of California.
|
||||
*
|
||||
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
|
||||
*
|
||||
@@ -120,7 +120,7 @@ BOOST_AUTO_TEST_CASE(Scheduler)
|
||||
ndn::Scheduler scheduler(io);
|
||||
|
||||
bool hasFired = false;
|
||||
scheduler.scheduleEvent(100_s, [&] { hasFired = true; });
|
||||
scheduler.schedule(100_s, [&] { hasFired = true; });
|
||||
|
||||
io.poll();
|
||||
BOOST_CHECK_EQUAL(hasFired, false);
|
||||
|
||||
Reference in new issue
Block a user