]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Add unit tests for the credentials class
authorRemi Gacogne <remi.gacogne@powerdns.com>
Wed, 31 Mar 2021 07:52:44 +0000 (09:52 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 16 Sep 2021 12:12:27 +0000 (14:12 +0200)
pdns/dnsdistdist/Makefile.am
pdns/dnsdistdist/test-credentials_cc.cc [new file with mode: 0644]

index 277b1a9b98fc22cdb13c07ff07491bfbb6128439..a9f4433f205a57aaca5075e7d5d03410ea9fae85 100644 (file)
@@ -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 (file)
index 0000000..bb4891b
--- /dev/null
@@ -0,0 +1,55 @@
+
+#define BOOST_TEST_DYN_LINK
+#define BOOST_TEST_NO_MAIN
+
+#include <boost/test/unit_test.hpp>
+
+#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()