pliantdb-server 0.1.0-dev.3

Database server for PliantDb.
Documentation
use pliantdb_core::test_util::{
    self, basic_server_connection_tests, Basic, HarnessTest, TestDirectory,
};
use pliantdb_local::Database;

use crate::{test_util::initialize_basic_server, Server};

#[tokio::test]
async fn simple_test() -> anyhow::Result<()> {
    let test_dir = TestDirectory::new("simple-test");
    let server = initialize_basic_server(test_dir.as_ref()).await?;
    let db = server.database::<Basic>("tests").await?;
    test_util::store_retrieve_update_delete_tests(&db).await
}

struct TestHarness {
    _directory: TestDirectory,
    server: Server,
}

impl TestHarness {
    pub async fn new(test: HarnessTest) -> anyhow::Result<Self> {
        let directory = TestDirectory::new(format!("server-{}", test));
        let server = initialize_basic_server(directory.as_ref()).await?;
        Ok(Self {
            _directory: directory,
            server,
        })
    }

    pub const fn server(&self) -> &'_ Server {
        &self.server
    }

    pub async fn connect(&self) -> anyhow::Result<Database<Basic>> {
        let db = self.server.database::<Basic>("tests").await?;
        Ok(db)
    }

    pub async fn shutdown(&self) -> anyhow::Result<()> {
        self.server.shutdown(None).await?;
        Ok(())
    }
}

pliantdb_core::define_connection_test_suite!(TestHarness);
#[cfg(feature = "pubsub")]
pliantdb_core::define_pubsub_test_suite!(TestHarness);

#[cfg(feature = "keyvalue")]
pliantdb_core::define_kv_test_suite!(TestHarness);

#[tokio::test]
async fn basic_server_tests() -> anyhow::Result<()> {
    let test_dir = TestDirectory::new("handle-requests");
    let server = initialize_basic_server(test_dir.as_ref()).await?;

    basic_server_connection_tests(server).await
}