- nc
- curl
- wrk
- gdb
- valgrind
- perf
对每一个数据结构都写了简单的单元测试。我不敢说测试很充分,但是主要的功能点还是测试到了在开发过程中多次大块修改代码结构,测试能跑过就可以比较安心,有单元测试对于重构代码帮助很大!
在代码设计中,考虑到测试的便捷性,需要把每个模块独立起来,尽量减少模块之间的耦合。对于利用recv这样的系统调用获得输入,从而进行测试的过程,会比较麻烦。我在parse_test.c使用buffer_cat
函数模拟recv得到的数据,从而进行parser的测试。在这里,buffer_t
和parser是较为紧密的耦合关系,不过总体而言,相比较另写客户端提供数据,这种方式还是便捷得多。
设计实现里面说过,NIO决定了每一个IO操作的状态包含三种:OK, ERROR, AGAIN。健壮的服务器应该能处理这种慢请求,因此测试代码也实现了一个慢速client,每隔30ms发送一个字节给服务器,测试服务器能否正确解析。client里面已经内置了一些请求体。