From 48968b403b7250c9f4ccd18e5cc22e2fe3612a8e Mon Sep 17 00:00:00 2001 From: Vika Date: Wed, 5 May 2021 17:33:44 +0300 Subject: Refactored the Redis instance spawning in tests to automatically kill Redis --- src/database/redis/mod.rs | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'src/database/redis/mod.rs') diff --git a/src/database/redis/mod.rs b/src/database/redis/mod.rs index ccbf831..a3b4bf8 100644 --- a/src/database/redis/mod.rs +++ b/src/database/redis/mod.rs @@ -249,11 +249,28 @@ impl RedisStorage { #[cfg(test)] pub mod tests { - use std::{process}; + use std::process; use std::time::Duration; use mobc_redis::redis; - pub async fn get_redis_instance() -> (tempdir::TempDir, process::Child, String) { + pub struct RedisInstance { + // We just need to hold on to it so it won't get dropped and remove the socket + _tempdir: tempdir::TempDir, + uri: String, + child: std::process::Child + } + impl Drop for RedisInstance { + fn drop(&mut self) { + self.child.kill().expect("Failed to kill the child!"); + } + } + impl RedisInstance { + pub fn uri(&self) -> &str { + &self.uri + } + } + + pub async fn get_redis_instance() -> RedisInstance { let tempdir = tempdir::TempDir::new("redis").expect("failed to create tempdir"); let socket = tempdir.path().join("redis.sock"); let redis_child = process::Command::new("redis-server") @@ -282,6 +299,8 @@ pub mod tests { } } - return (tempdir, redis_child, uri) + return RedisInstance { + uri, child: redis_child, _tempdir: tempdir + } } } \ No newline at end of file -- cgit 1.4.1