diff --git a/src/artifacts/mod.rs b/src/artifacts/mod.rs index c02538b..20ed4fa 100644 --- a/src/artifacts/mod.rs +++ b/src/artifacts/mod.rs @@ -1,7 +1,36 @@ use std::path::{Path as ActualPath, PathBuf}; #[derive(Clone, Debug)] -pub struct Path(pub PathBuf); +pub struct Path(PathBuf); + +// FIXME: This is a specialization since with Path: Into +// it would overwrite impl From for T +//impl> From for Path { +// fn from(v: T) -> Self { +// Path(v.into()) +// } +//} + +macro_rules! path_from { + ( $t:ty ) => { + impl From<$t> for Path { + fn from(v: $t) -> Self { + Self(v.into()) + } + } + }; +} + +path_from!(String); +path_from!(&str); +path_from!(PathBuf); + +impl From for PathBuf { + fn from(v: Path) -> Self { + v.0 + } +} + impl AsRef for Path { fn as_ref(&self) -> &ActualPath { &self.0 diff --git a/src/builder.rs b/src/builder.rs index c9bd89e..6bea5c4 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -65,7 +65,7 @@ impl SymbolBuilder> for DefaultBuilder { target: & as Resource>::Artifact, (): ::Artifact, ) -> Self::Symbol { - KeySymbol::new(StdCommandRunner, target.0.clone()) + KeySymbol::new(StdCommandRunner, target.clone().into()) } } @@ -84,8 +84,8 @@ impl SymbolBuilder> for DefaultBuilder { CsrSymbol::new( StdCommandRunner, resource.0.clone(), - key.0, - target.0.clone(), + key.into(), + target.clone().into(), ) } } @@ -124,11 +124,11 @@ impl SymbolBuilder> for DefaultBuilder { CertSymbol::new( resource.0.clone(), SetuidCommandRunner::new(user_name.0, &StdCommandRunner), - root_cert.0, - account_key.0, - challenges_dir.0, - csr.0, - target.0.clone(), + root_cert.into(), + account_key.into(), + challenges_dir.into(), + csr.into(), + target.clone().into(), ) } } @@ -145,7 +145,7 @@ impl SymbolBuilder> for DefaultBuilder { target: & as Resource>::Artifact, (cert, root_cert): ::Artifact, ) -> Self::Symbol { - ConcatSymbol::new([cert.0, root_cert.0], target.0.clone()) + ConcatSymbol::new([cert.into(), root_cert.into()], target.clone().into()) } } @@ -161,7 +161,7 @@ impl SymbolBuilder> for DefaultBuilder { target: & as Resource>::Artifact, (cert_chain, key): ::Artifact, ) -> Self::Symbol { - ConcatSymbol::new([key.0, cert_chain.0], target.0.clone()) + ConcatSymbol::new([key.into(), cert_chain.into()], target.clone().into()) } } @@ -210,7 +210,7 @@ impl SymbolBuilder for DefaultBuilder { ) -> Self::Symbol { ( FileSymbol::new( - target.0.clone(), + target.clone().into(), nginx::default_server(challenges_snippet_path), ), ReloadServiceSymbol::new(StdCommandRunner, "nginx"), @@ -239,14 +239,8 @@ impl + Clone + Display> SymbolBuilder> for DefaultB ) -> Self::Symbol { ( FileSymbol::new( - target.0.clone(), - nginx::server_config( - &resource.0, - cert.0, - key.0, - &resource.1, - challenges_snippet_path, - ), + target.clone().into(), + nginx::server_config(&resource.0, cert, key, &resource.1, challenges_snippet_path), ), ReloadServiceSymbol::new(StdCommandRunner, "nginx"), ) @@ -280,11 +274,11 @@ impl> SymbolBuilder> for Defau ) -> Self::Symbol { ( FileSymbol::new( - target.0.clone(), + target.clone().into(), nginx::server_config( &resource.0, - cert.0, - key.0, + cert, + key, nginx::php_snippet(resource.2, &pool.0, &resource.1) + &resource.3, challenges_snippet_path, ), @@ -329,11 +323,11 @@ impl> SymbolBuilder Self::Symbol { ( FileSymbol::new( - target.0.clone(), + target.clone().into(), nginx::server_config( &resource.0, - cert.0, - key.0, + cert, + key, nginx::proxy_snippet(&socket.0, &resource.3), challenges_snippet_path, ), @@ -364,11 +358,11 @@ impl + Clone + Display> SymbolBuilder> for DefaultBu ) -> Self::Symbol { ( FileSymbol::new( - target.0.clone(), + target.clone().into(), nginx::server_config( &resource.0, - cert.0, - key.0, + cert, + key, nginx::redir_snippet(resource.1.as_ref()), challenges_snippet_path, ), @@ -401,11 +395,11 @@ impl + Clone + Display, P: AsRef> SymbolBuilder Self::Symbol { ( FileSymbol::new( - target.0.clone(), + target.clone().into(), nginx::server_config( &resource.0, - cert.0, - key.0, + cert, + key, nginx::static_snippet(resource.1.as_ref()), challenges_snippet_path, ), @@ -430,8 +424,8 @@ impl SymbolBuilder> for DefaultBuilder { ) -> Self::Symbol { ( FileSymbol::new( - conf_path.0.clone(), - php_fpm_pool_config(&user_name.0, &socket_path.0, resource.1), + conf_path.clone().into(), + php_fpm_pool_config(&user_name.0, &socket_path, resource.1), ), ReloadServiceSymbol::new(StdCommandRunner, service_name.0.clone()), ) @@ -454,7 +448,7 @@ impl> SymbolBuilder> for DefaultBui ) -> Self::Symbol { ( FileSymbol::new( - conf_path.0.clone(), + conf_path.clone().into(), if resource.4 { systemd_nodejs_service(&resource.2, socket_path, &resource.3) } else { @@ -468,7 +462,7 @@ impl> SymbolBuilder> for DefaultBui ), SystemdUserSessionSymbol::new(user_name.0.clone(), &StdCommandRunner), UserServiceSymbol::new( - socket_path.0.clone(), + socket_path.clone().into(), user_name.0.clone(), resource.1, &StdCommandRunner, @@ -517,7 +511,7 @@ impl> SymbolBuilder> for DefaultBuilde ) -> Self::Symbol { SavedDirectorySymbol::new( resource.1.clone(), - SimpleStorage::new(target.0.clone()), + SimpleStorage::new(target.clone().into()), StorageDirection::Store, StdCommandRunner, ) @@ -536,7 +530,7 @@ impl> SymbolBuilder> for DefaultBuilde ) -> Self::Symbol { SavedDirectorySymbol::new( resource.1.clone(), - SimpleStorage::new(target.0.clone()), + SimpleStorage::new(target.clone().into()), StorageDirection::Load, StdCommandRunner, ) @@ -615,8 +609,8 @@ impl SymbolBuilder for DefaultBuilder { user_name: ::Artifact, ) -> Self::Symbol { ( - DirSymbol::new(target.0.clone()), - OwnerSymbol::new(target.0.clone(), user_name.0, StdCommandRunner), + DirSymbol::new(target.clone().into()), + OwnerSymbol::new(target.clone().into(), user_name.0, StdCommandRunner), ) } } @@ -634,7 +628,7 @@ impl SymbolBuilder for DefaultBuilder { challenges_dir: ::Artifact, ) -> Self::Symbol { FileSymbol::new( - target.0.clone(), + target.clone().into(), nginx::acme_challenges_snippet(challenges_dir), ) } @@ -656,8 +650,8 @@ impl SymbolBuilder for DefaultBuilder { user_name: ::Artifact, ) -> Self::Symbol { ( - KeySymbol::new(StdCommandRunner, target.0.clone()), - OwnerSymbol::new(target.0.clone(), user_name.0, StdCommandRunner), + KeySymbol::new(StdCommandRunner, target.clone().into()), + OwnerSymbol::new(target.clone().into(), user_name.0, StdCommandRunner), ) } } @@ -672,7 +666,7 @@ impl SymbolBuilder for DefaultBuilder { target: &::Artifact, (): ::Artifact, ) -> Self::Symbol { - FileSymbol::new(target.0.clone(), LETS_ENCRYPT_X3_CROSS_SIGNED) + FileSymbol::new(target.clone().into(), LETS_ENCRYPT_X3_CROSS_SIGNED) } } @@ -705,7 +699,7 @@ impl SymbolBuilder> for DefaultBuilder { (db_name, _, data_path): & as Resource>::Artifact, _: ::Artifact, ) -> Self::Symbol { - let db_dump = SimpleStorage::new(data_path.0.clone()); + let db_dump = SimpleStorage::new(data_path.clone().into()); ( MariaDbDatabaseSymbol::new(db_name.0.clone(), db_dump.clone(), &StdCommandRunner), MariaDbDumpSymbol::new(db_name.0.clone(), db_dump, &StdCommandRunner), diff --git a/src/locator.rs b/src/locator.rs index 4340cdb..eaaddeb 100644 --- a/src/locator.rs +++ b/src/locator.rs @@ -54,7 +54,7 @@ impl> ResourceLocator> for DefaultLocator

{ type Prerequisites = Dir; fn locate(resource: &Key) -> ( as Resource>::Artifact, Self::Prerequisites) { ( - PathArtifact(format!("/etc/ssl/private/{}.key", resource.0.as_ref()).into()), + PathArtifact::from(format!("/etc/ssl/private/{}.key", resource.0.as_ref())), Dir("/etc/ssl/private".into()), ) } @@ -64,7 +64,7 @@ impl> ResourceLocator> for DefaultLocator

{ type Prerequisites = Dir; fn locate(resource: &Csr) -> ( as Resource>::Artifact, Self::Prerequisites) { ( - PathArtifact(format!("/etc/ssl/local_certs/{}.csr", resource.0.as_ref()).into()), + PathArtifact::from(format!("/etc/ssl/local_certs/{}.csr", resource.0.as_ref())), Dir("/etc/ssl/local_certs".into()), ) } @@ -74,7 +74,7 @@ impl> ResourceLocator> for DefaultLocator

{ type Prerequisites = Dir; fn locate(resource: &Cert) -> ( as Resource>::Artifact, Self::Prerequisites) { ( - PathArtifact(format!("/etc/ssl/local_certs/{}.crt", resource.0.as_ref()).into()), + PathArtifact::from(format!("/etc/ssl/local_certs/{}.crt", resource.0.as_ref())), Dir("/etc/ssl/local_certs".into()), ) } @@ -86,7 +86,10 @@ impl> ResourceLocator> for DefaultLocator

{ resource: &CertChain, ) -> ( as Resource>::Artifact, Self::Prerequisites) { ( - PathArtifact(format!("/etc/ssl/local_certs/{}.chained.crt", resource.0.as_ref()).into()), + PathArtifact::from(format!( + "/etc/ssl/local_certs/{}.chained.crt", + resource.0.as_ref() + )), Dir("/etc/ssl/local_certs".into()), ) } @@ -101,7 +104,10 @@ impl> ResourceLocator> for DefaultLocator

> ResourceLocator> as Resource>::Artifact, Self::Prerequisites, ) { - (PathArtifact(POLICY::path_for_data(resource.0)), ()) + (PathArtifact::from(POLICY::path_for_data(resource.0)), ()) } } @@ -167,7 +173,7 @@ impl> ResourceLocator> Self::Prerequisites, ) { ( - PathArtifact(POLICY::path_for_data(resource.0)), + PathArtifact::from(POLICY::path_for_data(resource.0)), Dir(resource.1.as_ref().parent().unwrap().into()), ) } @@ -180,7 +186,7 @@ impl ResourceLocator for DefaultLocator

{ ) -> (::Artifact, Self::Prerequisites) { let acme_user = P::acme_user(); let home = P::user_home(acme_user); - (PathArtifact(home.join("account.key")), Dir(home)) + (PathArtifact::from(home.join("account.key")), Dir(home)) } } @@ -202,7 +208,7 @@ impl ResourceLocator for DefaultLocator

{ ) { let acme_user = P::acme_user(); let home = P::user_home(acme_user); - (PathArtifact(home.join("challenges")), Dir(home)) + (PathArtifact::from(home.join("challenges")), Dir(home)) } } @@ -215,7 +221,7 @@ impl ResourceLocator for DefaultLocator

ResourceLocator for DefaultLocator

{ let acme_user = P::acme_user(); let home = P::user_home(acme_user); ( - PathArtifact(home.join("lets_encrypt_x3_cross_signed.pem")), + PathArtifact::from(home.join("lets_encrypt_x3_cross_signed.pem")), Dir(home), ) } @@ -245,7 +251,7 @@ impl> ResourceLocator> for DefaultLoca ) { let user_name = P::user_name_for_domain(resource.0.as_ref()); let home = P::user_home(&user_name); - ((UserNameArtifact(user_name), PathArtifact(home)), ()) + ((UserNameArtifact(user_name), PathArtifact::from(home)), ()) } } @@ -268,7 +274,7 @@ impl

ResourceLocator for DefaultLocator

{ fn locate( _resource: &DefaultServer, ) -> (::Artifact, Self::Prerequisites) { - (PathArtifact("/etc/nginx/sites-enabled/default".into()), ()) + (PathArtifact::from("/etc/nginx/sites-enabled/default"), ()) } } @@ -278,7 +284,7 @@ impl, POLICY> ResourceLocator> for DefaultLocator< resource: &ServeCustom, ) -> ( as Resource>::Artifact, Self::Prerequisites) { ( - PathArtifact(("/etc/nginx/sites-enabled/".as_ref() as &Path).join(&resource.0)), + PathArtifact::from(("/etc/nginx/sites-enabled/".as_ref() as &Path).join(&resource.0)), (), ) } @@ -290,7 +296,7 @@ impl, P, POLICY> ResourceLocator> for DefaultLocat resource: &ServePhp, ) -> ( as Resource>::Artifact, Self::Prerequisites) { ( - PathArtifact(("/etc/nginx/sites-enabled/".as_ref() as &Path).join(&resource.0)), + PathArtifact::from(("/etc/nginx/sites-enabled/".as_ref() as &Path).join(&resource.0)), (), ) } @@ -305,7 +311,7 @@ impl, P, POLICY> ResourceLocator> for DefaultL Self::Prerequisites, ) { ( - PathArtifact(("/etc/nginx/sites-enabled/".as_ref() as &Path).join(&resource.0)), + PathArtifact::from(("/etc/nginx/sites-enabled/".as_ref() as &Path).join(&resource.0)), (), ) } @@ -317,7 +323,7 @@ impl, POLICY> ResourceLocator> for DefaultLocator

, ) -> ( as Resource>::Artifact, Self::Prerequisites) { ( - PathArtifact(("/etc/nginx/sites-enabled/".as_ref() as &Path).join(&resource.0)), + PathArtifact::from(("/etc/nginx/sites-enabled/".as_ref() as &Path).join(&resource.0)), (), ) } @@ -332,7 +338,7 @@ impl, P, POLICY> ResourceLocator> for DefaultLo Self::Prerequisites, ) { ( - PathArtifact(("/etc/nginx/sites-enabled/".as_ref() as &Path).join(&resource.0)), + PathArtifact::from(("/etc/nginx/sites-enabled/".as_ref() as &Path).join(&resource.0)), (), ) } @@ -347,8 +353,11 @@ impl, P: Policy> ResourceLocator> for Defaul let php_version = P::php_version(); ( ( - PathArtifact(format!("/run/php/{}.sock", user.0).into()), - PathArtifact(format!("/etc/php/{}/fpm/pool.d/{}.conf", php_version, user.0).into()), + PathArtifact::from(format!("/run/php/{}.sock", user.0)), + PathArtifact::from(format!( + "/etc/php/{}/fpm/pool.d/{}.conf", + php_version, user.0 + )), user, ServiceNameArtifact(format!("php{}-fpm", php_version)), ), @@ -368,12 +377,12 @@ impl, P, POLICY: Policy> ResourceLocator, P: Policy> ResourceLocator> for DefaultLo ( DatabaseNameArtifact(user_name.0.clone()), user_name.clone(), - PathArtifact(P::path_for_data(format!("{}.sql", user_name.0))), + PathArtifact::from(P::path_for_data(format!("{}.sql", user_name.0))), ), (), ) diff --git a/src/schema.rs b/src/schema.rs index 8b1cc94..dab238d 100644 --- a/src/schema.rs +++ b/src/schema.rs @@ -22,12 +22,6 @@ pub enum SymbolRunError { } impl Error for SymbolRunError { - fn description(&self) -> &str { - match self { - Self::Symbol(_) => "Symbol execution error", - Self::ExecuteDidNotReach(_) => "Target not reached after executing symbol", - } - } fn cause(&self) -> Option<&dyn Error> { match self { Self::Symbol(ref e) => Some(&**e), @@ -40,7 +34,7 @@ impl fmt::Display for SymbolRunError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { Self::Symbol(ref e) => write!(f, "{}", e), - Self::ExecuteDidNotReach(_) => write!(f, "{}", self.description()), + Self::ExecuteDidNotReach(_) => write!(f, "Target not reached after executing symbol"), } } } @@ -155,7 +149,6 @@ where } } -/* #[cfg(test)] mod test { use std::cell::RefCell; @@ -172,11 +165,7 @@ mod test { Error(()), } - impl Error for DummySymbolError { - fn description(&self) -> &str { - return "Description"; - } - } + impl Error for DummySymbolError {} impl fmt::Display for DummySymbolError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { @@ -185,28 +174,39 @@ mod test { } #[derive(Debug)] - struct DummySymbol<'a> { - _execute: &'a dyn Fn() -> Result<(), Box>, - _target_reached: &'a dyn Fn() -> Result>, + struct DummySymbol { + _target_reached: RefCell, + _execute: RefCell, } - impl<'b> Symbol for DummySymbol<'b> { + impl< + E: Iterator>>, + T: Iterator>>, + > Symbol for DummySymbol + { fn target_reached(&self) -> Result> { - (self._target_reached)() + self._target_reached.borrow_mut().next().unwrap() } fn execute(&self) -> Result<(), Box> { - (self._execute)() + self._execute.borrow_mut().next().unwrap() } } - impl<'a> DummySymbol<'a> { - fn new( - target_reached: &'a dyn Fn() -> Result>, - execute: &'a dyn Fn() -> Result<(), Box>, - ) -> DummySymbol<'a> { - DummySymbol { - _target_reached: target_reached, - _execute: execute, + impl< + E: Iterator>>, + T: Iterator>>, + > DummySymbol + { + fn new< + IE: IntoIterator>>, + IT: IntoIterator>>, + >( + target_reached: IT, + execute: IE, + ) -> Self { + Self { + _target_reached: RefCell::new(target_reached.into_iter()), + _execute: RefCell::new(execute.into_iter()), } } } @@ -223,44 +223,37 @@ mod test { impl Logger for DummyLogger { fn write(&mut self, line: &str) { - self.log.push(From::from(line)); + self.log.push(line.into()); } fn debug(&mut self, line: &str) { - self.log.push(From::from(line)); + self.log.push(line.into()); } } #[test] fn nothing_needed_to_be_done() { let result = InitializingSymbolRunner::new(DummyLogger::new()) - .run_symbol(&DummySymbol::new(&|| Ok(true), &|| Ok(()))); + .run_symbol(&DummySymbol::new(vec![Ok(true)], vec![Ok(())]), false); assert!(result.is_ok()); } #[test] fn everything_is_ok() { - let first = RefCell::new(true); - let result = InitializingSymbolRunner::new(DummyLogger::new()).run_symbol(&DummySymbol::new( - &|| { - let mut _first = first.borrow_mut(); - Ok(if *_first { - *_first = false; - true - } else { - false - }) - }, - &|| Ok(()), - )); + let result = InitializingSymbolRunner::new(DummyLogger::new()).run_symbol( + &DummySymbol::new(vec![Ok(true), Ok(false)], vec![Ok(())]), + false, + ); assert!(result.is_ok()); } #[test] fn executing_did_not_change_state() { - let result = InitializingSymbolRunner::new(DummyLogger::new()) - .run_symbol(&DummySymbol::new(&|| Ok(false), &|| Ok(()))); + let result = InitializingSymbolRunner::new(DummyLogger::new()).run_symbol( + &DummySymbol::new(vec![Ok(false), Ok(false)], vec![Ok(())]), + false, + ); assert_eq!( - result.unwrap_err().description(), + result.unwrap_err().to_string(), "Target not reached after executing symbol" ); } @@ -268,11 +261,14 @@ mod test { #[test] fn executing_did_not_work() { let err = InitializingSymbolRunner::new(DummyLogger::new()) - .run_symbol(&DummySymbol::new(&|| Ok(false), &|| { - Err(Box::new(DummySymbolError::Error(()))) - })) + .run_symbol( + &DummySymbol::new( + vec![Ok(false)], + vec![Err(Box::new(DummySymbolError::Error(())) as Box)], + ), + false, + ) .unwrap_err(); - assert_eq!(err.description(), "Description"); + assert_eq!(err.to_string(), "Dummy symbol error"); } } -*/ diff --git a/src/setup.rs b/src/setup.rs index 44e5d7f..5e03f80 100644 --- a/src/setup.rs +++ b/src/setup.rs @@ -348,24 +348,49 @@ mod test { #[test] fn correctly_handles_symbol_tuples() { let (count, setup) = get_setup(); - setup.run_symbol((TestSymbol { reached: false }, TestSymbol { reached: false }), false).unwrap(); + setup + .run_symbol( + (TestSymbol { reached: false }, TestSymbol { reached: false }), + false, + ) + .unwrap(); assert_eq!(*count.borrow(), 2); let (count, setup) = get_setup(); - setup.run_symbol((TestSymbol { reached: true }, TestSymbol { reached: false }), false).unwrap(); + setup + .run_symbol( + (TestSymbol { reached: true }, TestSymbol { reached: false }), + false, + ) + .unwrap(); assert_eq!(*count.borrow(), 1); // An unreached symbol forces all further symbols let (count, setup) = get_setup(); - setup.run_symbol((TestSymbol { reached: false }, TestSymbol { reached: true }), false).unwrap(); + setup + .run_symbol( + (TestSymbol { reached: false }, TestSymbol { reached: true }), + false, + ) + .unwrap(); assert_eq!(*count.borrow(), 2); let (count, setup) = get_setup(); - setup.run_symbol((TestSymbol { reached: true }, TestSymbol { reached: true }), false).unwrap(); + setup + .run_symbol( + (TestSymbol { reached: true }, TestSymbol { reached: true }), + false, + ) + .unwrap(); assert_eq!(*count.borrow(), 0); let (count, setup) = get_setup(); - setup.run_symbol((TestSymbol { reached: true }, TestSymbol { reached: true }), true).unwrap(); + setup + .run_symbol( + (TestSymbol { reached: true }, TestSymbol { reached: true }), + true, + ) + .unwrap(); assert_eq!(*count.borrow(), 2); } } diff --git a/src/symbols/tls/key.rs b/src/symbols/tls/key.rs index 4caff26..f1cb847 100644 --- a/src/symbols/tls/key.rs +++ b/src/symbols/tls/key.rs @@ -40,7 +40,7 @@ impl> Symbol for Key { ], )?; // FIXME check bytes - Ok(stdout.ends_with("RSA key ok\n".as_bytes())) + Ok(stdout.ends_with(b"RSA key ok\n")) } fn execute(&self) -> Result<(), Box> { diff --git a/tests/setup.rs b/tests/setup.rs index b8aadf7..52e7aaf 100644 --- a/tests/setup.rs +++ b/tests/setup.rs @@ -30,11 +30,17 @@ fn runs_only_once() { }; let mut setup = Setup::new(runner); assert_eq!( - (setup.add(Csr("somehost")).unwrap().0).0.to_str().unwrap(), + (setup.add(Csr("somehost")).unwrap().0) + .as_ref() + .to_str() + .unwrap(), "/etc/ssl/local_certs/somehost.csr", ); assert_eq!( - (setup.add(Csr("somehost")).unwrap().0).0.to_str().unwrap(), + (setup.add(Csr("somehost")).unwrap().0) + .as_ref() + .to_str() + .unwrap(), "/etc/ssl/local_certs/somehost.csr", ); assert_eq!(*count.borrow(), 2 + 5); // Key and CSR + 5 dirs @@ -48,7 +54,10 @@ fn can_create_an_acme_cert() { }; let mut setup = Setup::new(runner); assert_eq!( - (setup.add(Cert("somehost")).unwrap().0).0.to_str().unwrap(), + (setup.add(Cert("somehost")).unwrap().0) + .as_ref() + .to_str() + .unwrap(), "/etc/ssl/local_certs/somehost.crt", ); assert_eq!(*count.borrow(), 15); diff --git a/tests/storage.rs b/tests/storage.rs index cb4bc61..4a29f9e 100644 --- a/tests/storage.rs +++ b/tests/storage.rs @@ -103,12 +103,12 @@ fn empty_storage() { ); assert!(storage.read_filename().is_err()); assert_eq!( - storage.read_filename().unwrap_err().description(), + storage.read_filename().unwrap_err().to_string(), "entity not found" ); assert!(storage.recent_date().is_err()); assert_eq!( - storage.recent_date().unwrap_err().description(), + storage.recent_date().unwrap_err().to_string(), "entity not found" ); } @@ -125,14 +125,11 @@ fn empty_storage_for_filename() { ); assert!(storage.read_filename().is_err()); assert_eq!( - storage.read_filename().unwrap_err().description(), + storage.read_filename().unwrap_err().to_string(), "Not found" ); assert!(storage.recent_date().is_err()); - assert_eq!( - storage.recent_date().unwrap_err().description(), - "Not found" - ); + assert_eq!(storage.recent_date().unwrap_err().to_string(), "Not found"); } #[test] @@ -147,12 +144,9 @@ fn bad_file() { ); assert!(storage.read_filename().is_err()); assert_eq!( - storage.read_filename().unwrap_err().description(), + storage.read_filename().unwrap_err().to_string(), "Not found" ); assert!(storage.recent_date().is_err()); - assert_eq!( - storage.recent_date().unwrap_err().description(), - "Not found" - ); + assert_eq!(storage.recent_date().unwrap_err().to_string(), "Not found"); }