tests: Updating benchmark, so it works with TLV formats
Short highlight: the decoding is now faster than encoding
Change-Id: I658befb2749fbcd7cb665e3b56560bd16d695a47
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 4e12850..15ffc39 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -3,11 +3,10 @@
noinst_PROGRAMS = \
test-get-async \
- test-publish-async
+ test-publish-async \
+ test-encode-decode-benchmark
-# test-encode-decode-benchmark
-
-# test_encode_decode_benchmark_SOURCES = test-encode-decode-benchmark.cpp
+test_encode_decode_benchmark_SOURCES = test-encode-decode-benchmark.cpp
test_get_async_SOURCES = test-get-async.cpp
diff --git a/tests/test-encode-decode-benchmark.cpp b/tests/test-encode-decode-benchmark.cpp
index 0aa48d3..ad2c40a 100644
--- a/tests/test-encode-decode-benchmark.cpp
+++ b/tests/test-encode-decode-benchmark.cpp
@@ -116,10 +116,10 @@
* @return The number of seconds for all iterations.
*/
static double
-benchmarkEncodeDataSecondsCpp(int nIterations, bool useComplex, bool useCrypto, Blob& encoding)
+benchmarkEncodeDataSecondsCpp(int nIterations, bool useComplex, bool useCrypto, Block& encoding)
{
Name name;
- Blob content;
+ Block content;
if (useComplex) {
// Use a large name and content.
name = Name("/ndn/ucla.edu/apps/lwndn-test/numbers.txt/%FD%05%05%E8%0C%CE%1D/%00");
@@ -129,58 +129,55 @@
contentStream << (count++);
while (contentStream.str().length() < 1170)
contentStream << " " << (count++);
- content = Blob((uint8_t*)contentStream.str().c_str(), contentStream.str().length());
+ content = dataBlock(Tlv::Content, contentStream.str().c_str(), contentStream.str().length());
}
else {
// Use a small name and content.
name = Name("/test");
- content = Blob((uint8_t*)"abc", 3);
+ content = dataBlock(Tlv::Content, "abc", 3);
}
- Blob finalBlockId((uint8_t*)"\x00", 1);
+ std::cout << "Content size: " << content.value_size() << std::endl;
// Initialize the KeyChain storage in case useCrypto is true.
ptr_lib::shared_ptr<MemoryIdentityStorage> identityStorage(new MemoryIdentityStorage());
ptr_lib::shared_ptr<MemoryPrivateKeyStorage> privateKeyStorage(new MemoryPrivateKeyStorage());
- KeyChain keyChain
- (ptr_lib::make_shared<IdentityManager>(identityStorage, privateKeyStorage),
- ptr_lib::make_shared<SelfVerifyPolicyManager>(identityStorage.get()));
- Name keyName("/testname/DSK-123");
- Name certificateName = keyName.getSubName(0, keyName.size() - 1).append("KEY").append
- (keyName.get(keyName.size() - 1)).append("ID-CERT").append("0");
- privateKeyStorage->setKeyPairForKeyName
- (keyName, DEFAULT_PUBLIC_KEY_DER, sizeof(DEFAULT_PUBLIC_KEY_DER), DEFAULT_PRIVATE_KEY_DER, sizeof(DEFAULT_PRIVATE_KEY_DER));
+ KeyChain keyChain(identityStorage, privateKeyStorage);
+
+ Name keyName("/testname/dsk-123");
+
+ // Initialize the storage.
+ identityStorage->addKey(keyName, KEY_TYPE_RSA,
+ PublicKey(DEFAULT_PUBLIC_KEY_DER, sizeof(DEFAULT_PUBLIC_KEY_DER)));
+
+ privateKeyStorage->setKeyPairForKeyName(keyName,
+ DEFAULT_PUBLIC_KEY_DER, sizeof(DEFAULT_PUBLIC_KEY_DER),
+ DEFAULT_PRIVATE_KEY_DER, sizeof(DEFAULT_PRIVATE_KEY_DER));
+
+ keyChain.identities().addCertificateAsDefault(*keyChain.identities().selfSign(keyName));
+ Name certificateName = keyChain.identities().getDefaultCertificateName();
// Set up publisherPublicKeyDigest and signatureBits in case useCrypto is false.
- uint8_t publisherPublicKeyDigestArray[32];
- memset(publisherPublicKeyDigestArray, 0, sizeof(publisherPublicKeyDigestArray));
- Blob publisherPublicKeyDigest(publisherPublicKeyDigestArray, sizeof(publisherPublicKeyDigestArray));
uint8_t signatureBitsArray[128];
memset(signatureBitsArray, 0, sizeof(signatureBitsArray));
- Blob signatureBits(signatureBitsArray, sizeof(signatureBitsArray));
+ Block signatureValue = dataBlock(Tlv::SignatureValue, signatureBitsArray, sizeof(signatureBitsArray));
double start = getNowSeconds();
for (int i = 0; i < nIterations; ++i) {
Data data(name);
data.setContent(content);
if (useComplex) {
- data.getMetaInfo().setTimestampMilliseconds(1.3e+12);
- data.getMetaInfo().setFreshnessSeconds(1000);
- data.getMetaInfo().setFinalBlockID(finalBlockId);
+ data.setFreshnessPeriod(1000000);
}
if (useCrypto)
// This sets the signature fields.
- keyChain.sign(data, certificateName);
+ keyChain.sign(data);
else {
- // Imitate IdentityManager::signByCertificate to set up the signature fields, but don't sign.
- KeyLocator keyLocator;
- keyLocator.setType(ndn_KeyLocatorType_KEYNAME);
- keyLocator.setKeyName(certificateName);
- keyLocator.setKeyNameType((ndn_KeyNameType)-1);
- Sha256WithRsaSignature* sha256Signature = (Sha256WithRsaSignature*)data.getSignature();
- sha256Signature->setKeyLocator(keyLocator);
- sha256Signature->getPublisherPublicKeyDigest().setPublisherPublicKeyDigest(publisherPublicKeyDigest);
- sha256Signature->setSignature(signatureBits);
+ // Imitate real sign method to set up the signature fields, but don't actually sign.
+ SignatureSha256WithRsa signature;
+ signature.setKeyLocator(certificateName);
+ signature.setValue(signatureValue);
+ data.setSignature(signature);
}
encoding = data.wireEncode();
@@ -210,25 +207,25 @@
* @return The number of seconds for all iterations.
*/
static double
-benchmarkDecodeDataSecondsCpp(int nIterations, bool useCrypto, const Blob& encoding)
+benchmarkDecodeDataSecondsCpp(int nIterations, bool useCrypto, const ConstBufferPtr &encoding)
{
- // Initialize the KeyChain storage in case useCrypto is true.
- ptr_lib::shared_ptr<MemoryIdentityStorage> identityStorage(new MemoryIdentityStorage());
- identityStorage->addKey(keyName, KEY_TYPE_RSA, Blob(DEFAULT_PUBLIC_KEY_DER, sizeof(DEFAULT_PUBLIC_KEY_DER)));
+ // // Initialize the KeyChain storage in case useCrypto is true.
+ // ptr_lib::shared_ptr<MemoryIdentityStorage> identityStorage(new MemoryIdentityStorage());
+ // identityStorage->addKey(keyName, KEY_TYPE_RSA, Blob(DEFAULT_PUBLIC_KEY_DER, sizeof(DEFAULT_PUBLIC_KEY_DER)));
- ptr_lib::shared_ptr<MemoryPrivateKeyStorage> privateKeyStorage(new MemoryPrivateKeyStorage());
- KeyChain keyChain(identityStorage, privateKeyStorage);
+ // ptr_lib::shared_ptr<MemoryPrivateKeyStorage> privateKeyStorage(new MemoryPrivateKeyStorage());
+ // KeyChain keyChain(identityStorage, privateKeyStorage);
- Name keyName("/testname/DSK-123");
+ // Name keyName("/testname/DSK-123");
size_t nameSize = 0;
double start = getNowSeconds();
for (int i = 0; i < nIterations; ++i) {
- ptr_lib::shared_ptr<Data> data(new Data());
- data->wireDecode(*encoding);
+ Data data;
+ data.wireDecode(encoding);
- if (useCrypto)
- keyChain.verifyData(data, onVerified, onVerifyFailed);
+ // if (useCrypto)
+ // keyChain.verifyData(data, onVerified, onVerifyFailed);
}
double finish = getNowSeconds();
@@ -256,7 +253,7 @@
struct ndn_NameComponent nameComponents[20];
struct ndn_Name name;
ndn_Name_initialize(&name, nameComponents, sizeof(nameComponents) / sizeof(nameComponents[0]));
- Blob contentBlob;
+ Buffer contentBlob;
struct ndn_Blob content;
if (useComplex) {
// Use a large name and content.
@@ -273,12 +270,12 @@
contentStream << (count++);
while (contentStream.str().length() < 1170)
contentStream << " " << (count++);
- contentBlob = Blob((uint8_t*)contentStream.str().c_str(), contentStream.str().length());
+ contentBlob = Buffer((uint8_t*)contentStream.str().c_str(), contentStream.str().length());
}
else {
// Use a small name and content.
ndn_Name_appendString(&name, (char*)"test");
- contentBlob = Blob((uint8_t*)"abc", 3);
+ contentBlob = Buffer((uint8_t*)"abc", 3);
}
ndn_Blob_initialize(&content, (uint8_t*)contentBlob.buf(), contentBlob.size());
@@ -426,16 +423,18 @@
static void
benchmarkEncodeDecodeDataCpp(bool useComplex, bool useCrypto)
{
- Blob encoding;
+ Block encoding;
{
- int nIterations = useCrypto ? 20000 : 2000000;
+ int nIterations = useCrypto ? 20000 : 200000;
double duration = benchmarkEncodeDataSecondsCpp(nIterations, useComplex, useCrypto, encoding);
cout << "Encode " << (useComplex ? "complex" : "simple ") << " data C++: Crypto? " << (useCrypto ? "yes" : "no ")
<< ", Duration sec, Hz: " << duration << ", " << (nIterations / duration) << endl;
}
+
+ BufferPtr wire = ptr_lib::make_shared<Buffer>(encoding.wire(), encoding.size());
{
- int nIterations = useCrypto ? 100000 : 2000000;
- double duration = benchmarkDecodeDataSecondsCpp(nIterations, useCrypto, encoding);
+ int nIterations = useCrypto ? 10000 : 1000000;
+ double duration = benchmarkDecodeDataSecondsCpp(nIterations, useCrypto, wire);
cout << "Decode " << (useComplex ? "complex" : "simple ") << " data C++: Crypto? " << (useCrypto ? "yes" : "no ")
<< ", Duration sec, Hz: " << duration << ", " << (nIterations / duration) << endl;
}