lokinet/test/test_llarp_router.cpp

92 lines
2.1 KiB
C++
Raw Normal View History

#include <router/router.hpp>
2019-01-13 14:00:50 +00:00
#include <crypto/crypto.hpp>
#include <crypto/crypto_libsodium.hpp>
2019-05-28 19:45:09 +00:00
#include <llarp_test.hpp>
#include <functional>
#include <random>
2019-01-15 00:42:50 +00:00
#include <test_util.hpp>
#include <gtest/gtest.h>
2019-05-28 19:45:09 +00:00
using namespace ::llarp;
using namespace ::testing;
2019-05-28 19:45:09 +00:00
using FindOrCreateFunc = std::function< bool(const fs::path &, SecretKey &) >;
2019-05-28 19:45:09 +00:00
struct FindOrCreate : public test::LlarpTest<>,
public WithParamInterface< FindOrCreateFunc >
{
};
// Concerns
// - file missing
// - file empty
// - happy path
TEST_P(FindOrCreate, find_file_missing)
{
// File missing. Should create a new file
2019-05-28 19:45:09 +00:00
SecretKey key;
fs::path p = test::randFilename();
ASSERT_FALSE(fs::exists(fs::status(p)));
2019-05-28 19:45:09 +00:00
test::FileGuard guard(p);
EXPECT_CALL(m_crypto, encryption_keygen(_))
.Times(AtMost(1))
.WillRepeatedly(Invoke(&test::keygen< SecretKey >));
EXPECT_CALL(m_crypto, identity_keygen(_))
.Times(AtMost(1))
.WillRepeatedly(Invoke(&test::keygen< SecretKey >));
ASSERT_TRUE(GetParam()(p, key));
ASSERT_TRUE(fs::exists(fs::status(p)));
ASSERT_FALSE(key.IsZero());
}
TEST_P(FindOrCreate, find_file_empty)
{
// File empty.
2019-05-28 19:45:09 +00:00
SecretKey key;
fs::path p = test::randFilename();
ASSERT_FALSE(fs::exists(fs::status(p)));
std::fstream f;
f.open(p.string(), std::ios::out);
f.close();
2019-05-28 19:45:09 +00:00
test::FileGuard guard(p);
ASSERT_FALSE(GetParam()(p, key));
// Verify we didn't delete an invalid file
ASSERT_TRUE(fs::exists(fs::status(p)));
}
TEST_P(FindOrCreate, happy_path)
{
// happy path.
2019-05-28 19:45:09 +00:00
SecretKey key;
fs::path p = test::randFilename();
ASSERT_FALSE(fs::exists(fs::status(p)));
std::ofstream f;
f.open(p.string(), std::ios::out);
std::fill_n(std::ostream_iterator< byte_t >(f), key.size(), 0x20);
f.close();
2019-05-28 19:45:09 +00:00
test::FileGuard guard(p);
ASSERT_TRUE(GetParam()(p, key));
// Verify we didn't delete the file
ASSERT_TRUE(fs::exists(fs::status(p)));
}
FindOrCreateFunc findOrCreateFunc[] = {llarp_findOrCreateEncryption,
llarp_findOrCreateIdentity};
INSTANTIATE_TEST_CASE_P(TestRouter, FindOrCreate,
2019-02-11 00:02:20 +00:00
::testing::ValuesIn(findOrCreateFunc), );