66 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| use herodb::{server::Server, options::DBOption};
 | |
| use std::path::PathBuf;
 | |
| 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: PathBuf::from(test_dir),
 | |
|         port: 16390,
 | |
|         debug: false,
 | |
|         encrypt: false,
 | |
|         encryption_key: None,
 | |
|         backend: herodb::options::BackendType::Redb,
 | |
|         admin_secret: "test-admin".to_string(),
 | |
|     };
 | |
|     
 | |
|     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();
 | |
| 
 | |
|     // Acquire ReadWrite permissions for this new connection
 | |
|     let handshake = "*4\r\n$6\r\nSELECT\r\n$1\r\n0\r\n$3\r\nKEY\r\n$10\r\ntest-admin\r\n";
 | |
|     stream.write_all(handshake.as_bytes()).await.unwrap();
 | |
|     let mut buffer = [0; 1024];
 | |
|     let n = stream.read(&mut buffer).await.unwrap();
 | |
|     let resp = String::from_utf8_lossy(&buffer[..n]);
 | |
|     assert!(resp.contains("OK"), "Failed SELECT handshake: {}", resp);
 | |
|     
 | |
|     // 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 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);
 | |
| } |