summaryrefslogtreecommitdiff
path: root/selftest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'selftest.cpp')
-rw-r--r--selftest.cpp95
1 files changed, 65 insertions, 30 deletions
diff --git a/selftest.cpp b/selftest.cpp
index aecccd21..8a450796 100644
--- a/selftest.cpp
+++ b/selftest.cpp
@@ -49,10 +49,11 @@
#include "osdep/OSUtils.hpp"
#include "osdep/Phy.hpp"
#include "osdep/Http.hpp"
-#include "osdep/BackgroundResolver.hpp"
#include "osdep/PortMapper.hpp"
#include "osdep/Thread.hpp"
+#include "controller/JSONDB.hpp"
+
#ifdef __WINDOWS__
#include <tchar.h>
#endif
@@ -153,9 +154,9 @@ static int testCrypto()
memset(buf3,0,sizeof(buf3));
Salsa20 s20;
s20.init("12345678123456781234567812345678",256,"12345678");
- s20.encrypt20(buf1,buf2,sizeof(buf1));
+ s20.crypt20(buf1,buf2,sizeof(buf1));
s20.init("12345678123456781234567812345678",256,"12345678");
- s20.decrypt20(buf2,buf3,sizeof(buf2));
+ s20.crypt20(buf2,buf3,sizeof(buf2));
if (memcmp(buf1,buf3,sizeof(buf1))) {
std::cout << "FAIL (encrypt/decrypt test)" << std::endl;
return -1;
@@ -164,7 +165,7 @@ static int testCrypto()
Salsa20 s20(s20TV0Key,256,s20TV0Iv);
memset(buf1,0,sizeof(buf1));
memset(buf2,0,sizeof(buf2));
- s20.encrypt20(buf1,buf2,64);
+ s20.crypt20(buf1,buf2,64);
if (memcmp(buf2,s20TV0Ks,64)) {
std::cout << "FAIL (test vector 0)" << std::endl;
return -1;
@@ -172,7 +173,7 @@ static int testCrypto()
s20.init(s2012TV0Key,256,s2012TV0Iv);
memset(buf1,0,sizeof(buf1));
memset(buf2,0,sizeof(buf2));
- s20.encrypt12(buf1,buf2,64);
+ s20.crypt12(buf1,buf2,64);
if (memcmp(buf2,s2012TV0Ks,64)) {
std::cout << "FAIL (test vector 1)" << std::endl;
return -1;
@@ -194,7 +195,7 @@ static int testCrypto()
double bytes = 0.0;
uint64_t start = OSUtils::now();
for(unsigned int i=0;i<200;++i) {
- s20.encrypt12(bb,bb,1234567);
+ s20.crypt12(bb,bb,1234567);
bytes += 1234567.0;
}
uint64_t end = OSUtils::now();
@@ -212,7 +213,7 @@ static int testCrypto()
double bytes = 0.0;
uint64_t start = OSUtils::now();
for(unsigned int i=0;i<200;++i) {
- s20.encrypt20(bb,bb,1234567);
+ s20.crypt20(bb,bb,1234567);
bytes += 1234567.0;
}
uint64_t end = OSUtils::now();
@@ -325,6 +326,17 @@ static int testCrypto()
}
std::cout << "PASS" << std::endl;
+ std::cout << "[crypto] Benchmarking C25519 ECC key agreement... "; std::cout.flush();
+ C25519::Pair bp[8];
+ for(int k=0;k<8;++k)
+ bp[k] = C25519::generate();
+ const uint64_t st = OSUtils::now();
+ for(unsigned int k=0;k<50;++k) {
+ C25519::agree(bp[~k & 7],bp[k & 7].pub,buf1,64);
+ }
+ const uint64_t et = OSUtils::now();
+ std::cout << ((double)(et - st) / 50.0) << "ms per agreement." << std::endl;
+
std::cout << "[crypto] Testing Ed25519 ECC signatures... "; std::cout.flush();
C25519::Pair didntSign = C25519::generate();
for(unsigned int i=0;i<10;++i) {
@@ -374,11 +386,15 @@ static int testIdentity()
std::cout << "FAIL (1)" << std::endl;
return -1;
}
- if (!id.locallyValidate()) {
- std::cout << "FAIL (2)" << std::endl;
- return -1;
+ const uint64_t vst = OSUtils::now();
+ for(int k=0;k<10;++k) {
+ if (!id.locallyValidate()) {
+ std::cout << "FAIL (2)" << std::endl;
+ return -1;
+ }
}
- std::cout << "PASS" << std::endl;
+ const uint64_t vet = OSUtils::now();
+ std::cout << "PASS (" << ((double)(vet - vst) / 10.0) << "ms per validation)" << std::endl;
std::cout << "[identity] Validate known-bad identity... "; std::cout.flush();
if (!id.fromString(KNOWN_BAD_IDENTITY)) {
@@ -556,7 +572,7 @@ static int testPacket()
return -1;
}
- a.armor(salsaKey,true);
+ a.armor(salsaKey,true,0);
if (!a.dearmor(salsaKey)) {
std::cout << "FAIL (encrypt-decrypt/verify)" << std::endl;
return -1;
@@ -807,6 +823,43 @@ static int testOther()
}
std::cout << "PASS (junk value to prevent optimization-out of test: " << foo << ")" << std::endl;
+ /*
+ std::cout << "[other] Testing controller/JSONDB..."; std::cout.flush();
+ {
+ std::map<std::string,nlohmann::json> db1data;
+ JSONDB db1("jsondb-test");
+ for(unsigned int i=0;i<256;++i) {
+ std::string n;
+ for(unsigned int j=0,k=rand() % 4;j<=k;++j) {
+ if (j > 0) n.push_back('/');
+ char foo[24];
+ Utils::snprintf(foo,sizeof(foo),"%lx",rand());
+ n.append(foo);
+ }
+ db1data[n] = {{"i",i}};
+ db1.put(n,db1data[n]);
+ }
+ for(std::map<std::string,nlohmann::json>::iterator i(db1data.begin());i!=db1data.end();++i) {
+ i->second["foo"] = "bar";
+ db1.put(i->first,i->second);
+ }
+ JSONDB db2("jsondb-test");
+ if (db1 != db2) {
+ std::cout << " FAILED (db1!=db2 #1)" << std::endl;
+ return -1;
+ }
+ for(std::map<std::string,nlohmann::json>::iterator i(db1data.begin());i!=db1data.end();++i) {
+ db1.erase(i->first);
+ }
+ db2.reload();
+ if (db1 != db2) {
+ std::cout << " FAILED (db1!=db2 #2)" << std::endl;
+ return -1;
+ }
+ }
+ std::cout << " PASS" << std::endl;
+ */
+
return 0;
}
@@ -958,23 +1011,6 @@ static int testPhy()
return 0;
}
-static int testResolver()
-{
- std::cout << "[resolver] Testing BackgroundResolver..."; std::cout.flush();
-
- BackgroundResolver r("tcp-fallback.zerotier.com");
- r.resolveNow();
- r.wait();
-
- std::vector<InetAddress> ips(r.get());
- for(std::vector<InetAddress>::const_iterator ip(ips.begin());ip!=ips.end();++ip) {
- std::cout << ' ' << ip->toString();
- }
- std::cout << std::endl;
-
- return 0;
-}
-
/*
static int testHttp()
{
@@ -1082,7 +1118,6 @@ int main(int argc,char **argv)
r |= testIdentity();
r |= testCertificate();
r |= testPhy();
- r |= testResolver();
//r |= testHttp();
//*/