cli/test: Clean up testing environment
This is a small cleanup to path generation during testing. 1. Separate `rad_home` and `unix_home` to avoid confusion. 2. Remove now unnecessary `trait HasHome`. 3. Move setting `$USER` to the environment. 4. Make paths shorter overall, to fix macOS tests.
This commit is contained in:
parent
3780f908a2
commit
7d6d2e51d8
|
|
@ -8,23 +8,23 @@ $ touch file.bin
|
|||
$ rad self --did
|
||||
did:key:z6Mkt67GdsW7715MEfRuP4pSZxJRJh6kj6Y48WRqVv4N1tRk
|
||||
$ pwd
|
||||
[..]/home/bob/.radicle
|
||||
[..]/bob/.radicle
|
||||
$ mkdir src
|
||||
$ cd src
|
||||
$ pwd
|
||||
[..]/home/bob/.radicle/src
|
||||
[..]/bob/.radicle/src
|
||||
```
|
||||
|
||||
``` ~alice
|
||||
$ rad self --did
|
||||
did:key:z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
|
||||
$ pwd
|
||||
[..]/home/alice/.radicle
|
||||
[..]/alice/.radicle
|
||||
```
|
||||
|
||||
``` ~bob
|
||||
$ pwd
|
||||
[..]/home/bob/.radicle/src
|
||||
[..]/bob/.radicle/src
|
||||
```
|
||||
|
||||
```
|
||||
|
|
|
|||
|
|
@ -176,7 +176,7 @@ Fetching rad:z42hL2jL4XNk6K8oHQaSWfMgCL7ji from the network, found 2 potential s
|
|||
✓ Creating checkout in ./heartwood..
|
||||
✓ Remote alice@z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi added
|
||||
✓ Remote-tracking branch alice@z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi/master created for z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
|
||||
✓ Repository successfully cloned under [..]/bob/heartwood/
|
||||
✓ Repository successfully cloned under [..]/bob/work/heartwood/
|
||||
╭────────────────────────────────────╮
|
||||
│ heartwood │
|
||||
│ Radicle Heartwood Protocol & Stack │
|
||||
|
|
|
|||
|
|
@ -9,11 +9,11 @@ Node not running
|
|||
SSH not running
|
||||
├╴Key (hash) SHA256:UIedaL6Cxm6OUErh9GQUzzglSk7VpQlVTI1TAFB/HWA
|
||||
└╴Key (full) ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHahWSBEpuT1ESZbynOmBNkLBSnR32Ar4woZqSV2YNH1
|
||||
Home [..]/home/alice/.radicle
|
||||
├╴Config [..]/home/alice/.radicle/config.json
|
||||
├╴Storage [..]/home/alice/.radicle/storage
|
||||
├╴Keys [..]/home/alice/.radicle/keys
|
||||
└╴Node [..]/home/alice/.radicle/node
|
||||
Home [..]/alice/.radicle
|
||||
├╴Config [..]/alice/.radicle/config.json
|
||||
├╴Storage [..]/alice/.radicle/storage
|
||||
├╴Keys [..]/alice/.radicle/keys
|
||||
└╴Node [..]/alice/.radicle/node
|
||||
```
|
||||
|
||||
If you need to display only your DID, Node ID, or SSH Public Key, you can use
|
||||
|
|
@ -41,5 +41,5 @@ ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHahWSBEpuT1ESZbynOmBNkLBSnR32Ar4woZqSV2YNH1
|
|||
|
||||
```
|
||||
$ rad self --home
|
||||
[..]/home/alice/.radicle
|
||||
[..]/alice/.radicle
|
||||
```
|
||||
|
|
|
|||
|
|
@ -82,37 +82,37 @@ impl Default for Environment {
|
|||
|
||||
impl Environment {
|
||||
/// Create a new test environment.
|
||||
fn named(name: &'static str) -> Self {
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
tempdir: tempfile::TempDir::with_prefix("radicle-".to_owned() + name).unwrap(),
|
||||
tempdir: tempfile::TempDir::new().unwrap(),
|
||||
users: 0,
|
||||
}
|
||||
}
|
||||
|
||||
/// Create a new test environment.
|
||||
pub fn new() -> Self {
|
||||
Self::named("")
|
||||
}
|
||||
|
||||
/// Return the temp directory path.
|
||||
/// Return the path of the temporary directory at which
|
||||
/// this testing environment is rooted.
|
||||
pub fn tempdir(&self) -> PathBuf {
|
||||
self.tempdir.path().into()
|
||||
}
|
||||
|
||||
/// Path to the working directory designated for given alias.
|
||||
pub fn work(&self, has_alias: &impl HasAlias) -> PathBuf {
|
||||
self.tempdir().join("work").join(has_alias.alias().as_ref())
|
||||
/// Return the home directory of the user with the given alias.
|
||||
/// This is in analogy to a Unix home directory.
|
||||
pub fn unix_home(&self, has_alias: &impl HasAlias) -> PathBuf {
|
||||
self.tempdir().join(has_alias.alias().to_string())
|
||||
}
|
||||
|
||||
/// We don't have `RAD_HOME` or `HOME` to rely on to compute a home as usual.
|
||||
pub fn home(&self, alias: &Alias) -> Home {
|
||||
Home::new(
|
||||
self.tempdir()
|
||||
.join("home")
|
||||
.join(alias.to_string())
|
||||
.join(".radicle"),
|
||||
)
|
||||
.unwrap()
|
||||
/// Return the Radicle path of the user with the given alias.
|
||||
/// This is in analogy to `$RAD_HOME` and always a subdirectory of
|
||||
/// the user's home directory (see [`Environment::unix_home`]).
|
||||
pub fn rad_home(&self, has_alias: &impl HasAlias) -> Home {
|
||||
Home::new(self.unix_home(has_alias).join(".radicle")).unwrap()
|
||||
}
|
||||
|
||||
/// Path to the working directory of the user with the given alias.
|
||||
/// Tests that need to act on multiple repositories should crate
|
||||
/// subdirecories within this directory.
|
||||
pub fn work(&self, has_alias: &impl HasAlias) -> PathBuf {
|
||||
self.unix_home(has_alias).join("work")
|
||||
}
|
||||
|
||||
/// Create a new default configuration.
|
||||
|
|
@ -135,7 +135,7 @@ impl Environment {
|
|||
/// is provided.
|
||||
pub fn profile_with(&mut self, config: profile::Config) -> Profile {
|
||||
let alias = config.alias().clone();
|
||||
let home = self.home(&alias);
|
||||
let home = self.rad_home(&alias);
|
||||
let keypair = KeyPair::from_seed(Seed::from([!(self.users as u8); 32]));
|
||||
let policies_db = home.node().join(POLICIES_DB_FILE);
|
||||
let cobs_db = home.cobs().join(COBS_DB_FILE);
|
||||
|
|
@ -224,7 +224,12 @@ impl Environment {
|
|||
self.node_with(config::seed(alias))
|
||||
}
|
||||
|
||||
/// Convenience method for placing repository fixture.
|
||||
/// Convenience method for placing repository fixture into the
|
||||
/// directory returned by [`Environment::work`] for the user.
|
||||
/// Use this only in tests that act on *a single repository* only.
|
||||
/// For tests that need to act on multiple repositories,
|
||||
/// create the repositories as subdirectories of the working
|
||||
/// directory returned by [`Environment::work`].
|
||||
pub fn repository(
|
||||
&self,
|
||||
has_alias: &impl HasAlias,
|
||||
|
|
@ -236,24 +241,17 @@ impl Environment {
|
|||
pub fn test(
|
||||
&self,
|
||||
test_file: &'static str,
|
||||
subject: &(impl HasAlias + HasHome),
|
||||
subject: &impl HasAlias,
|
||||
) -> Result<(), Box<dyn std::error::Error>> {
|
||||
formula(
|
||||
self.work(subject).as_ref(),
|
||||
PathBuf::from("examples").join(test_file.to_owned() + ".md"),
|
||||
)?
|
||||
.env(
|
||||
"RAD_HOME",
|
||||
subject.home().path().to_path_buf().to_string_lossy(),
|
||||
)
|
||||
.env("USER", subject.alias().as_ref())
|
||||
.env("RAD_HOME", self.rad_home(subject).path().to_string_lossy())
|
||||
.env(
|
||||
"JJ_CONFIG",
|
||||
subject
|
||||
.home()
|
||||
.path()
|
||||
.parent()
|
||||
.unwrap()
|
||||
.to_path_buf()
|
||||
self.unix_home(subject)
|
||||
.join(".jjconfig.toml")
|
||||
.to_string_lossy(),
|
||||
)
|
||||
|
|
@ -262,10 +260,11 @@ impl Environment {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
/// Convenience method for executing multiple test formulas with standard configuration.
|
||||
pub fn tests(
|
||||
&self,
|
||||
test_files: impl IntoIterator<Item = &'static str>,
|
||||
subject: &(impl HasAlias + HasHome),
|
||||
subject: &impl HasAlias,
|
||||
) -> Result<(), Box<dyn std::error::Error>> {
|
||||
for test_file in test_files {
|
||||
self.test(test_file, subject)?;
|
||||
|
|
@ -288,6 +287,12 @@ pub trait HasAlias {
|
|||
fn alias(&self) -> &Alias;
|
||||
}
|
||||
|
||||
impl HasAlias for Alias {
|
||||
fn alias(&self) -> &Alias {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl HasAlias for Node<MemorySigner> {
|
||||
fn alias(&self) -> &Alias {
|
||||
&self.config.alias
|
||||
|
|
@ -305,25 +310,3 @@ impl<G> HasAlias for NodeHandle<G> {
|
|||
&self.alias
|
||||
}
|
||||
}
|
||||
|
||||
pub trait HasHome {
|
||||
fn home(&self) -> &Home;
|
||||
}
|
||||
|
||||
impl HasHome for Profile {
|
||||
fn home(&self) -> &Home {
|
||||
&self.home
|
||||
}
|
||||
}
|
||||
|
||||
impl HasHome for Node<MemorySigner> {
|
||||
fn home(&self) -> &Home {
|
||||
&self.home
|
||||
}
|
||||
}
|
||||
|
||||
impl HasHome for NodeHandle<MemorySigner> {
|
||||
fn home(&self) -> &Home {
|
||||
&self.home
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@ pub(crate) fn formula(
|
|||
.env("EDITOR", "true")
|
||||
.env("TZ", "UTC")
|
||||
.env("LANG", "C")
|
||||
.env("USER", "alice")
|
||||
.env(env::RAD_PASSPHRASE, "radicle")
|
||||
.env(env::RAD_KEYGEN_SEED, RAD_SEED)
|
||||
.env(env::RAD_RNG_SEED, "0")
|
||||
|
|
|
|||
Loading…
Reference in New Issue