get rids of nelson

This commit is contained in:
Tamo 2022-09-13 15:54:35 +02:00 committed by Clément Renault
parent a9844bd4f6
commit 2afb381f95
No known key found for this signature in database
GPG Key ID: 92ADA4E935E71FA4
3 changed files with 134 additions and 130 deletions

89
Cargo.lock generated
View File

@ -961,6 +961,41 @@ dependencies = [
"memchr", "memchr",
] ]
[[package]]
name = "darling"
version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4529658bdda7fd6769b8614be250cdcfc3aeb0ee72fe66f9e41e5e5eb73eac02"
dependencies = [
"darling_core",
"darling_macro",
]
[[package]]
name = "darling_core"
version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "649c91bc01e8b1eac09fb91e8dbc7d517684ca6be8ebc75bb9cafc894f9fdb6f"
dependencies = [
"fnv",
"ident_case",
"proc-macro2 1.0.46",
"quote 1.0.21",
"strsim",
"syn 1.0.101",
]
[[package]]
name = "darling_macro"
version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ddfc69c5bfcbd2fc09a0f38451d2daf0e372e367986a83906d1b0dbc88134fb5"
dependencies = [
"darling_core",
"quote 1.0.21",
"syn 1.0.101",
]
[[package]] [[package]]
name = "derivative" name = "derivative"
version = "2.2.0" version = "2.2.0"
@ -1169,14 +1204,37 @@ dependencies = [
"instant", "instant",
] ]
[[package]]
name = "faux"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c3b5e56a69ca67c241191cd9d484e14fb0fe89f5e539c2e8448eafd1f65c1f0"
dependencies = [
"faux_macros",
"paste",
]
[[package]]
name = "faux_macros"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "35c9bb4a2c13ffb3a93a39902aaf4e7190a1706a4779b6db0449aee433d26c4a"
dependencies = [
"darling",
"proc-macro2 1.0.46",
"quote 1.0.21",
"syn 1.0.101",
"uuid 0.8.2",
]
[[package]] [[package]]
name = "file-store" name = "file-store"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"nelson", "faux",
"tempfile", "tempfile",
"thiserror", "thiserror",
"uuid", "uuid 1.1.2",
] ]
[[package]] [[package]]
@ -1654,6 +1712,12 @@ dependencies = [
"tokio-rustls", "tokio-rustls",
] ]
[[package]]
name = "ident_case"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
[[package]] [[package]]
name = "idna" name = "idna"
version = "0.3.0" version = "0.3.0"
@ -1694,7 +1758,7 @@ dependencies = [
"tempfile", "tempfile",
"thiserror", "thiserror",
"time", "time",
"uuid", "uuid 1.1.2",
] ]
[[package]] [[package]]
@ -2141,7 +2205,7 @@ dependencies = [
"sha2", "sha2",
"thiserror", "thiserror",
"time", "time",
"uuid", "uuid 1.1.2",
] ]
[[package]] [[package]]
@ -2216,7 +2280,7 @@ dependencies = [
"tokio-stream", "tokio-stream",
"toml", "toml",
"urlencoding", "urlencoding",
"uuid", "uuid 1.1.2",
"vergen", "vergen",
"walkdir", "walkdir",
"yaup", "yaup",
@ -2281,7 +2345,7 @@ dependencies = [
"thiserror", "thiserror",
"time", "time",
"tokio", "tokio",
"uuid", "uuid 1.1.2",
"walkdir", "walkdir",
"whoami", "whoami",
] ]
@ -2363,7 +2427,7 @@ dependencies = [
"tempfile", "tempfile",
"thiserror", "thiserror",
"time", "time",
"uuid", "uuid 1.1.2",
] ]
[[package]] [[package]]
@ -2408,7 +2472,7 @@ dependencies = [
"tempfile", "tempfile",
"thiserror", "thiserror",
"time", "time",
"uuid", "uuid 1.1.2",
] ]
[[package]] [[package]]
@ -3920,6 +3984,15 @@ version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5190c9442dcdaf0ddd50f37420417d219ae5261bbf5db120d0f9bab996c9cba1" checksum = "5190c9442dcdaf0ddd50f37420417d219ae5261bbf5db120d0f9bab996c9cba1"
[[package]]
name = "uuid"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
dependencies = [
"getrandom",
]
[[package]] [[package]]
name = "uuid" name = "uuid"
version = "1.1.2" version = "1.1.2"

View File

@ -11,4 +11,4 @@ tempfile = "3.3.0"
thiserror = "1.0.30" thiserror = "1.0.30"
[dev-dependencies] [dev-dependencies]
nelson = { git = "https://github.com/meilisearch/nelson.git", rev = "675f13885548fb415ead8fbb447e9e6d9314000a"} faux = "0.1.8"

View File

@ -5,36 +5,17 @@ use std::path::{Path, PathBuf};
use tempfile::NamedTempFile; use tempfile::NamedTempFile;
use uuid::Uuid; use uuid::Uuid;
#[cfg(not(test))]
pub use store::UpdateFileStore;
#[cfg(test)]
pub use test::MockUpdateFileStore as UpdateFileStore;
const UPDATE_FILES_PATH: &str = "updates/updates_files"; const UPDATE_FILES_PATH: &str = "updates/updates_files";
pub struct UpdateFile {
path: PathBuf,
file: NamedTempFile,
}
#[derive(Debug, thiserror::Error)] #[derive(Debug, thiserror::Error)]
pub enum UpdateFileStoreError { pub enum Error {
#[error("Error while persisting update to disk")]
Error,
#[error(transparent)] #[error(transparent)]
IoError(#[from] std::io::Error), IoError(#[from] std::io::Error),
#[error(transparent)] #[error(transparent)]
PersistError(#[from] tempfile::PersistError), PersistError(#[from] tempfile::PersistError),
} }
pub type Result<T> = std::result::Result<T, UpdateFileStoreError>; pub type Result<T> = std::result::Result<T, Error>;
impl UpdateFile {
pub fn persist(self) -> Result<()> {
self.file.persist(&self.path)?;
Ok(())
}
}
impl Deref for UpdateFile { impl Deref for UpdateFile {
type Target = NamedTempFile; type Target = NamedTempFile;
@ -50,19 +31,18 @@ impl DerefMut for UpdateFile {
} }
} }
mod store { // #[cfg_attr(test, faux::create)]
use super::*; #[derive(Clone, Debug)]
pub struct UpdateFileStore {
#[derive(Clone, Debug)]
pub struct UpdateFileStore {
path: PathBuf, path: PathBuf,
} }
impl UpdateFileStore { // #[cfg_attr(test, faux::methods)]
pub fn new(path: impl AsRef<Path>) -> Result<Self> { impl UpdateFileStore {
pub fn new(path: impl AsRef<Path>) -> Result<UpdateFileStore> {
let path = path.as_ref().join(UPDATE_FILES_PATH); let path = path.as_ref().join(UPDATE_FILES_PATH);
std::fs::create_dir_all(&path)?; std::fs::create_dir_all(&path)?;
Ok(Self { path }) Ok(UpdateFileStore { path })
} }
/// Creates a new temporary update file. /// Creates a new temporary update file.
@ -102,65 +82,16 @@ mod store {
std::fs::remove_file(path)?; std::fs::remove_file(path)?;
Ok(()) Ok(())
} }
}
} }
#[cfg(test)] pub struct UpdateFile {
mod test { path: PathBuf,
use std::sync::Arc; file: NamedTempFile,
}
use nelson::Mocker; impl UpdateFile {
pub fn persist(self) -> Result<()> {
use super::*; self.file.persist(&self.path)?;
Ok(())
#[derive(Clone)]
pub enum MockUpdateFileStore {
Real(store::UpdateFileStore),
Mock(Arc<Mocker>),
}
impl MockUpdateFileStore {
pub fn mock(mocker: Mocker) -> Self {
Self::Mock(Arc::new(mocker))
}
pub fn new(path: impl AsRef<Path>) -> Result<Self> {
store::UpdateFileStore::new(path).map(Self::Real)
}
pub fn new_update(&self) -> Result<(Uuid, UpdateFile)> {
match self {
MockUpdateFileStore::Real(s) => s.new_update(),
MockUpdateFileStore::Mock(_) => todo!(),
}
}
pub fn get_update(&self, uuid: Uuid) -> Result<File> {
match self {
MockUpdateFileStore::Real(s) => s.get_update(uuid),
MockUpdateFileStore::Mock(_) => todo!(),
}
}
pub fn snapshot(&self, uuid: Uuid, dst: impl AsRef<Path>) -> Result<()> {
match self {
MockUpdateFileStore::Real(s) => s.snapshot(uuid, dst),
MockUpdateFileStore::Mock(_) => todo!(),
}
}
pub fn get_size(&self, uuid: Uuid) -> Result<u64> {
match self {
MockUpdateFileStore::Real(s) => s.get_size(uuid),
MockUpdateFileStore::Mock(_) => todo!(),
}
}
pub fn delete(&self, uuid: Uuid) -> Result<()> {
match self {
MockUpdateFileStore::Real(s) => s.delete(uuid),
MockUpdateFileStore::Mock(mocker) => unsafe { mocker.get("delete").call(uuid) },
}
}
} }
} }