From 9ded46b56df284cfc680d27834811cb3a42651cc Mon Sep 17 00:00:00 2001 From: Lucas Kent Date: Tue, 10 Aug 2021 09:34:26 +1000 Subject: [PATCH] Run rustfmt on the codebase and enforce rustfmt via github actions (#132) --- .github/workflows/rust.yml | 4 +- rust-toolchain.toml | 3 + rustfmt.toml | 0 shotover-proxy/benches/helpers.rs | 4 +- shotover-proxy/src/error.rs | 14 +---- shotover-proxy/src/lib.rs | 2 +- shotover-proxy/src/message/mod.rs | 29 +++++---- .../src/protocols/cassandra_protocol2.rs | 2 +- shotover-proxy/src/protocols/redis_codec.rs | 12 +--- shotover-proxy/src/runner.rs | 30 +++++---- shotover-proxy/src/sources/mod.rs | 61 +++++++++++-------- shotover-proxy/src/transforms/chain.rs | 7 ++- shotover-proxy/src/transforms/lua.rs | 8 +-- .../src/transforms/protect/local_kek.rs | 31 ++++++---- .../src/transforms/protect/pkcs_11.rs | 2 +- .../redis_transforms/redis_cache.rs | 8 ++- .../redis_transforms/redis_cluster.rs | 10 +-- .../tests/codec/util/packet_capture.rs | 6 +- shotover-proxy/tests/helpers/mod.rs | 4 +- shotover-proxy/tests/lib.rs | 2 +- .../redis_int_tests/basic_driver_tests.rs | 4 +- .../tests/redis_presence_integration.rs | 5 +- test-helpers/src/docker_compose.rs | 14 +++-- 23 files changed, 142 insertions(+), 120 deletions(-) create mode 100644 rust-toolchain.toml create mode 100644 rustfmt.toml diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index d6cd21c00..3499d9174 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -41,7 +41,7 @@ jobs: run: | curl -L "$LINK/$SCCACHE_VERSION/sccache-$SCCACHE_VERSION-x86_64-unknown-linux-musl.tar.gz" | tar xz echo "$PWD/sccache-$SCCACHE_VERSION-x86_64-unknown-linux-musl/" >> $GITHUB_PATH - - name: Install libpacap + - name: Install libpcap run: sudo apt-get install -y libpcap-dev - name: Start sccache env: @@ -57,6 +57,8 @@ jobs: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} run: mkdir -p test_tmp && aws s3 sync s3://shotover-test-captures ./test_tmp + - name: Check `cargo fmt` was run + run: cargo fmt --all -- --check - name: Run tests run: cargo test -- --include-ignored timeout-minutes: 30 diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 000000000..9993e9361 --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,3 @@ +[toolchain] +channel = "stable" +components = [ "rustfmt" ] diff --git a/rustfmt.toml b/rustfmt.toml new file mode 100644 index 000000000..e69de29bb diff --git a/shotover-proxy/benches/helpers.rs b/shotover-proxy/benches/helpers.rs index 252cd54dd..dc5fd9307 100644 --- a/shotover-proxy/benches/helpers.rs +++ b/shotover-proxy/benches/helpers.rs @@ -1,13 +1,13 @@ use anyhow::Result; use shotover_proxy::runner::{ConfigOpts, Runner}; -use tokio::task::JoinHandle; use tokio::runtime::Runtime; +use tokio::task::JoinHandle; pub fn run_shotover_with_topology(topology_path: &str) -> (Runtime, JoinHandle>) { let opts = ConfigOpts { topology_file: topology_path.into(), config_file: "config/config.yaml".into(), - .. ConfigOpts::default() + ..ConfigOpts::default() }; let spawn = Runner::new(opts).unwrap().run_spawn(); diff --git a/shotover-proxy/src/error.rs b/shotover-proxy/src/error.rs index 6533c23e9..32be1b8ed 100644 --- a/shotover-proxy/src/error.rs +++ b/shotover-proxy/src/error.rs @@ -1,15 +1,11 @@ -use std::{fmt, error}; use crate::message::Messages; +use std::{error, fmt}; use thiserror::Error; - #[derive(Error, Clone, Debug)] pub enum RequestError { #[error("Invalid header (expected {expected:?}, got {found:?})")] - InvalidHeader { - expected: String, - found: String, - }, + InvalidHeader { expected: String, found: String }, #[error("Malform Request: {0}")] MalformedRequest(String), @@ -18,11 +14,8 @@ pub enum RequestError { #[error("Could not process chain: {0}")] ChainProcessingError(String), - - } - #[derive(Error, Debug)] pub struct ConfigError { pub message: String, @@ -51,5 +44,4 @@ impl fmt::Display for ConfigError { } } - -pub type ChainResponse = anyhow::Result; \ No newline at end of file +pub type ChainResponse = anyhow::Result; diff --git a/shotover-proxy/src/lib.rs b/shotover-proxy/src/lib.rs index b958379ed..9e3303bb3 100644 --- a/shotover-proxy/src/lib.rs +++ b/shotover-proxy/src/lib.rs @@ -4,8 +4,8 @@ pub mod config; pub mod error; pub mod message; pub mod protocols; +pub mod runner; pub mod runtimes; pub mod server; pub mod sources; pub mod transforms; -pub mod runner; diff --git a/shotover-proxy/src/message/mod.rs b/shotover-proxy/src/message/mod.rs index 3cc974a8d..063c58ab3 100644 --- a/shotover-proxy/src/message/mod.rs +++ b/shotover-proxy/src/message/mod.rs @@ -207,20 +207,18 @@ pub enum ASTHolder { impl ASTHolder { pub fn get_command(&self) -> String { match self { - ASTHolder::SQL(statement) => { - match statement { - Statement::Query(_) => "SELECT", - Statement::Insert { .. } => "INSERT", - Statement::Update { .. } => "UPDATE", - Statement::Delete { .. } => "DELETE", - Statement::CreateView { .. } => "CREATE VIEW", - Statement::CreateTable { .. } => "CREATE TABLE", - Statement::AlterTable { .. } => "ALTER TABLE", - Statement::Drop { .. } => "DROP", - _ => "UNKNOWN", - } - .to_string() + ASTHolder::SQL(statement) => match statement { + Statement::Query(_) => "SELECT", + Statement::Insert { .. } => "INSERT", + Statement::Update { .. } => "UPDATE", + Statement::Delete { .. } => "DELETE", + Statement::CreateView { .. } => "CREATE VIEW", + Statement::CreateTable { .. } => "CREATE TABLE", + Statement::AlterTable { .. } => "ALTER TABLE", + Statement::Drop { .. } => "DROP", + _ => "UNKNOWN", } + .to_string(), ASTHolder::Commands(commands) => { if let Value::List(coms) = commands { if let Some(Value::Bytes(b)) = coms.get(0) { @@ -486,8 +484,9 @@ impl Value { ColType::Double => Value::Float(decode_double(actual_bytes).unwrap()), ColType::Float => Value::Float(decode_float(actual_bytes).unwrap() as f64), ColType::Int => Value::Integer(decode_int(actual_bytes).unwrap() as i64), - ColType::Timestamp => - Value::Timestamp(Utc.timestamp_nanos(decode_timestamp(actual_bytes).unwrap())), + ColType::Timestamp => { + Value::Timestamp(Utc.timestamp_nanos(decode_timestamp(actual_bytes).unwrap())) + } ColType::Uuid => Value::Bytes(Bytes::copy_from_slice(actual_bytes)), ColType::Varchar => Value::Strings(decode_varchar(actual_bytes).unwrap()), ColType::Varint => Value::Integer(decode_varint(actual_bytes).unwrap()), diff --git a/shotover-proxy/src/protocols/cassandra_protocol2.rs b/shotover-proxy/src/protocols/cassandra_protocol2.rs index 9538ad388..1cc35e2eb 100644 --- a/shotover-proxy/src/protocols/cassandra_protocol2.rs +++ b/shotover-proxy/src/protocols/cassandra_protocol2.rs @@ -843,7 +843,7 @@ mod cassandra_protocol_tests { ast.to_string().replace(char::is_whitespace, ""), ); } - details => panic!("Unexpected details: {:?}", details) + details => panic!("Unexpected details: {:?}", details), } } } diff --git a/shotover-proxy/src/protocols/redis_codec.rs b/shotover-proxy/src/protocols/redis_codec.rs index 34d88c95f..96e242412 100644 --- a/shotover-proxy/src/protocols/redis_codec.rs +++ b/shotover-proxy/src/protocols/redis_codec.rs @@ -582,17 +582,9 @@ impl RedisCodec { Frame::Error(s) => self.handle_redis_error(s, frame), Frame::Null => { if self.decode_as_response { - Message::new_response( - QueryResponse::empty(), - false, - RawFrame::Redis(frame), - ) + Message::new_response(QueryResponse::empty(), false, RawFrame::Redis(frame)) } else { - Message::new_query( - QueryMessage::empty(), - false, - RawFrame::Redis(frame), - ) + Message::new_query(QueryMessage::empty(), false, RawFrame::Redis(frame)) } } }) diff --git a/shotover-proxy/src/runner.rs b/shotover-proxy/src/runner.rs index 6147dfa83..75de1df37 100644 --- a/shotover-proxy/src/runner.rs +++ b/shotover-proxy/src/runner.rs @@ -6,18 +6,18 @@ use metrics_runtime::Receiver; use tokio::runtime::{self, Runtime}; use tokio::task::JoinHandle; use tracing::{debug, info}; -use tracing_appender::non_blocking::{WorkerGuard, NonBlocking}; +use tracing_appender::non_blocking::{NonBlocking, WorkerGuard}; +use tracing_subscriber::fmt::format::{DefaultFields, Format}; use tracing_subscriber::fmt::Layer; -use tracing_subscriber::fmt::format::{Format, DefaultFields}; use tracing_subscriber::layer::Layered; use tracing_subscriber::reload::Handle; use tracing_subscriber::{EnvFilter, Registry}; +use crate::admin::httpserver::LogFilterHttpExporter; use crate::config::topology::Topology; use crate::config::Config; use crate::transforms::Transforms; use crate::transforms::Wrapper; -use crate::admin::httpserver::LogFilterHttpExporter; #[derive(Clap, Clone)] #[clap(version = crate_version!(), author = "Instaclustr")] @@ -41,7 +41,7 @@ impl Default for ConfigOpts { topology_file: "config/topology.yaml".into(), config_file: "config/config.yaml".into(), core_threads: 4, - stack_size: 2097152 + stack_size: 2097152, } } } @@ -68,13 +68,21 @@ impl Runner { let tracing = TracingState::new(config.main_log_level.as_str()); - Ok(Runner { runtime, topology, config, tracing }) + Ok(Runner { + runtime, + topology, + config, + tracing, + }) } pub fn with_observability_interface(self) -> Result { - let receiver = Receiver::builder().build().expect("failed to create receiver"); + let receiver = Receiver::builder() + .build() + .expect("failed to create receiver"); let socket: SocketAddr = self.config.observability_interface.parse()?; - let exporter = LogFilterHttpExporter::new(receiver.controller(), socket, self.tracing.handle.clone()); + let exporter = + LogFilterHttpExporter::new(receiver.controller(), socket, self.tracing.handle.clone()); receiver.install(); self.runtime.spawn(exporter.async_run()); @@ -100,7 +108,8 @@ impl Runner { struct TracingState { /// Once this is dropped tracing logs are ignored guard: WorkerGuard, - handle: Handle, Registry>>, + handle: + Handle, Registry>>, } impl TracingState { @@ -121,7 +130,6 @@ impl TracingState { } } - pub struct RunnerSpawned { pub runtime: Runtime, pub handle: JoinHandle>, @@ -149,8 +157,6 @@ pub async fn run(topology: Topology, config: Config) -> Result<()> { info!("Goodbye!"); Ok(()) } - Err(error) => { - Err(anyhow!("Failed to run chains: {}", error)) - } + Err(error) => Err(anyhow!("Failed to run chains: {}", error)), } } diff --git a/shotover-proxy/src/sources/mod.rs b/shotover-proxy/src/sources/mod.rs index df3e4f238..8c82e9e2e 100644 --- a/shotover-proxy/src/sources/mod.rs +++ b/shotover-proxy/src/sources/mod.rs @@ -1,43 +1,43 @@ use crate::config::topology::TopicHolder; use crate::sources::cassandra_source::{CassandraConfig, CassandraSource}; use crate::sources::mpsc_source::{AsyncMpsc, AsyncMpscConfig}; -use crate::transforms::chain::{TransformChain}; +use crate::sources::redis_source::{RedisConfig, RedisSource}; +use crate::transforms::chain::TransformChain; use async_trait::async_trait; use serde::{Deserialize, Serialize}; -use tokio::task::JoinHandle; -use crate::sources::redis_source::{RedisSource, RedisConfig}; use tokio::sync::{broadcast, mpsc}; +use tokio::task::JoinHandle; -use anyhow::{Result}; +use anyhow::Result; pub mod cassandra_source; pub mod mpsc_source; pub mod redis_source; /* - notify_shutdown: broadcast::Sender<()>, + notify_shutdown: broadcast::Sender<()>, - /// Used as part of the graceful shutdown process to wait for client - /// connections to complete processing. - /// - /// Tokio channels are closed once all `Sender` handles go out of scope. - /// When a channel is closed, the receiver receives `None`. This is - /// leveraged to detect all connection handlers completing. When a - /// connection handler is initialized, it is assigned a clone of - /// `shutdown_complete_tx`. When the listener shuts down, it drops the - /// sender held by this `shutdown_complete_tx` field. Once all handler tasks - /// complete, all clones of the `Sender` are also dropped. This results in - /// `shutdown_complete_rx.recv()` completing with `None`. At this point, it - /// is safe to exit the server process. - shutdown_complete_rx: mpsc::Receiver<()>, - shutdown_complete_tx: mpsc::Sender<()>, - */ + /// Used as part of the graceful shutdown process to wait for client + /// connections to complete processing. + /// + /// Tokio channels are closed once all `Sender` handles go out of scope. + /// When a channel is closed, the receiver receives `None`. This is + /// leveraged to detect all connection handlers completing. When a + /// connection handler is initialized, it is assigned a clone of + /// `shutdown_complete_tx`. When the listener shuts down, it drops the + /// sender held by this `shutdown_complete_tx` field. Once all handler tasks + /// complete, all clones of the `Sender` are also dropped. This results in + /// `shutdown_complete_rx.recv()` completing with `None`. At this point, it + /// is safe to exit the server process. + shutdown_complete_rx: mpsc::Receiver<()>, + shutdown_complete_tx: mpsc::Sender<()>, +*/ #[derive(Debug)] pub enum Sources { Cassandra(CassandraSource), Mpsc(AsyncMpsc), - Redis(RedisSource) + Redis(RedisSource), } impl Sources { @@ -54,7 +54,7 @@ impl Sources { pub enum SourcesConfig { Cassandra(CassandraConfig), Mpsc(AsyncMpscConfig), - Redis(RedisConfig) + Redis(RedisConfig), } impl SourcesConfig { @@ -66,9 +66,18 @@ impl SourcesConfig { shutdown_complete_tx: mpsc::Sender<()>, ) -> Result> { match self { - SourcesConfig::Cassandra(c) => c.get_source(chain, topics, notify_shutdown, shutdown_complete_tx).await, - SourcesConfig::Mpsc(m) => m.get_source(chain, topics, notify_shutdown, shutdown_complete_tx).await, - SourcesConfig::Redis(r) => r.get_source(chain, topics, notify_shutdown, shutdown_complete_tx).await + SourcesConfig::Cassandra(c) => { + c.get_source(chain, topics, notify_shutdown, shutdown_complete_tx) + .await + } + SourcesConfig::Mpsc(m) => { + m.get_source(chain, topics, notify_shutdown, shutdown_complete_tx) + .await + } + SourcesConfig::Redis(r) => { + r.get_source(chain, topics, notify_shutdown, shutdown_complete_tx) + .await + } } } } @@ -82,6 +91,4 @@ pub trait SourcesFromConfig: Send { notify_shutdown: broadcast::Sender<()>, shutdown_complete_tx: mpsc::Sender<()>, ) -> Result>; - - } diff --git a/shotover-proxy/src/transforms/chain.rs b/shotover-proxy/src/transforms/chain.rs index 159e071ce..f47a3018f 100644 --- a/shotover-proxy/src/transforms/chain.rs +++ b/shotover-proxy/src/transforms/chain.rs @@ -128,7 +128,12 @@ impl TransformChain { *count += 1; } - let chain_response = chain.process_request(Wrapper::new_with_chain_name(messages, chain.name.clone()), name).await; + let chain_response = chain + .process_request( + Wrapper::new_with_chain_name(messages, chain.name.clone()), + name, + ) + .await; if let Err(e) = &chain_response { warn!("Internal error in buffered chain: {:?} - resetting", e); diff --git a/shotover-proxy/src/transforms/lua.rs b/shotover-proxy/src/transforms/lua.rs index adfcfd188..1c87473dc 100644 --- a/shotover-proxy/src/transforms/lua.rs +++ b/shotover-proxy/src/transforms/lua.rs @@ -114,10 +114,10 @@ mod lua_transform_tests { // use crate::transforms::printer::Printer; // use crate::transforms::{Transform, Transforms, TransformsFromConfig, Wrapper}; -// const REQUEST_STRING: &str = r###" -//qm.namespace = {"aaaaaaaaaa", "bbbbb"} -//return call_next_transform(qm) -//"###; + // const REQUEST_STRING: &str = r###" + //qm.namespace = {"aaaaaaaaaa", "bbbbb"} + //return call_next_transform(qm) + //"###; // #[tokio::test(flavor = "multi_thread")] // async fn test_lua_script() -> Result<(), Box> { diff --git a/shotover-proxy/src/transforms/protect/local_kek.rs b/shotover-proxy/src/transforms/protect/local_kek.rs index 7fada1fe2..1d6e964aa 100644 --- a/shotover-proxy/src/transforms/protect/local_kek.rs +++ b/shotover-proxy/src/transforms/protect/local_kek.rs @@ -1,21 +1,21 @@ -use bytes::{Bytes}; use crate::transforms::protect::KeyMaterial; -use sodiumoxide::crypto::secretbox; -use sodiumoxide::crypto::secretbox::{Key, Nonce}; use anyhow::anyhow; use anyhow::Result; +use bytes::Bytes; use serde::{Deserialize, Serialize}; +use sodiumoxide::crypto::secretbox; +use sodiumoxide::crypto::secretbox::{Key, Nonce}; #[derive(Clone)] pub struct LocalKeyManagement { pub kek: Key, - pub kek_id: String + pub kek_id: String, } #[derive(Clone, Serialize, Deserialize)] pub struct DEKStructure { pub nonce: Nonce, - pub key: Vec + pub key: Vec, } impl LocalKeyManagement { @@ -24,25 +24,30 @@ impl LocalKeyManagement { None => { let plaintext_dek = secretbox::gen_key(); let nonce = secretbox::gen_nonce(); - let encrypted_dek = secretbox::seal( &plaintext_dek.0, &nonce, &self.kek); - let dek_struct = DEKStructure{ nonce, key: encrypted_dek }; + let encrypted_dek = secretbox::seal(&plaintext_dek.0, &nonce, &self.kek); + let dek_struct = DEKStructure { + nonce, + key: encrypted_dek, + }; let cipher_blob = serde_json::to_string(&dek_struct)?; Ok(KeyMaterial { ciphertext_blob: Bytes::from(cipher_blob), key_id: self.kek_id.clone(), - plaintext: plaintext_dek + plaintext: plaintext_dek, }) - }, + } Some(dek) => { let dek_struct: DEKStructure = serde_json::from_slice(dek.as_slice())?; - let plaintext_dek = secretbox::open(dek_struct.key.as_slice(), &dek_struct.nonce, &self.kek) - .map_err(|_|{anyhow!("couldn't decrypt DEK")})?; + let plaintext_dek = + secretbox::open(dek_struct.key.as_slice(), &dek_struct.nonce, &self.kek) + .map_err(|_| anyhow!("couldn't decrypt DEK"))?; Ok(KeyMaterial { ciphertext_blob: Bytes::from(dek), key_id: self.kek_id.clone(), - plaintext: Key::from_slice(plaintext_dek.as_slice()).ok_or_else(|| anyhow!("could not build key"))? + plaintext: Key::from_slice(plaintext_dek.as_slice()) + .ok_or_else(|| anyhow!("could not build key"))?, }) - }, + } } } } diff --git a/shotover-proxy/src/transforms/protect/pkcs_11.rs b/shotover-proxy/src/transforms/protect/pkcs_11.rs index 75c1c64bf..2dd99de57 100644 --- a/shotover-proxy/src/transforms/protect/pkcs_11.rs +++ b/shotover-proxy/src/transforms/protect/pkcs_11.rs @@ -1 +1 @@ -// TODO -> https://github.com/mheese/rust-pkcs11 \ No newline at end of file +// TODO -> https://github.com/mheese/rust-pkcs11 diff --git a/shotover-proxy/src/transforms/redis_transforms/redis_cache.rs b/shotover-proxy/src/transforms/redis_transforms/redis_cache.rs index 6b1eac900..8331ce8df 100644 --- a/shotover-proxy/src/transforms/redis_transforms/redis_cache.rs +++ b/shotover-proxy/src/transforms/redis_transforms/redis_cache.rs @@ -313,8 +313,7 @@ fn build_redis_ast_from_sql( .ok_or(anyhow!("Couldn't build query"))? .iter() .filter_map(|(p, v)| { - if !pk_schema.partition_key.contains(p) - && !pk_schema.range_key.contains(p) + if !pk_schema.partition_key.contains(p) && !pk_schema.range_key.contains(p) { Some(v) } else { @@ -420,7 +419,10 @@ mod test { match frame.messages.remove(0).details { MessageDetails::Query(qm) => qm.ast.unwrap(), - details => panic!("Exepected message details to be a query but was: {:?}", details), + details => panic!( + "Exepected message details to be a query but was: {:?}", + details + ), } } diff --git a/shotover-proxy/src/transforms/redis_transforms/redis_cluster.rs b/shotover-proxy/src/transforms/redis_transforms/redis_cluster.rs index 3f12d90f5..8de660cc1 100644 --- a/shotover-proxy/src/transforms/redis_transforms/redis_cluster.rs +++ b/shotover-proxy/src/transforms/redis_transforms/redis_cluster.rs @@ -226,10 +226,10 @@ impl RedisCluster { .clone(); vec![key] } - None => vec![] + None => vec![], } } - _ => vec![] + _ => vec![], } } } @@ -382,7 +382,7 @@ fn parse_slots(contacts_raw: Frame) -> Result { Frame::Error(err) => { return Err(anyhow!("Frame error: {}", err)); } - _ => { } + _ => {} } if slots.is_empty() { @@ -437,7 +437,7 @@ async fn get_topology(first_contact_points: &[String]) -> Result { while let Some(response) = results.next().await { match response { Ok(map) => return Ok(map), - Err(e) => warn!("failed to fetch map from one host: {}", e) + Err(e) => warn!("failed to fetch map from one host: {}", e), } } @@ -450,7 +450,7 @@ fn get_hashtag(key: &[u8]) -> Option<&[u8]> { if let Some(close) = key[open..].iter().position(|v| *v == b'}') { let rv = &key[open + 1..open + close]; if !rv.is_empty() { - return Some(rv) + return Some(rv); } } } diff --git a/shotover-proxy/tests/codec/util/packet_capture.rs b/shotover-proxy/tests/codec/util/packet_capture.rs index ccb066d7f..56f4cf53d 100644 --- a/shotover-proxy/tests/codec/util/packet_capture.rs +++ b/shotover-proxy/tests/codec/util/packet_capture.rs @@ -16,7 +16,11 @@ impl PacketCapture { } pub fn list_devices() { - let devices: Vec = Device::list().unwrap().iter().map(|val| val.name.clone()).collect(); + let devices: Vec = Device::list() + .unwrap() + .iter() + .map(|val| val.name.clone()) + .collect(); println!("All Interfaces : "); devices.iter().for_each(|val| println!("* {}", val)); } diff --git a/shotover-proxy/tests/helpers/mod.rs b/shotover-proxy/tests/helpers/mod.rs index 252cd54dd..dc5fd9307 100644 --- a/shotover-proxy/tests/helpers/mod.rs +++ b/shotover-proxy/tests/helpers/mod.rs @@ -1,13 +1,13 @@ use anyhow::Result; use shotover_proxy::runner::{ConfigOpts, Runner}; -use tokio::task::JoinHandle; use tokio::runtime::Runtime; +use tokio::task::JoinHandle; pub fn run_shotover_with_topology(topology_path: &str) -> (Runtime, JoinHandle>) { let opts = ConfigOpts { topology_file: topology_path.into(), config_file: "config/config.yaml".into(), - .. ConfigOpts::default() + ..ConfigOpts::default() }; let spawn = Runner::new(opts).unwrap().run_spawn(); diff --git a/shotover-proxy/tests/lib.rs b/shotover-proxy/tests/lib.rs index e4b3a48e6..60a1407b8 100644 --- a/shotover-proxy/tests/lib.rs +++ b/shotover-proxy/tests/lib.rs @@ -1,3 +1,3 @@ -pub mod redis_int_tests; pub mod codec; mod helpers; +pub mod redis_int_tests; diff --git a/shotover-proxy/tests/redis_int_tests/basic_driver_tests.rs b/shotover-proxy/tests/redis_int_tests/basic_driver_tests.rs index 5827dd0b4..75d99f58a 100644 --- a/shotover-proxy/tests/redis_int_tests/basic_driver_tests.rs +++ b/shotover-proxy/tests/redis_int_tests/basic_driver_tests.rs @@ -2,13 +2,13 @@ use redis::{Commands, ErrorKind, RedisError, Value}; -use test_helpers::docker_compose::DockerCompose; use crate::helpers::run_shotover_with_topology; use crate::redis_int_tests::support::TestContext; +use test_helpers::docker_compose::DockerCompose; +use serial_test::serial; use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet}; use tracing::{info, trace}; -use serial_test::serial; fn test_args() { info!("test_args"); diff --git a/shotover-proxy/tests/redis_presence_integration.rs b/shotover-proxy/tests/redis_presence_integration.rs index 93c41fae9..9b72e521c 100644 --- a/shotover-proxy/tests/redis_presence_integration.rs +++ b/shotover-proxy/tests/redis_presence_integration.rs @@ -1,9 +1,9 @@ mod helpers; +use helpers::run_shotover_with_topology; use redis::{Commands, Connection, RedisResult}; use std::{thread, time}; use tracing::info; -use helpers::run_shotover_with_topology; const LUA1: &str = r###" return {KEYS[1],ARGV[1],ARGV[2]} @@ -58,8 +58,7 @@ async fn run_register_flow_pipelined( build_c_key: BCK, build_key_user: BKU, channel: &str, -) -where +) where BK: Fn() -> String, BCK: Fn() -> String, BKU: Fn() -> String, diff --git a/test-helpers/src/docker_compose.rs b/test-helpers/src/docker_compose.rs index 62d66818e..f85ae6f0f 100644 --- a/test-helpers/src/docker_compose.rs +++ b/test-helpers/src/docker_compose.rs @@ -1,7 +1,7 @@ use std::thread; use std::time; -use tracing::info; use subprocess::{Exec, Redirection}; +use tracing::info; fn run_command(command: &str, args: &[&str]) { let data = Exec::cmd(command) @@ -11,12 +11,18 @@ fn run_command(command: &str, args: &[&str]) { .capture() .unwrap(); if !data.exit_status.success() { - panic!("command {} {:?} exited with {:?} and output:\n{}", command, args, data.exit_status, data.stdout_str()) + panic!( + "command {} {:?} exited with {:?} and output:\n{}", + command, + args, + data.exit_status, + data.stdout_str() + ) } } pub struct DockerCompose { - file_path: String + file_path: String, } impl DockerCompose { @@ -30,7 +36,7 @@ impl DockerCompose { thread::sleep(time::Duration::from_secs(4)); DockerCompose { - file_path: file_path.to_string() + file_path: file_path.to_string(), } }