nix-super/tests/unit/libstore/store-reference.cc
John Ericson a97a08411c More support for std::filepath in libnixutil
We're not replacing `Path` in exposed definitions in many cases, but
just adding alternatives. This will allow us to "top down" change `Path`
to `std::fileysystem::path`, and then we can remove the `Path`-using
utilities which will become unused.

Also add some test files which we forgot to include in the libutil unit
tests `meson.build`.

Co-Authored-By: siddhantCodes <siddhantk232@gmail.com>
2024-08-26 17:23:56 -04:00

123 lines
3.3 KiB
C++

#include <nlohmann/json.hpp>
#include <gtest/gtest.h>
#include "file-system.hh"
#include "store-reference.hh"
#include "tests/characterization.hh"
#include "tests/libstore.hh"
namespace nix {
using nlohmann::json;
class StoreReferenceTest : public CharacterizationTest, public LibStoreTest
{
std::filesystem::path unitTestData = getUnitTestData() / "store-reference";
std::filesystem::path goldenMaster(PathView testStem) const override
{
return unitTestData / (testStem + ".txt");
}
};
#define URI_TEST_READ(STEM, OBJ) \
TEST_F(StoreReferenceTest, PathInfo_##STEM##_from_uri) \
{ \
readTest(#STEM, ([&](const auto & encoded) { \
StoreReference expected = OBJ; \
auto got = StoreReference::parse(encoded); \
ASSERT_EQ(got, expected); \
})); \
}
#define URI_TEST_WRITE(STEM, OBJ) \
TEST_F(StoreReferenceTest, PathInfo_##STEM##_to_uri) \
{ \
writeTest( \
#STEM, \
[&]() -> StoreReference { return OBJ; }, \
[](const auto & file) { return StoreReference::parse(readFile(file)); }, \
[](const auto & file, const auto & got) { return writeFile(file, got.render()); }); \
}
#define URI_TEST(STEM, OBJ) \
URI_TEST_READ(STEM, OBJ) \
URI_TEST_WRITE(STEM, OBJ)
URI_TEST(
auto,
(StoreReference{
.variant = StoreReference::Auto{},
.params = {},
}))
URI_TEST(
auto_param,
(StoreReference{
.variant = StoreReference::Auto{},
.params =
{
{"root", "/foo/bar/baz"},
},
}))
static StoreReference localExample_1{
.variant =
StoreReference::Specified{
.scheme = "local",
},
.params =
{
{"root", "/foo/bar/baz"},
},
};
static StoreReference localExample_2{
.variant =
StoreReference::Specified{
.scheme = "local",
.authority = "/foo/bar/baz",
},
.params =
{
{"trusted", "true"},
},
};
URI_TEST(local_1, localExample_1)
URI_TEST(local_2, localExample_2)
URI_TEST_READ(local_shorthand_1, localExample_1)
URI_TEST_READ(local_shorthand_2, localExample_2)
static StoreReference unixExample{
.variant =
StoreReference::Specified{
.scheme = "unix",
},
.params =
{
{"max-connections", "7"},
{"trusted", "true"},
},
};
URI_TEST(unix, unixExample)
URI_TEST_READ(unix_shorthand, unixExample)
URI_TEST(
ssh,
(StoreReference{
.variant =
StoreReference::Specified{
.scheme = "ssh",
.authority = "localhost",
},
.params = {},
}))
}