From f3fd7d2d5dbe4e0b09d4fb6ccd7d049dd137207a Mon Sep 17 00:00:00 2001 From: Utkarsh Gupta Date: Wed, 24 Aug 2022 12:38:53 +0530 Subject: [PATCH] cluster_client: add handling for empty initial_nodes --- redis/src/cluster_client.rs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/redis/src/cluster_client.rs b/redis/src/cluster_client.rs index b3c50f2d2..f5815c885 100644 --- a/redis/src/cluster_client.rs +++ b/redis/src/cluster_client.rs @@ -42,15 +42,25 @@ impl ClusterClientBuilder { pub fn build(self) -> RedisResult { let initial_nodes = self.initial_nodes?; + let first_node = match initial_nodes.first() { + Some(node) => node, + None => { + return Err(RedisError::from(( + ErrorKind::InvalidClientConfig, + "Initial nodes can't be empty.", + ))) + } + }; + let mut cluster_params = self.cluster_params; let password = if cluster_params.password.is_none() { - cluster_params.password = initial_nodes[0].redis.password.clone(); + cluster_params.password = first_node.redis.password.clone(); &cluster_params.password } else { &None }; let username = if cluster_params.username.is_none() { - cluster_params.username = initial_nodes[0].redis.username.clone(); + cluster_params.username = first_node.redis.username.clone(); &cluster_params.username } else { &None @@ -253,4 +263,10 @@ mod tests { assert_eq!(client.cluster_params.password, Some("pass".to_string())); assert_eq!(client.cluster_params.username, Some("user1".to_string())); } + + #[test] + fn give_empty_initial_nodes() { + let client = ClusterClient::new(Vec::::new()); + assert!(client.is_err()) + } }