Merge pull request #10562 from hercules-ci/unit-test-clean-config

Run unit tests with clean config
This commit is contained in:
Robert Hensing 2024-04-21 14:28:03 +02:00 committed by GitHub
commit d871e7cc5b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 28 additions and 8 deletions

View file

@ -113,7 +113,7 @@ static void sigHandler(int signo) { }
#endif
void initNix()
void initNix(bool loadConfig)
{
/* Turn on buffering for cerr. */
#if HAVE_PUBSETBUF
@ -121,7 +121,7 @@ void initNix()
std::cerr.rdbuf()->pubsetbuf(buf, sizeof(buf));
#endif
initLibStore();
initLibStore(loadConfig);
#ifndef _WIN32
unix::startSignalHandlerThread();

View file

@ -21,8 +21,9 @@ int handleExceptions(const std::string & programName, std::function<void()> fun)
/**
* Don't forget to call initPlugins() after settings are initialized!
* @param loadConfig Whether to load configuration from `nix.conf`, `NIX_CONFIG`, etc. May be disabled for unit tests.
*/
void initNix();
void initNix(bool loadConfig = true);
void parseCmdLine(int argc, char * * argv,
std::function<bool(Strings::iterator & arg, const Strings::iterator & end)> parseArg);

View file

@ -19,6 +19,16 @@ nix_err nix_libstore_init(nix_c_context * context)
NIXC_CATCH_ERRS
}
nix_err nix_libstore_init_no_load_config(nix_c_context * context)
{
if (context)
context->last_err_code = NIX_OK;
try {
nix::initLibStore(false);
}
NIXC_CATCH_ERRS
}
nix_err nix_init_plugins(nix_c_context * context)
{
if (context)

View file

@ -35,6 +35,13 @@ typedef struct StorePath StorePath;
*/
nix_err nix_libstore_init(nix_c_context * context);
/**
* @brief Like nix_libstore_init, but does not load the Nix configuration.
*
* This is useful when external configuration is not desired, such as when running unit tests.
*/
nix_err nix_libstore_init_no_load_config(nix_c_context * context);
/**
* @brief Loads the plugins specified in Nix's plugin-files setting.
*

View file

@ -427,11 +427,12 @@ void assertLibStoreInitialized() {
};
}
void initLibStore() {
void initLibStore(bool loadConfig) {
if (initLibStoreDone) return;
initLibUtil();
if (loadConfig)
loadConfFile();
preloadNSS();

View file

@ -1279,9 +1279,10 @@ std::vector<Path> getUserConfigFiles();
extern const std::string nixVersion;
/**
* NB: This is not sufficient. You need to call initNix()
* @param loadConfig Whether to load configuration from `nix.conf`, `NIX_CONFIG`, etc. May be disabled for unit tests.
* @note When using libexpr, and/or libmain, This is not sufficient. See initNix().
*/
void initLibStore();
void initLibStore(bool loadConfig = true);
/**
* It's important to initialize before doing _anything_, which is why we

View file

@ -11,7 +11,7 @@ namespace nix {
class LibStoreTest : public virtual ::testing::Test {
public:
static void SetUpTestSuite() {
initLibStore();
initLibStore(false);
}
protected: