mirror of
				https://github.com/scottlamb/moonfire-nvr.git
				synced 2025-10-30 00:05:03 -04: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.
 | /// 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> { | 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| { |     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!( |             format!( | ||||||
|                 "db dir {} not found; try running moonfire-nvr init", |                 "db dir {} not found; try running moonfire-nvr init", | ||||||
|                 db_dir.display() |                 db_dir.display() | ||||||
| @ -79,3 +81,43 @@ fn open_conn(db_dir: &Path, mode: OpenMode) -> Result<(dir::Fd, rusqlite::Connec | |||||||
|     )?; |     )?; | ||||||
|     Ok((dir, conn)) |     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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user