mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-22 05:56:15 +02:00
Ensure we can construct remote store configs in isolation
Progress towards #10766 I thought that #10768 achieved, but when I went to use this stuff (in Hydra), turns out it did not. (Those `using FooConfig;` lines were not working --- they are so finicky!) This PR gets the job done, and adds some trivial unit tests to make sure I did what I intended. I had to add add a header to expose `SSHStoreConfig`, after which the preexisting `ssh-store-config.*` were very confusingly named files, so I renamed them to `common-ssh-store-config.hh` to match the type defined therein.
This commit is contained in:
parent
846869da0e
commit
808082ea03
11 changed files with 120 additions and 26 deletions
|
@ -143,6 +143,7 @@
|
||||||
''^src/libstore/common-protocol-impl\.hh$''
|
''^src/libstore/common-protocol-impl\.hh$''
|
||||||
''^src/libstore/common-protocol\.cc$''
|
''^src/libstore/common-protocol\.cc$''
|
||||||
''^src/libstore/common-protocol\.hh$''
|
''^src/libstore/common-protocol\.hh$''
|
||||||
|
''^src/libstore/common-ssh-store-config\.hh$''
|
||||||
''^src/libstore/content-address\.cc$''
|
''^src/libstore/content-address\.cc$''
|
||||||
''^src/libstore/content-address\.hh$''
|
''^src/libstore/content-address\.hh$''
|
||||||
''^src/libstore/daemon\.cc$''
|
''^src/libstore/daemon\.cc$''
|
||||||
|
@ -215,7 +216,6 @@
|
||||||
''^src/libstore/serve-protocol\.hh$''
|
''^src/libstore/serve-protocol\.hh$''
|
||||||
''^src/libstore/sqlite\.cc$''
|
''^src/libstore/sqlite\.cc$''
|
||||||
''^src/libstore/sqlite\.hh$''
|
''^src/libstore/sqlite\.hh$''
|
||||||
''^src/libstore/ssh-store-config\.hh$''
|
|
||||||
''^src/libstore/ssh-store\.cc$''
|
''^src/libstore/ssh-store\.cc$''
|
||||||
''^src/libstore/ssh\.cc$''
|
''^src/libstore/ssh\.cc$''
|
||||||
''^src/libstore/ssh\.hh$''
|
''^src/libstore/ssh\.hh$''
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include <regex>
|
#include <regex>
|
||||||
|
|
||||||
#include "ssh-store-config.hh"
|
#include "common-ssh-store-config.hh"
|
||||||
#include "ssh.hh"
|
#include "ssh.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
|
@ -1,5 +1,5 @@
|
||||||
#include "legacy-ssh-store.hh"
|
#include "legacy-ssh-store.hh"
|
||||||
#include "ssh-store-config.hh"
|
#include "common-ssh-store-config.hh"
|
||||||
#include "archive.hh"
|
#include "archive.hh"
|
||||||
#include "pool.hh"
|
#include "pool.hh"
|
||||||
#include "remote-store.hh"
|
#include "remote-store.hh"
|
||||||
|
@ -15,6 +15,15 @@
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
LegacySSHStoreConfig::LegacySSHStoreConfig(
|
||||||
|
std::string_view scheme,
|
||||||
|
std::string_view authority,
|
||||||
|
const Params & params)
|
||||||
|
: StoreConfig(params)
|
||||||
|
, CommonSSHStoreConfig(scheme, authority, params)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
std::string LegacySSHStoreConfig::doc()
|
std::string LegacySSHStoreConfig::doc()
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
|
@ -35,7 +44,7 @@ LegacySSHStore::LegacySSHStore(
|
||||||
const Params & params)
|
const Params & params)
|
||||||
: StoreConfig(params)
|
: StoreConfig(params)
|
||||||
, CommonSSHStoreConfig(scheme, host, params)
|
, CommonSSHStoreConfig(scheme, host, params)
|
||||||
, LegacySSHStoreConfig(params)
|
, LegacySSHStoreConfig(scheme, host, params)
|
||||||
, Store(params)
|
, Store(params)
|
||||||
, connections(make_ref<Pool<Connection>>(
|
, connections(make_ref<Pool<Connection>>(
|
||||||
std::max(1, (int) maxConnections),
|
std::max(1, (int) maxConnections),
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
///@file
|
///@file
|
||||||
|
|
||||||
#include "ssh-store-config.hh"
|
#include "common-ssh-store-config.hh"
|
||||||
#include "store-api.hh"
|
#include "store-api.hh"
|
||||||
#include "ssh.hh"
|
#include "ssh.hh"
|
||||||
#include "callback.hh"
|
#include "callback.hh"
|
||||||
|
@ -13,6 +13,11 @@ struct LegacySSHStoreConfig : virtual CommonSSHStoreConfig
|
||||||
{
|
{
|
||||||
using CommonSSHStoreConfig::CommonSSHStoreConfig;
|
using CommonSSHStoreConfig::CommonSSHStoreConfig;
|
||||||
|
|
||||||
|
LegacySSHStoreConfig(
|
||||||
|
std::string_view scheme,
|
||||||
|
std::string_view authority,
|
||||||
|
const Params & params);
|
||||||
|
|
||||||
const Setting<Strings> remoteProgram{this, {"nix-store"}, "remote-program",
|
const Setting<Strings> remoteProgram{this, {"nix-store"}, "remote-program",
|
||||||
"Path to the `nix-store` executable on the remote machine."};
|
"Path to the `nix-store` executable on the remote machine."};
|
||||||
|
|
||||||
|
|
|
@ -162,6 +162,7 @@ sources = files(
|
||||||
'builtins/fetchurl.cc',
|
'builtins/fetchurl.cc',
|
||||||
'builtins/unpack-channel.cc',
|
'builtins/unpack-channel.cc',
|
||||||
'common-protocol.cc',
|
'common-protocol.cc',
|
||||||
|
'common-ssh-store-config.cc',
|
||||||
'content-address.cc',
|
'content-address.cc',
|
||||||
'daemon.cc',
|
'daemon.cc',
|
||||||
'derivations.cc',
|
'derivations.cc',
|
||||||
|
@ -206,7 +207,6 @@ sources = files(
|
||||||
'serve-protocol-connection.cc',
|
'serve-protocol-connection.cc',
|
||||||
'serve-protocol.cc',
|
'serve-protocol.cc',
|
||||||
'sqlite.cc',
|
'sqlite.cc',
|
||||||
'ssh-store-config.cc',
|
|
||||||
'ssh-store.cc',
|
'ssh-store.cc',
|
||||||
'ssh.cc',
|
'ssh.cc',
|
||||||
'store-api.cc',
|
'store-api.cc',
|
||||||
|
@ -233,6 +233,7 @@ headers = [config_h] + files(
|
||||||
'builtins/buildenv.hh',
|
'builtins/buildenv.hh',
|
||||||
'common-protocol-impl.hh',
|
'common-protocol-impl.hh',
|
||||||
'common-protocol.hh',
|
'common-protocol.hh',
|
||||||
|
'common-ssh-store-config.hh',
|
||||||
'content-address.hh',
|
'content-address.hh',
|
||||||
'daemon.hh',
|
'daemon.hh',
|
||||||
'derivations.hh',
|
'derivations.hh',
|
||||||
|
@ -272,11 +273,11 @@ headers = [config_h] + files(
|
||||||
'remote-store.hh',
|
'remote-store.hh',
|
||||||
's3-binary-cache-store.hh',
|
's3-binary-cache-store.hh',
|
||||||
's3.hh',
|
's3.hh',
|
||||||
|
'ssh-store.hh',
|
||||||
'serve-protocol-connection.hh',
|
'serve-protocol-connection.hh',
|
||||||
'serve-protocol-impl.hh',
|
'serve-protocol-impl.hh',
|
||||||
'serve-protocol.hh',
|
'serve-protocol.hh',
|
||||||
'sqlite.hh',
|
'sqlite.hh',
|
||||||
'ssh-store-config.hh',
|
|
||||||
'ssh.hh',
|
'ssh.hh',
|
||||||
'store-api.hh',
|
'store-api.hh',
|
||||||
'store-cast.hh',
|
'store-cast.hh',
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
#include "ssh-store-config.hh"
|
#include "ssh-store.hh"
|
||||||
#include "store-api.hh"
|
|
||||||
#include "local-fs-store.hh"
|
#include "local-fs-store.hh"
|
||||||
#include "remote-store.hh"
|
|
||||||
#include "remote-store-connection.hh"
|
#include "remote-store-connection.hh"
|
||||||
#include "source-accessor.hh"
|
#include "source-accessor.hh"
|
||||||
#include "archive.hh"
|
#include "archive.hh"
|
||||||
|
@ -12,23 +10,22 @@
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
struct SSHStoreConfig : virtual RemoteStoreConfig, virtual CommonSSHStoreConfig
|
SSHStoreConfig::SSHStoreConfig(
|
||||||
|
std::string_view scheme,
|
||||||
|
std::string_view authority,
|
||||||
|
const Params & params)
|
||||||
|
: StoreConfig(params)
|
||||||
|
, RemoteStoreConfig(params)
|
||||||
|
, CommonSSHStoreConfig(scheme, authority, params)
|
||||||
{
|
{
|
||||||
using RemoteStoreConfig::RemoteStoreConfig;
|
}
|
||||||
using CommonSSHStoreConfig::CommonSSHStoreConfig;
|
|
||||||
|
|
||||||
const Setting<Strings> remoteProgram{this, {"nix-daemon"}, "remote-program",
|
std::string SSHStoreConfig::doc()
|
||||||
"Path to the `nix-daemon` executable on the remote machine."};
|
{
|
||||||
|
return
|
||||||
const std::string name() override { return "Experimental SSH Store"; }
|
#include "ssh-store.md"
|
||||||
|
;
|
||||||
std::string doc() override
|
}
|
||||||
{
|
|
||||||
return
|
|
||||||
#include "ssh-store.md"
|
|
||||||
;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class SSHStore : public virtual SSHStoreConfig, public virtual RemoteStore
|
class SSHStore : public virtual SSHStoreConfig, public virtual RemoteStore
|
||||||
{
|
{
|
||||||
|
@ -41,7 +38,7 @@ public:
|
||||||
: StoreConfig(params)
|
: StoreConfig(params)
|
||||||
, RemoteStoreConfig(params)
|
, RemoteStoreConfig(params)
|
||||||
, CommonSSHStoreConfig(scheme, host, params)
|
, CommonSSHStoreConfig(scheme, host, params)
|
||||||
, SSHStoreConfig(params)
|
, SSHStoreConfig(scheme, host, params)
|
||||||
, Store(params)
|
, Store(params)
|
||||||
, RemoteStore(params)
|
, RemoteStore(params)
|
||||||
, master(createSSHMaster(
|
, master(createSSHMaster(
|
||||||
|
|
28
src/libstore/ssh-store.hh
Normal file
28
src/libstore/ssh-store.hh
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
#pragma once
|
||||||
|
///@file
|
||||||
|
|
||||||
|
#include "common-ssh-store-config.hh"
|
||||||
|
#include "store-api.hh"
|
||||||
|
#include "remote-store.hh"
|
||||||
|
|
||||||
|
namespace nix {
|
||||||
|
|
||||||
|
struct SSHStoreConfig : virtual RemoteStoreConfig, virtual CommonSSHStoreConfig
|
||||||
|
{
|
||||||
|
using CommonSSHStoreConfig::CommonSSHStoreConfig;
|
||||||
|
using RemoteStoreConfig::RemoteStoreConfig;
|
||||||
|
|
||||||
|
SSHStoreConfig(std::string_view scheme, std::string_view authority, const Params & params);
|
||||||
|
|
||||||
|
const Setting<Strings> remoteProgram{
|
||||||
|
this, {"nix-daemon"}, "remote-program", "Path to the `nix-daemon` executable on the remote machine."};
|
||||||
|
|
||||||
|
const std::string name() override
|
||||||
|
{
|
||||||
|
return "Experimental SSH Store";
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string doc() override;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
26
tests/unit/libstore/legacy-ssh-store.cc
Normal file
26
tests/unit/libstore/legacy-ssh-store.cc
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
#include "legacy-ssh-store.hh"
|
||||||
|
|
||||||
|
namespace nix {
|
||||||
|
|
||||||
|
TEST(LegacySSHStore, constructConfig)
|
||||||
|
{
|
||||||
|
LegacySSHStoreConfig config{
|
||||||
|
"ssh",
|
||||||
|
"localhost",
|
||||||
|
StoreConfig::Params{
|
||||||
|
{
|
||||||
|
"remote-program",
|
||||||
|
// TODO #11106, no more split on space
|
||||||
|
"foo bar",
|
||||||
|
},
|
||||||
|
}};
|
||||||
|
EXPECT_EQ(
|
||||||
|
config.remoteProgram.get(),
|
||||||
|
(Strings{
|
||||||
|
"foo",
|
||||||
|
"bar",
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
|
@ -58,6 +58,7 @@ sources = files(
|
||||||
'derivation.cc',
|
'derivation.cc',
|
||||||
'derived-path.cc',
|
'derived-path.cc',
|
||||||
'downstream-placeholder.cc',
|
'downstream-placeholder.cc',
|
||||||
|
'legacy-ssh-store.cc',
|
||||||
'machines.cc',
|
'machines.cc',
|
||||||
'nar-info-disk-cache.cc',
|
'nar-info-disk-cache.cc',
|
||||||
'nar-info.cc',
|
'nar-info.cc',
|
||||||
|
@ -67,6 +68,7 @@ sources = files(
|
||||||
'path.cc',
|
'path.cc',
|
||||||
'references.cc',
|
'references.cc',
|
||||||
'serve-protocol.cc',
|
'serve-protocol.cc',
|
||||||
|
'ssh-store.cc',
|
||||||
'store-reference.cc',
|
'store-reference.cc',
|
||||||
'worker-protocol.cc',
|
'worker-protocol.cc',
|
||||||
)
|
)
|
||||||
|
|
26
tests/unit/libstore/ssh-store.cc
Normal file
26
tests/unit/libstore/ssh-store.cc
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
#include "ssh-store.hh"
|
||||||
|
|
||||||
|
namespace nix {
|
||||||
|
|
||||||
|
TEST(SSHStore, constructConfig)
|
||||||
|
{
|
||||||
|
SSHStoreConfig config{
|
||||||
|
"ssh",
|
||||||
|
"localhost",
|
||||||
|
StoreConfig::Params{
|
||||||
|
{
|
||||||
|
"remote-program",
|
||||||
|
// TODO #11106, no more split on space
|
||||||
|
"foo bar",
|
||||||
|
},
|
||||||
|
}};
|
||||||
|
EXPECT_EQ(
|
||||||
|
config.remoteProgram.get(),
|
||||||
|
(Strings{
|
||||||
|
"foo",
|
||||||
|
"bar",
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue