Added initialization failure.
This commit is contained in:
		@@ -184,15 +184,21 @@ impl Entry {
 | 
			
		||||
struct Cache;
 | 
			
		||||
 | 
			
		||||
impl Cache {
 | 
			
		||||
    async fn new<P>(dir: P) -> Self
 | 
			
		||||
    async fn new<P>(dir: P) -> Result<Self, DBError>
 | 
			
		||||
    where
 | 
			
		||||
        P: Into<PathBuf>,
 | 
			
		||||
    {
 | 
			
		||||
        let pathbuf = dir.into();
 | 
			
		||||
        let entry = pathbuf.as_path().join(ENTRY);
 | 
			
		||||
        let store = DataType::new("store").unwrap();
 | 
			
		||||
        Entry::new(entry, store).await.unwrap();
 | 
			
		||||
        Self {}
 | 
			
		||||
        match Entry::new(entry, store).await {
 | 
			
		||||
            Ok(_) => Ok(Self {}),
 | 
			
		||||
            Err(err) => {
 | 
			
		||||
                let mut error = DBError::new("initialization failure");
 | 
			
		||||
                error.add_source(err);
 | 
			
		||||
                Err(error)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -580,12 +586,13 @@ mod entry {
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
mod cache {
 | 
			
		||||
    use super::*;
 | 
			
		||||
    use std::error::Error;
 | 
			
		||||
    use tempfile::tempdir;
 | 
			
		||||
 | 
			
		||||
    #[async_std::test]
 | 
			
		||||
    async fn create() {
 | 
			
		||||
        let dir = tempdir().unwrap();
 | 
			
		||||
        Cache::new(dir.path().to_str().unwrap()).await;
 | 
			
		||||
        Cache::new(dir.path().to_str().unwrap()).await.unwrap();
 | 
			
		||||
        let epoint = dir.path().join(ENTRY);
 | 
			
		||||
        assert!(
 | 
			
		||||
            epoint.is_file(),
 | 
			
		||||
@@ -598,4 +605,25 @@ mod cache {
 | 
			
		||||
            Vec::<String>::new()
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[async_std::test]
 | 
			
		||||
    async fn entry_failure() {
 | 
			
		||||
        let dir = tempdir().unwrap();
 | 
			
		||||
        let path = dir.path().join("bad").join("path");
 | 
			
		||||
        match Cache::new(path).await {
 | 
			
		||||
            Ok(_) => assert!(false, "Should have produced an error."),
 | 
			
		||||
            Err(err) => {
 | 
			
		||||
                assert_eq!(err.to_string(), "initialization failure");
 | 
			
		||||
                assert!(err.source().is_some(), "Error should have a source.");
 | 
			
		||||
                assert!(
 | 
			
		||||
                    err.source()
 | 
			
		||||
                        .unwrap()
 | 
			
		||||
                        .to_string()
 | 
			
		||||
                        .contains("failed to write"),
 | 
			
		||||
                    "Source Error Message: {}",
 | 
			
		||||
                    err.source().unwrap().to_string()
 | 
			
		||||
                );
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user