relay-knowledge 1.1.17

Graph-database-based knowledge graph project.
Documentation
use crate::storage::{KnowledgeStoreFactoryFuture, StorageTopologySnapshot};

use super::*;

struct FailingFactory;

impl KnowledgeStoreFactory for FailingFactory {
    fn open(&self) -> KnowledgeStoreFactoryFuture<'_, Arc<dyn KnowledgeStore>> {
        Box::pin(async { Err(StorageError::InvalidInput("factory-open-failed".to_owned())) })
    }

    fn topology_snapshot(&self) -> KnowledgeStoreFactoryFuture<'_, StorageTopologySnapshot> {
        Box::pin(async { Ok(StorageTopologySnapshot::default()) })
    }
}

#[tokio::test]
async fn lazy_provider_preserves_factory_errors_without_partial_initialization() {
    let provider = StorageProvider::configured(Arc::new(FailingFactory));

    let error = match provider.get().await {
        Ok(_) => panic!("factory should fail"),
        Err(error) => error,
    };

    assert_eq!(
        error.to_string(),
        "invalid storage input: factory-open-failed"
    );
    assert!(provider.ready_store().is_none());
}