mgmt: respond with 414 if StrategyChoice prefix is too long

refs #4262

Change-Id: Ief6dec02d7fbf372382a167e04d82e48777fa30b
This commit is contained in:
Junxiao Shi committed 2018-02-04 23:52:46 +00:00
1 parent d96744d968
commit 332783b3e5
3 files changed
+40 -10

No files matched your search

+3 -3
View File
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
* Copyright (c) 2014-2017, Regents of the University of California,
/*
* Copyright (c) 2014-2018, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -57,7 +57,7 @@ StrategyChoiceManager::setStrategy(ControlParameters parameters,
StrategyChoice::InsertResult res = m_table.insert(prefix, strategy);
if (!res) {
NFD_LOG_DEBUG("strategy-choice/set(" << prefix << "," << strategy << "): cannot-create " << res);
return done(ControlResponse(404, boost::lexical_cast<std::string>(res)));
return done(ControlResponse(res.getStatusCode(), boost::lexical_cast<std::string>(res)));
}
NFD_LOG_DEBUG("strategy-choice/set(" << prefix << "," << strategy << "): OK");
+13 -5
View File
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2014-2017, Regents of the University of California,
* Copyright (c) 2014-2018, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -83,12 +83,20 @@ public: // Strategy Choice table
return m_status == OK || m_status == EXCEPTION;
}
/** \brief get a status code for use in management command response
*/
int
getStatusCode() const
{
return static_cast<int>(m_status);
}
private:
enum Status {
OK,
NOT_REGISTERED,
EXCEPTION,
DEPTH_EXCEEDED
OK = 200,
NOT_REGISTERED = 404,
EXCEPTION = 409,
DEPTH_EXCEEDED = 414,
};
// implicitly constructible from Status
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
* Copyright (c) 2014-2017, Regents of the University of California,
/*
* Copyright (c) 2014-2018, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -120,6 +120,28 @@ BOOST_AUTO_TEST_CASE(SetUnknownStrategy)
BOOST_CHECK_EQUAL(hasEntry("/A"), false);
}
BOOST_AUTO_TEST_CASE(SetNameTooLong)
{
Name prefix;
while (prefix.size() <= FIB_MAX_DEPTH) {
prefix.append("A");
}
ControlParameters reqParams;
reqParams.setName(prefix)
.setStrategy(strategyNameP);
auto req = makeControlCommandRequest("/localhost/nfd/strategy-choice/set", reqParams);
receiveInterest(req);
ControlResponse expectedResp;
expectedResp.setCode(414)
.setText("Prefix has too many components (limit is " +
to_string(NameTree::getMaxDepth()) + ")");
BOOST_CHECK_EQUAL(checkResponse(0, req.getName(), expectedResp),
CheckResponseResult::OK);
BOOST_CHECK_EQUAL(hasEntry(prefix), false);
}
BOOST_AUTO_TEST_CASE(UnsetSuccess)
{
auto insertRes = sc.insert("/A", strategyNameP);