Test including relative paths in configuration
Change-Id: If6c69a5e16d1ccd223fba392890f08f0032fb754
This commit is contained in:
parent
02eb07cfd5
commit
75c0de3e3c
6 changed files with 56 additions and 18 deletions
|
@ -9,17 +9,10 @@
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
|
|
||||||
#include "types.hh"
|
#include "types.hh"
|
||||||
|
#include "test-data.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
/**
|
|
||||||
* The path to the unit test data directory. See the contributing guide
|
|
||||||
* in the manual for further details.
|
|
||||||
*/
|
|
||||||
static Path getUnitTestData() {
|
|
||||||
return getEnv("_NIX_TEST_UNIT_DATA").value();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether we should update "golden masters" instead of running tests
|
* Whether we should update "golden masters" instead of running tests
|
||||||
* against them. See the contributing guide in the manual for further
|
* against them. See the contributing guide in the manual for further
|
||||||
|
|
16
tests/unit/libutil-support/tests/test-data.cc
Normal file
16
tests/unit/libutil-support/tests/test-data.cc
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
#include "test-data.hh"
|
||||||
|
#include "strings.hh"
|
||||||
|
|
||||||
|
namespace nix {
|
||||||
|
|
||||||
|
Path getUnitTestData()
|
||||||
|
{
|
||||||
|
return getEnv("_NIX_TEST_UNIT_DATA").value();
|
||||||
|
}
|
||||||
|
|
||||||
|
Path getUnitTestDataPath(std::string_view path)
|
||||||
|
{
|
||||||
|
return absPath(getUnitTestData() + "/" + path);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,25 +1,20 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "environment-variables.hh"
|
|
||||||
#include "types.hh"
|
#include "types.hh"
|
||||||
|
#include "environment-variables.hh"
|
||||||
|
#include "file-system.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
// TODO: These helpers should be available in all unit tests.
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The path to the unit test data directory. See the contributing guide
|
* The path to the unit test data directory. See the contributing guide
|
||||||
* in the manual for further details.
|
* in the manual for further details.
|
||||||
*/
|
*/
|
||||||
static Path getUnitTestData() {
|
Path getUnitTestData();
|
||||||
return getEnv("_NIX_TEST_UNIT_DATA").value();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resolve a path under the unit test data directory to an absolute path.
|
* Resolve a path under the unit test data directory to an absolute path.
|
||||||
*/
|
*/
|
||||||
static Path getUnitTestDataPath(std::string_view path) {
|
Path getUnitTestDataPath(std::string_view path);
|
||||||
return absPath(getUnitTestData() + "/" + path);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,5 +1,9 @@
|
||||||
#include "config.hh"
|
#include "config.hh"
|
||||||
#include "args.hh"
|
#include "args.hh"
|
||||||
|
#include "file-system.hh"
|
||||||
|
#include "environment-variables.hh"
|
||||||
|
#include "logging.hh"
|
||||||
|
#include "tests/test-data.hh"
|
||||||
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
@ -287,6 +291,35 @@ namespace nix {
|
||||||
), Error);
|
), Error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(Config, includeRelativePath) {
|
||||||
|
Config config;
|
||||||
|
Setting<std::string> setting{&config, "", "puppy", "description"};
|
||||||
|
|
||||||
|
config.applyConfig("include puppy.conf", {
|
||||||
|
.path = getUnitTestDataPath("nix.conf")
|
||||||
|
});
|
||||||
|
|
||||||
|
std::map<std::string, Config::SettingInfo> settings;
|
||||||
|
config.getSettings(settings);
|
||||||
|
ASSERT_FALSE(settings.empty());
|
||||||
|
ASSERT_EQ(settings["puppy"].value, "doggy");
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(Config, includeTildePath) {
|
||||||
|
Config config;
|
||||||
|
Setting<std::string> setting{&config, "", "puppy", "description"};
|
||||||
|
|
||||||
|
config.applyConfig("include ~/puppy.conf", {
|
||||||
|
.path = "/doesnt-exist",
|
||||||
|
.home = getUnitTestData()
|
||||||
|
});
|
||||||
|
|
||||||
|
std::map<std::string, Config::SettingInfo> settings;
|
||||||
|
config.getSettings(settings);
|
||||||
|
ASSERT_FALSE(settings.empty());
|
||||||
|
ASSERT_EQ(settings["puppy"].value, "doggy");
|
||||||
|
}
|
||||||
|
|
||||||
TEST(Config, applyConfigInvalidThrows) {
|
TEST(Config, applyConfigInvalidThrows) {
|
||||||
Config config;
|
Config config;
|
||||||
ASSERT_THROW(config.applyConfig("value == key"), UsageError);
|
ASSERT_THROW(config.applyConfig("value == key"), UsageError);
|
||||||
|
|
1
tests/unit/libutil/data/puppy.conf
Normal file
1
tests/unit/libutil/data/puppy.conf
Normal file
|
@ -0,0 +1 @@
|
||||||
|
puppy = doggy
|
|
@ -19,6 +19,7 @@ libutil_test_support_sources = files(
|
||||||
'libutil-support/tests/cli-literate-parser.cc',
|
'libutil-support/tests/cli-literate-parser.cc',
|
||||||
'libutil-support/tests/hash.cc',
|
'libutil-support/tests/hash.cc',
|
||||||
'libutil-support/tests/terminal-code-eater.cc',
|
'libutil-support/tests/terminal-code-eater.cc',
|
||||||
|
'libutil-support/tests/test-data.cc',
|
||||||
)
|
)
|
||||||
libutil_test_support = library(
|
libutil_test_support = library(
|
||||||
'lixutil-test-support',
|
'lixutil-test-support',
|
||||||
|
@ -95,7 +96,6 @@ libstore_test_support_sources = files(
|
||||||
'libstore-support/tests/derived-path.cc',
|
'libstore-support/tests/derived-path.cc',
|
||||||
'libstore-support/tests/outputs-spec.cc',
|
'libstore-support/tests/outputs-spec.cc',
|
||||||
'libstore-support/tests/path.cc',
|
'libstore-support/tests/path.cc',
|
||||||
'libstore-support/tests/test-data.hh',
|
|
||||||
)
|
)
|
||||||
|
|
||||||
libstore_test_support = library(
|
libstore_test_support = library(
|
||||||
|
|
Loading…
Reference in a new issue