mirror of
https://github.com/scottlamb/moonfire-nvr.git
synced 2024-12-24 06:05:55 -05:00
fix nvr init error message on mkdir failure
Before it would produce this incorrect message that told you to run the command you just ran: ``` $ nvr init --db-dir=/nonexistent/db E20211021 09:08:23.798 main moonfire_nvr] Exiting due to error: db dir /nonexistent/db not found; try running moonfire-nvr init caused by: ENOENT: No such file or directory ``` Now the same command produces the following: ``` $ nvr init --db-dir=/nonexistent/db E20211021 09:09:11.056 main moonfire_nvr] Exiting due to error: unable to create db dir /nonexistent/db caused by: ENOENT: No such file or directory ``` Add tests just for good measure.
This commit is contained in:
parent
9c708ec557
commit
97bfe0afc3
@ -28,7 +28,9 @@ enum OpenMode {
|
||||
/// The returned `dir::Fd` holds the lock and should be kept open as long as the `Connection` is.
|
||||
fn open_dir(db_dir: &Path, mode: OpenMode) -> Result<dir::Fd, Error> {
|
||||
let dir = dir::Fd::open(db_dir, mode == OpenMode::Create).map_err(|e| {
|
||||
e.context(if e == nix::Error::ENOENT {
|
||||
e.context(if mode == OpenMode::Create {
|
||||
format!("unable to create db dir {}", db_dir.display())
|
||||
} else if e == nix::Error::ENOENT {
|
||||
format!(
|
||||
"db dir {} not found; try running moonfire-nvr init",
|
||||
db_dir.display()
|
||||
@ -79,3 +81,43 @@ fn open_conn(db_dir: &Path, mode: OpenMode) -> Result<(dir::Fd, rusqlite::Connec
|
||||
)?;
|
||||
Ok((dir, conn))
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn open_dir_error_msg() {
|
||||
let tmpdir = tempfile::Builder::new()
|
||||
.prefix("moonfire-nvr-test")
|
||||
.tempdir()
|
||||
.unwrap();
|
||||
let mut nonexistent_dir = tmpdir.path().to_path_buf();
|
||||
nonexistent_dir.push("nonexistent");
|
||||
let nonexistent_open = open_dir(&nonexistent_dir, OpenMode::ReadOnly).unwrap_err();
|
||||
assert!(
|
||||
nonexistent_open
|
||||
.to_string()
|
||||
.contains("try running moonfire-nvr init"),
|
||||
"unexpected error {}",
|
||||
&nonexistent_open
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn create_dir_error_msg() {
|
||||
let tmpdir = tempfile::Builder::new()
|
||||
.prefix("moonfire-nvr-test")
|
||||
.tempdir()
|
||||
.unwrap();
|
||||
let mut nonexistent_dir = tmpdir.path().to_path_buf();
|
||||
nonexistent_dir.push("nonexistent");
|
||||
nonexistent_dir.push("db");
|
||||
let nonexistent_create = open_dir(&nonexistent_dir, OpenMode::Create).unwrap_err();
|
||||
assert!(
|
||||
nonexistent_create.to_string().contains("unable to create"),
|
||||
"unexpected error {}",
|
||||
&nonexistent_create
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user