Skip to content

Commit

Permalink
Merge "Add a new API NetworkAgentMock::RouteNextHopCount to get nexth…
Browse files Browse the repository at this point in the history
…ops count" into R2.20
  • Loading branch information
Zuul authored and opencontrail-ci-admin committed Aug 3, 2015
2 parents 9902158 + 5a08fc5 commit 3633f3b
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 15 deletions.
13 changes: 2 additions & 11 deletions src/bgp/test/bgp_stress_test.cc
Expand Up @@ -1793,20 +1793,11 @@ void BgpStressTest::VerifyXmppRouteNextHops() {
}
for (int rt = 0; rt < n_routes_; ++rt) {
Ip4Prefix prefix = GetAgentRoute(agent_id, i, rt);
TASK_UTIL_EXPECT_NE(
static_cast<test::NetworkAgentMock::RouteEntry *>(NULL),
agent->route_mgr_->Lookup(instance_name,
prefix.ToString()));
const test::NetworkAgentMock::RouteEntry *entry;
entry = agent->route_mgr_->Lookup(instance_name,
prefix.ToString());
if (!entry) continue;

// We expect more next-hops, one from the agent and the rest
// the bgp peers.
TASK_UTIL_EXPECT_EQ((size_t) (1 + n_peers_),
agent->route_mgr_->Lookup(instance_name,
prefix.ToString())->entry.next_hops.next_hop.size());
TASK_UTIL_EXPECT_EQ((1 + n_peers_),
agent->RouteNextHopCount(instance_name, prefix.ToString()));
}
}
}
Expand Down
23 changes: 20 additions & 3 deletions src/control-node/test/network_agent_mock.cc
Expand Up @@ -1305,9 +1305,12 @@ void NetworkAgentMock::InstanceMgr<T>::Clear() {

template<typename T>
const T *NetworkAgentMock::InstanceMgr<T>::Lookup(const std::string &network,
const std::string &prefix) const {
const std::string &prefix, bool take_lock) const {
typename InstanceMgr<T>::InstanceMap::const_iterator loc;
tbb::mutex::scoped_lock lock(parent_->get_mutex());
tbb::mutex::scoped_lock lock;

if (take_lock)
lock.acquire(parent_->get_mutex());

loc = instance_map_.find(network);
if (loc == instance_map_.end()) {
Expand Down Expand Up @@ -1335,7 +1338,9 @@ template void NetworkAgentMock::InstanceMgr<T>::Remove(const std::string &networ
template int NetworkAgentMock::InstanceMgr<T>::Count(const std::string &network) const; \
template int NetworkAgentMock::InstanceMgr<T>::Count() const; \
template void NetworkAgentMock::InstanceMgr<T>::Clear(); \
template const T *NetworkAgentMock::InstanceMgr<T>::Lookup(const std::string &network, const std::string &prefix) const;
template const T *NetworkAgentMock::InstanceMgr<T>::Lookup( \
const std::string &network, const std::string &prefix, \
const bool take_lock) const;

// RouteEntry is the same type as Inet6RouteEntry, used for both inet and inet6
INSTANTIATE_INSTANCE_TEMPLATES(NetworkAgentMock::RouteEntry)
Expand All @@ -1352,6 +1357,18 @@ int NetworkAgentMock::RouteCount() const {
return route_mgr_->Count();
}

// Return number of nexthops associated with a given route
int NetworkAgentMock::RouteNextHopCount(const std::string &network,
const std::string &prefix) {
tbb::mutex::scoped_lock lock(get_mutex());

const RouteEntry *entry = route_mgr_->Lookup(network, prefix, false);
if (!entry)
return 0;

return entry->entry.next_hops.next_hop.size();
}

int NetworkAgentMock::Inet6RouteCount(const std::string &network) const {
return inet6_route_mgr_->Count(network);
}
Expand Down
5 changes: 4 additions & 1 deletion src/control-node/test/network_agent_mock.h
Expand Up @@ -284,7 +284,8 @@ class NetworkAgentMock {
int Count() const;
void Clear();
const T *Lookup(const std::string &network,
const std::string &prefix) const;
const std::string &prefix,
const bool take_lock = true) const;

private:
NetworkAgentMock *parent_;
Expand Down Expand Up @@ -331,6 +332,8 @@ class NetworkAgentMock {

int RouteCount(const std::string &network) const;
int RouteCount() const;
int RouteNextHopCount(const std::string &network,
const std::string &prefix);
const RouteEntry *RouteLookup(const std::string &network,
const std::string &prefix) const {
return route_mgr_->Lookup(network, prefix);
Expand Down

0 comments on commit 3633f3b

Please sign in to comment.