This repository has been archived by the owner on Nov 15, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2.7k
/
Copy pathtemp_base_path_works.rs
75 lines (60 loc) · 2.3 KB
/
temp_base_path_works.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// This file is part of Substrate.
// Copyright (C) Parity Technologies (UK) Ltd.
// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
#![cfg(unix)]
use assert_cmd::cargo::cargo_bin;
use futures_timer::Delay;
use nix::{
sys::signal::{kill, Signal::SIGINT},
unistd::Pid,
};
use regex::Regex;
use std::{
io::Read,
path::PathBuf,
process::{Command, Stdio},
time::Duration,
};
pub mod common;
#[tokio::test]
async fn temp_base_path_works() {
let mut cmd = Command::new(cargo_bin("substrate"));
let mut child = common::KillChildOnDrop(
cmd.args(&["--dev", "--tmp", "--no-hardware-benchmarks"])
.stdout(Stdio::piped())
.stderr(Stdio::piped())
.spawn()
.unwrap(),
);
let mut stderr = child.stderr.take().unwrap();
let (ws_url, mut data) = common::find_ws_url_from_output(&mut stderr);
// Let it produce some blocks.
common::wait_n_finalized_blocks(3, 30, &ws_url).await.unwrap();
assert!(child.try_wait().unwrap().is_none(), "the process should still be running");
// Stop the process
kill(Pid::from_raw(child.id().try_into().unwrap()), SIGINT).unwrap();
assert!(common::wait_for(&mut child, 40).map(|x| x.success()).unwrap_or_default());
// Ensure the database has been deleted
stderr.read_to_string(&mut data).unwrap();
let re = Regex::new(r"Database: .+ at (\S+)").unwrap();
let db_path = PathBuf::from(re.captures(data.as_str()).unwrap().get(1).unwrap().as_str());
// Give the OS 15 seconds to actually delete the database path.
// Under high load this may can take a moment.
for _ in 0..5 {
Delay::new(Duration::from_secs(3)).await;
if !db_path.exists() {
return
}
}
panic!("Database path `{}` wasn't deleted?", db_path.display());
}