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

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

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

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

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

ResourceLocator for DefaultLocator

{ let acme_user = P::acme_user(); let home = P::user_home(acme_user); ( - PathArtifact::from(home.join("lets_encrypt_x3_cross_signed.pem")), + PathArtifact(home.join("lets_encrypt_x3_cross_signed.pem")), Dir(home), ) } @@ -251,7 +245,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::from(home)), ()) + ((UserNameArtifact(user_name), PathArtifact(home)), ()) } } @@ -274,7 +268,7 @@ impl

ResourceLocator for DefaultLocator

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

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