测试TCPstream读取功能

问题描述 投票:0回答:1

我正在创建一个简单的 HTTP 1.1 服务器,它将能够读取和写入新连接。一切似乎都在构建和运行良好,正如使用

print
语句来确认测试连接已建立一样。我想知道是否有一种方法可以测试
stream.read()
函数,该函数需要
mut buffer: [u8;1024]
。我想测试并查看程序是否正在等待通过终端的新连接。我目前正在使用 VSCode 和标准终端。

我会提供Server模块,我已经写好了。

use ::std::io::Read;
use std::net::TcpListener;

pub struct Server_Node {
    address: String,
}
impl Server_Node {
    pub fn new(address: String) -> Self {
        Server_Node { address }
    }

    pub fn run(self) {
        println!("Listening on {} !!!!凸(⊙▂⊙✖ )!!!!", self.address);
        let listener = TcpListener::bind(&self.address).unwrap();

        loop {
            match listener.accept() {
                Ok((mut _stream, _)) => {
                    let mut buffer = [0; 1024];
                    match _stream.read(&mut buffer) {
                        Ok(_) => {
                            println!("Recieved  a request: {}", String::from_utf8_lossy(&buffer));
                        }

                        Err((e)) => println!("FAILED TO READ FVROM CONNECTION: {}", e),
                    }
                }
                Err(e) => println!("ERROR: FAILED TO ESTABLISH CONNECTION :{} ", e),
            }
        }
    }
}
http rust tcp tcplistener tcpserver
1个回答
0
投票

listener.accept()
返回一个实现 Read 特征的
TcpStream
文档

如果您还没有研究过 Trait 和 Trait 对象,我建议您阅读 Rust book 中的内容。您可以编写一个单独的函数,该函数接受具有指定特征边界的通用参数。

match listener.accept() {
                Ok((mut _stream, _)) => {
                    let mut buffer = [0; 1024];
                    match _stream.read(&mut buffer) {
                        Ok(_) => {
                            println!("Recieved  a request: {}", String::from_utf8_lossy(&buffer));
                        }

                        Err((e)) => println!("FAILED TO READ FVROM CONNECTION: {}", e),
                    }
                }
                Err(e) => println!("ERROR: FAILED TO ESTABLISH CONNECTION :{} ", e),
            }

你可以重写这样的内容:

fn process_stream<R: Read>(mut stream: R) -> Result<(), String> {
    // process stream here
    ...
}

// Server_Node.run
match listener.accept() {
     Ok((stream, _)) => process_stream(stream), // extend your logic
     Err(err) => {...},
}

通过这样的分解,您可以使用单元测试覆盖您的process_stream函数并单独测试它,即使不运行整个应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.