From fcf0f0212d0edde2db07fbce4861a045d8a89298 Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Wed, 31 Mar 2021 09:52:44 +0200 Subject: [PATCH] dnsdist: Add unit tests for the credentials class --- pdns/dnsdistdist/Makefile.am | 2 + pdns/dnsdistdist/test-credentials_cc.cc | 55 +++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 pdns/dnsdistdist/test-credentials_cc.cc diff --git a/pdns/dnsdistdist/Makefile.am b/pdns/dnsdistdist/Makefile.am index 277b1a9b98..a9f4433f20 100644 --- a/pdns/dnsdistdist/Makefile.am +++ b/pdns/dnsdistdist/Makefile.am @@ -228,6 +228,7 @@ testrunner_SOURCES = \ cachecleaner.hh \ circular_buffer.hh \ connection-management.hh \ + credentials.cc credentials.hh \ dns.cc dns.hh \ dnscrypt.cc dnscrypt.hh \ dnsdist-backend.cc \ @@ -281,6 +282,7 @@ testrunner_SOURCES = \ svc-records.cc svc-records.hh \ test-base64_cc.cc \ test-connectionmanagement_hh.cc \ + test-credentials_cc.cc \ test-delaypipe_hh.cc \ test-dnscrypt_cc.cc \ test-dnsdist_cc.cc \ diff --git a/pdns/dnsdistdist/test-credentials_cc.cc b/pdns/dnsdistdist/test-credentials_cc.cc new file mode 100644 index 0000000000..bb4891b283 --- /dev/null +++ b/pdns/dnsdistdist/test-credentials_cc.cc @@ -0,0 +1,55 @@ + +#define BOOST_TEST_DYN_LINK +#define BOOST_TEST_NO_MAIN + +#include + +#include "config.h" +#include "credentials.hh" + +BOOST_AUTO_TEST_SUITE(credentials_cc) + +#ifdef HAVE_LIBSODIUM +BOOST_AUTO_TEST_CASE(test_CredentialsUtils) { + const std::string plaintext("test"); + /* generated with hashPassword("test") */ + const std::string sampleHash("$argon2id$v=19$m=65536,t=2,p=1$ndQKu3+ZsWedqRrlNFUaNw$tnb0MJVe5C2hlqkDt0Ln3R6VKCYkfMYdxDy+puXes3s"); + + auto hashed = hashPassword(plaintext); + BOOST_CHECK(!hashed.empty()); + + BOOST_CHECK(verifyPassword(hashed, plaintext)); + BOOST_CHECK(verifyPassword(sampleHash, plaintext)); + + BOOST_CHECK(!verifyPassword(hashed, "not test")); + BOOST_CHECK(!verifyPassword(sampleHash, "not test")); + + BOOST_CHECK(isPasswordHashed(hashed)); + BOOST_CHECK(isPasswordHashed(sampleHash)); + BOOST_CHECK(!isPasswordHashed(plaintext)); +} +#endif + +BOOST_AUTO_TEST_CASE(test_CredentialsHolder) { + const std::string plaintext("test"); + + auto holder = CredentialsHolder(std::string(plaintext)); + + BOOST_CHECK(holder.matches(plaintext)); + BOOST_CHECK(!holder.matches("not test")); + BOOST_CHECK(!holder.wasHashed()); + +#ifdef HAVE_LIBSODIUM + BOOST_CHECK(CredentialsHolder::isHashingAvailable()); + const std::string sampleHash("$argon2id$v=19$m=65536,t=2,p=1$ndQKu3+ZsWedqRrlNFUaNw$tnb0MJVe5C2hlqkDt0Ln3R6VKCYkfMYdxDy+puXes3s"); + + auto fromHashedHolder= CredentialsHolder(std::string(sampleHash)); + BOOST_CHECK(fromHashedHolder.wasHashed()); + BOOST_CHECK(fromHashedHolder.matches(plaintext)); + BOOST_CHECK(!fromHashedHolder.matches("not test")); +#else + BOOST_CHECK(!CredentialsHolder::isHashingAvailable()); +#endif +} + +BOOST_AUTO_TEST_SUITE_END() -- 2.47.2