tests: sync common testing infrastructure with ndn-cxx and NFD

And upgrade waf to version 2.0.21

Change-Id: Id713e0f3035badd97ca7fc03f76e50085b9a266c
diff --git a/tests/ping/client/ping.t.cpp b/tests/ping/client/ping.t.cpp
index 67d7ddc..cef62d6 100644
--- a/tests/ping/client/ping.t.cpp
+++ b/tests/ping/client/ping.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2019,  Arizona Board of Regents.
+ * Copyright (c) 2014-2020,  Arizona Board of Regents.
  *
  * This file is part of ndn-tools (Named Data Networking Essential Tools).
  * See AUTHORS.md for complete list of ndn-tools authors and contributors.
@@ -20,6 +20,8 @@
 #include "tools/ping/client/ping.hpp"
 
 #include "tests/test-common.hpp"
+#include "tests/io-fixture.hpp"
+
 #include <ndn-cxx/util/dummy-client-face.hpp>
 
 namespace ndn {
@@ -34,20 +36,18 @@
 
 using ping::client::Ping;
 
-BOOST_FIXTURE_TEST_CASE(Basic, UnitTestTimeFixture)
+BOOST_FIXTURE_TEST_CASE(Basic, IoFixture)
 {
+  util::DummyClientFace face(m_io, {true, true});
   Options pingOptions;
-  pingOptions.prefix = "ndn:/test-prefix";
+  pingOptions.prefix = "/test-prefix";
   pingOptions.shouldAllowStaleData = false;
   pingOptions.shouldGenerateRandomSeq = false;
   pingOptions.shouldPrintTimestamp = false;
   pingOptions.nPings = 4;
-  pingOptions.interval = time::milliseconds(100);
-  pingOptions.timeout = time::milliseconds(2000);
+  pingOptions.interval = 100_ms;
+  pingOptions.timeout = 2_s;
   pingOptions.startSeq = 1000;
-
-  boost::asio::io_service io;
-  util::DummyClientFace face(io, {true, true});
   Ping ping(face, pingOptions);
 
   int nFinishSignals = 0;
@@ -73,29 +73,24 @@
 
   ping.start();
 
-  this->advanceClocks(io, time::milliseconds(1), 500);
+  this->advanceClocks(1_ms, 500);
   BOOST_REQUIRE_EQUAL(face.sentInterests.size(), 4);
 
   auto data = makeData("/test-prefix/ping/1000");
   data->setFreshnessPeriod(1_s);
   face.receive(*data);
 
-  lp::Nack nack(face.sentInterests[1]);
-  nack.setReason(lp::NackReason::DUPLICATE);
-  face.receive(nack);
+  face.receive(makeNack(face.sentInterests[1], lp::NackReason::DUPLICATE));
 
   data = makeData("/test-prefix/ping/1002");
   data->setFreshnessPeriod(1_s);
   face.receive(*data);
 
-  this->advanceClocks(io, time::milliseconds(100), 20);
+  this->advanceClocks(100_ms, 20);
 
-  // ndn:/test-prefix/ping/1003 is unanswered and will timeout
+  // /test-prefix/ping/1003 is unanswered and will timeout
 
   BOOST_CHECK_EQUAL(nFinishSignals, 1);
-
-  face.shutdown();
-  io.stop();
 }
 
 BOOST_AUTO_TEST_SUITE_END() // TestPing
diff --git a/tests/ping/integrated.t.cpp b/tests/ping/integrated.t.cpp
index 84c13e5..eafc52b 100644
--- a/tests/ping/integrated.t.cpp
+++ b/tests/ping/integrated.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2015-2018,  Arizona Board of Regents.
+ * Copyright (c) 2015-2020,  Arizona Board of Regents.
  *
  * This file is part of ndn-tools (Named Data Networking Essential Tools).
  * See AUTHORS.md for complete list of ndn-tools authors and contributors.
@@ -17,10 +17,13 @@
  * ndn-tools, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "tools/ping/server/ping-server.hpp"
 #include "tools/ping/client/ping.hpp"
+#include "tools/ping/server/ping-server.hpp"
 
-#include "tests/identity-management-fixture.hpp"
+#include "tests/test-common.hpp"
+#include "tests/io-fixture.hpp"
+#include "tests/key-chain-fixture.hpp"
+
 #include <ndn-cxx/util/dummy-client-face.hpp>
 
 namespace ndn {
@@ -29,25 +32,25 @@
 
 using namespace ndn::tests;
 
-class PingIntegratedFixture : public IdentityManagementTimeFixture
+class PingIntegratedFixture : public IoFixture, public KeyChainFixture
 {
 public:
   PingIntegratedFixture()
-    : serverFace(io, m_keyChain, {false, true})
-    , clientFace(io, m_keyChain, {false, true})
+    : serverFace(m_io, m_keyChain, {false, true})
+    , clientFace(m_io, m_keyChain, {false, true})
     , wantLoss(false)
   {
     serverFace.onSendInterest.connect([this] (const Interest& interest) {
-      io.post([=] { if (!wantLoss) { clientFace.receive(interest); } });
+      m_io.post([=] { if (!wantLoss) { clientFace.receive(interest); } });
     });
     clientFace.onSendInterest.connect([this] (const Interest& interest) {
-      io.post([=] { if (!wantLoss) { serverFace.receive(interest); } });
+      m_io.post([=] { if (!wantLoss) { serverFace.receive(interest); } });
     });
     serverFace.onSendData.connect([this] (const Data& data) {
-      io.post([=] { if (!wantLoss) { clientFace.receive(data); } });
+      m_io.post([=] { if (!wantLoss) { clientFace.receive(data); } });
     });
     clientFace.onSendData.connect([this] (const Data& data) {
-      io.post([=] { if (!wantLoss) { serverFace.receive(data); } });
+      m_io.post([=] { if (!wantLoss) { serverFace.receive(data); } });
     });
   }
 
@@ -55,11 +58,10 @@
   {
     serverFace.shutdown();
     clientFace.shutdown();
-    io.stop();
+    m_io.stop();
   }
 
 public:
-  boost::asio::io_service io;
   util::DummyClientFace serverFace;
   util::DummyClientFace clientFace;
   std::unique_ptr<server::PingServer> server;
@@ -92,11 +94,11 @@
   clientOpts.timeout = 2_s;
   clientOpts.startSeq = 1000;
   client = make_unique<client::Ping>(clientFace, clientOpts);
-  client->afterFinish.connect(bind(&PingIntegratedFixture::onFinish, this));
+  client->afterFinish.connect([this] { onFinish(); });
   client->start();
 
-  advanceClocks(io, 1_ms, 400);
-  io.run();
+  advanceClocks(1_ms, 400);
+  m_io.run();
 
   BOOST_CHECK_EQUAL(4, server->getNPings());
 }
@@ -125,11 +127,11 @@
   clientOpts.timeout = 500_ms;
   clientOpts.startSeq = 1000;
   client = make_unique<client::Ping>(clientFace, clientOpts);
-  client->afterFinish.connect(bind(&PingIntegratedFixture::onFinish, this));
+  client->afterFinish.connect([this] { onFinish(); });
   client->start();
 
-  advanceClocks(io, 1_ms, 1000);
-  io.run();
+  advanceClocks(1_ms, 1000);
+  m_io.run();
 
   BOOST_CHECK_EQUAL(0, server->getNPings());
 }
diff --git a/tests/ping/server/ping-server.t.cpp b/tests/ping/server/ping-server.t.cpp
index 1fe5b35..f7ff66f 100644
--- a/tests/ping/server/ping-server.t.cpp
+++ b/tests/ping/server/ping-server.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2018,  Arizona Board of Regents.
+ * Copyright (c) 2014-2020,  Arizona Board of Regents.
  *
  * This file is part of ndn-tools (Named Data Networking Essential Tools).
  * See AUTHORS.md for complete list of ndn-tools authors and contributors.
@@ -20,7 +20,8 @@
 #include "tools/ping/server/ping-server.hpp"
 
 #include "tests/test-common.hpp"
-#include "../../identity-management-fixture.hpp"
+#include "tests/io-fixture.hpp"
+#include "tests/key-chain-fixture.hpp"
 
 #include <ndn-cxx/util/dummy-client-face.hpp>
 
@@ -34,11 +35,11 @@
 BOOST_AUTO_TEST_SUITE(Ping)
 BOOST_AUTO_TEST_SUITE(TestPingServer)
 
-class CreatePingServerFixture : public IdentityManagementTimeFixture
+class CreatePingServerFixture : public IoFixture, public KeyChainFixture
 {
 protected:
   CreatePingServerFixture()
-    : face(io, m_keyChain, {false, true})
+    : face(m_io, m_keyChain, {false, true})
     , pingOptions(makeOptions())
     , pingServer(face, m_keyChain, pingOptions)
   {
@@ -72,7 +73,6 @@
   }
 
 protected:
-  boost::asio::io_service io;
   util::DummyClientFace face;
   Options pingOptions;
   PingServer pingServer;
@@ -83,12 +83,12 @@
   BOOST_REQUIRE_EQUAL(0, pingServer.getNPings());
   pingServer.start();
 
-  advanceClocks(io, 1_ms, 200);
+  advanceClocks(1_ms, 200);
 
   face.receive(makePingInterest(1000));
   face.receive(makePingInterest(1001));
 
-  io.run();
+  m_io.run();
 
   BOOST_CHECK_EQUAL(2, pingServer.getNPings());
 }