diff --git a/.jenkins.d/00-deps.sh b/.jenkins.d/00-deps.sh
index 05ad5d1..67ac9ae 100755
--- a/.jenkins.d/00-deps.sh
+++ b/.jenkins.d/00-deps.sh
@@ -25,7 +25,7 @@
 
 elif has Ubuntu $NODE_LABELS; then
     sudo apt-get -qq update
-    sudo apt-get -qy install g++ pkg-config python3-minimal \
+    sudo apt-get -qy install build-essential pkg-config python3-minimal \
                              libboost-all-dev libssl-dev libsqlite3-dev \
                              libpcap-dev libsystemd-dev
 
diff --git a/tests/daemon/face/lp-fragmenter.t.cpp b/tests/daemon/face/lp-fragmenter.t.cpp
index d440310..30eb8e9 100644
--- a/tests/daemon/face/lp-fragmenter.t.cpp
+++ b/tests/daemon/face/lp-fragmenter.t.cpp
@@ -24,10 +24,8 @@
  */
 
 #include "face/lp-fragmenter.hpp"
-#include "face/transport.hpp"
 
 #include "tests/test-common.hpp"
-#include "tests/daemon/global-io-fixture.hpp"
 
 namespace nfd {
 namespace face {
@@ -35,7 +33,7 @@
 
 using namespace nfd::tests;
 
-class LpFragmenterFixture : public GlobalIoFixture
+class LpFragmenterFixture
 {
 protected:
   LpFragmenter fragmenter{{}};
@@ -44,23 +42,22 @@
 BOOST_AUTO_TEST_SUITE(Face)
 BOOST_FIXTURE_TEST_SUITE(TestLpFragmenter, LpFragmenterFixture)
 
-BOOST_AUTO_TEST_CASE(FragmentSingleFragment)
+BOOST_AUTO_TEST_CASE(SingleFragment)
 {
-  size_t mtu = 256;
+  const size_t mtu = 256;
 
   lp::Packet packet;
   packet.add<lp::IncomingFaceIdField>(123);
 
   auto data = makeData("/test/data123");
-  BOOST_REQUIRE_EQUAL(data->wireEncode().size(), 30);
   packet.add<lp::FragmentField>({data->wireEncode().begin(), data->wireEncode().end()});
 
   bool isOk = false;
   std::vector<lp::Packet> frags;
   std::tie(isOk, frags) = fragmenter.fragmentPacket(packet, mtu);
-
   BOOST_REQUIRE(isOk);
   BOOST_REQUIRE_EQUAL(frags.size(), 1);
+
   BOOST_CHECK(frags[0].has<lp::FragmentField>());
   BOOST_CHECK_EQUAL(frags[0].get<lp::IncomingFaceIdField>(), 123);
   BOOST_CHECK(!frags[0].has<lp::FragIndexField>());
@@ -73,25 +70,23 @@
                                 fragBegin, fragEnd);
 }
 
-BOOST_AUTO_TEST_CASE(FragmentMultipleFragments)
+BOOST_AUTO_TEST_CASE(MultipleFragments)
 {
-  size_t mtu = MIN_MTU;
+  const size_t mtu = MIN_MTU;
 
   lp::Packet packet;
   packet.add<lp::IncomingFaceIdField>(123);
 
   auto data = makeData("/test/data123/123456789/987654321/123456789");
-  BOOST_REQUIRE_EQUAL(data->wireEncode().size(), 63);
   packet.add<lp::FragmentField>({data->wireEncode().begin(), data->wireEncode().end()});
 
   bool isOk = false;
   std::vector<lp::Packet> frags;
   std::tie(isOk, frags) = fragmenter.fragmentPacket(packet, mtu);
-
   BOOST_REQUIRE(isOk);
   BOOST_REQUIRE_EQUAL(frags.size(), 5);
 
-  ndn::Buffer reassembledPayload(63);
+  ndn::Buffer reassembledPayload(data->wireEncode().size());
 
   BOOST_CHECK(frags[0].has<lp::FragmentField>());
   BOOST_CHECK_EQUAL(frags[0].get<lp::IncomingFaceIdField>(), 123);
@@ -151,9 +146,9 @@
                                 reassembledPayload.begin(), reassembledPayload.end());
 }
 
-BOOST_AUTO_TEST_CASE(FragmentMtuTooSmall)
+BOOST_AUTO_TEST_CASE(MtuTooSmall)
 {
-  size_t mtu = 20;
+  const size_t mtu = 20;
   BOOST_ASSERT(mtu < MIN_MTU);
 
   lp::Packet packet;
@@ -167,13 +162,14 @@
   BOOST_CHECK_EQUAL(isOk, false);
 }
 
-BOOST_AUTO_TEST_CASE(FragmentOverFragCount)
+BOOST_AUTO_TEST_CASE(FragCountOverLimit)
 {
   LpFragmenter::Options options;
   options.nMaxFragments = 2;
   fragmenter.setOptions(options);
 
-  size_t mtu = 70;
+  const size_t mtu = 70;
+  BOOST_ASSERT(mtu >= MIN_MTU);
 
   lp::Packet packet;
   packet.add<lp::IncomingFaceIdField>(123);
diff --git a/tests/other/cs-benchmark.cpp b/tests/other/cs-benchmark.cpp
index 252e6fd..eae79be 100644
--- a/tests/other/cs-benchmark.cpp
+++ b/tests/other/cs-benchmark.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2019,  Regents of the University of California,
+ * Copyright (c) 2014-2020,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -70,10 +70,9 @@
   static shared_ptr<Data>
   makeData(const Name& name)
   {
-    auto data = make_shared<Data>(name);
-    ndn::SignatureSha256WithRsa fakeSignature;
-    fakeSignature.setValue(ndn::encoding::makeEmptyBlock(tlv::SignatureValue));
-    data->setSignature(fakeSignature);
+    auto data = std::make_shared<Data>(name);
+    data->setSignatureInfo(ndn::SignatureInfo(tlv::NullSignature));
+    data->setSignatureValue(std::make_shared<ndn::Buffer>());
     data->wireEncode();
     return data;
   }
@@ -115,7 +114,7 @@
     std::vector<shared_ptr<Interest>> workload(count);
     for (size_t i = 0; i < count; ++i) {
       Name name = genName(i);
-      auto interest = make_shared<Interest>(name);
+      auto interest = std::make_shared<Interest>(name);
       interest->setCanBePrefix(false);
       workload[i] = interest;
     }
diff --git a/tests/test-common.cpp b/tests/test-common.cpp
index 8fe7c59..b57e804 100644
--- a/tests/test-common.cpp
+++ b/tests/test-common.cpp
@@ -25,8 +25,6 @@
 
 #include "tests/test-common.hpp"
 
-#include <ndn-cxx/security/signature-sha256-with-rsa.hpp>
-
 namespace nfd {
 namespace tests {
 
@@ -34,7 +32,7 @@
 makeInterest(const Name& name, bool canBePrefix, optional<time::milliseconds> lifetime,
              optional<Interest::Nonce> nonce)
 {
-  auto interest = make_shared<Interest>(name);
+  auto interest = std::make_shared<Interest>(name);
   interest->setCanBePrefix(canBePrefix);
   if (lifetime) {
     interest->setInterestLifetime(*lifetime);
@@ -46,16 +44,15 @@
 shared_ptr<Data>
 makeData(const Name& name)
 {
-  auto data = make_shared<Data>(name);
+  auto data = std::make_shared<Data>(name);
   return signData(data);
 }
 
 Data&
 signData(Data& data)
 {
-  ndn::SignatureSha256WithRsa fakeSignature;
-  fakeSignature.setValue(ndn::encoding::makeEmptyBlock(tlv::SignatureValue));
-  data.setSignature(fakeSignature);
+  data.setSignatureInfo(ndn::SignatureInfo(tlv::NullSignature));
+  data.setSignatureValue(std::make_shared<ndn::Buffer>());
   data.wireEncode();
   return data;
 }
diff --git a/tests/test-common.hpp b/tests/test-common.hpp
index 3139ef9..8d37568 100644
--- a/tests/test-common.hpp
+++ b/tests/test-common.hpp
@@ -47,26 +47,30 @@
 namespace nfd {
 namespace tests {
 
-/** \brief create an Interest
+/**
+ * \brief Create an Interest
  */
 shared_ptr<Interest>
 makeInterest(const Name& name, bool canBePrefix = false,
              optional<time::milliseconds> lifetime = nullopt,
              optional<Interest::Nonce> nonce = nullopt);
 
-/** \brief create a Data with fake signature
- *  \note Data may be modified afterwards without losing the fake signature.
- *        If a real signature is desired, sign again with KeyChain.
+/**
+ * \brief Create a Data with a null (i.e., empty) signature
+ *
+ * If a real signature is desired, use KeyChainFixture and sign again with `m_keyChain`.
  */
 shared_ptr<Data>
 makeData(const Name& name);
 
-/** \brief add a fake signature to Data
+/**
+ * \brief Add a null signature to \p data
  */
 Data&
 signData(Data& data);
 
-/** \brief add a fake signature to Data
+/**
+ * \brief Add a null signature to \p data
  */
 inline shared_ptr<Data>
 signData(shared_ptr<Data> data)
@@ -75,15 +79,17 @@
   return data;
 }
 
-/** \brief create a Nack
+/**
+ * \brief Create a Nack
  */
 lp::Nack
 makeNack(Interest interest, lp::NackReason reason);
 
-/** \brief replace a name component in a packet
- *  \param[inout] pkt the packet
- *  \param index the index of the name component to replace
- *  \param args arguments to name::Component constructor
+/**
+ * \brief Replace a name component in a packet
+ * \param[inout] pkt the packet
+ * \param index the index of the name component to replace
+ * \param args arguments to name::Component constructor
  */
 template<typename Packet, typename ...Args>
 void
@@ -94,22 +100,25 @@
   pkt.setName(name);
 }
 
-/** \brief create a prefix announcement without signing
+/**
+ * \brief Create a prefix announcement without signing
  */
 ndn::PrefixAnnouncement
 makePrefixAnn(const Name& announcedName, time::milliseconds expiration,
               optional<ndn::security::ValidityPeriod> validity = nullopt);
 
-/** \brief create a prefix announcement without signing
- *  \param announcedName announced name
- *  \param expiration expiration period
- *  \param validityFromNow validity period, relative from now
+/**
+ * \brief Create a prefix announcement without signing
+ * \param announcedName announced name
+ * \param expiration expiration period
+ * \param validityFromNow validity period, relative from now
  */
 ndn::PrefixAnnouncement
 makePrefixAnn(const Name& announcedName, time::milliseconds expiration,
               std::pair<time::seconds, time::seconds> validityFromNow);
 
-/** \brief sign a prefix announcement
+/**
+ * \brief Sign a prefix announcement
  */
 ndn::PrefixAnnouncement
 signPrefixAnn(ndn::PrefixAnnouncement&& pa, ndn::KeyChain& keyChain,
