use redis_rs::{server::Server, options::DBOption}; use std::time::Duration; use tokio::io::{AsyncReadExt, AsyncWriteExt}; use tokio::net::TcpStream; use tokio::time::sleep; #[tokio::test] async fn debug_hset_return_value() { let test_dir = "/tmp/herodb_debug_hset_return"; // Clean up any existing test data let _ = std::fs::remove_dir_all(&test_dir); std::fs::create_dir_all(&test_dir).unwrap(); let option = DBOption { dir: test_dir.to_string(), port: 16390, debug: false, encrypt: false, encryption_key: None, }; let mut server = Server::new(option).await; // Start server in background tokio::spawn(async move { let listener = tokio::net::TcpListener::bind("127.0.0.1:16390") .await .unwrap(); loop { if let Ok((stream, _)) = listener.accept().await { let _ = server.handle(stream).await; } } }); sleep(Duration::from_millis(200)).await; // Connect and test HSET let mut stream = TcpStream::connect("127.0.0.1:16390").await.unwrap(); // Send HSET command let cmd = "*4\r\n$4\r\nHSET\r\n$4\r\nhash\r\n$6\r\nfield1\r\n$6\r\nvalue1\r\n"; stream.write_all(cmd.as_bytes()).await.unwrap(); let mut buffer = [0; 1024]; let n = stream.read(&mut buffer).await.unwrap(); let response = String::from_utf8_lossy(&buffer[..n]); println!("HSET response: {}", response); println!("Response bytes: {:?}", &buffer[..n]); // Check if response contains "1" assert!(response.contains("1"), "Expected response to contain '1', got: {}", response); }