测试C 轮询插座功能
Test C++ poll socket function
我正在为一个函数编写一堆测试,我们必须检查插座是否准备好阅读。我们正在使用函数poll http://man7.org/linux/man-pages/man2/poll.2.html。
我们面临的问题是模仿某些插座状态,例如等待超时,套接字错误等。
我们有一个非常简单的函数,例如这样
bool wait_for_socket_data(int fd, int timeout_millisecs) {
if (fd < 0 or timeout_millisecs < 0)
return false;
struct pollfd fds[1];
fds[0].fd = fd;
fds[0].events = POLLIN;
const int poll_response = poll(fds, sizeof(fds)/sizeof(struct pollfd), timeout_millisecs);
std::cout << poll_response;
if (poll_response <= 0)
return false;
//here we will check different values in event inside struct
return true;
}
我们在测试功能中创建一个类似的套接字:
const int fd = socket(AF_INET6, SOCK_STREAM, 0);
memset(&addr, 0, sizeof(addr));
addr.sin6_family = AF_INET6;
memcpy(&addr.sin6_addr, &in6addr_any, sizeof(in6addr_any));
addr.sin6_port = htons(server_port);
const int rc = bind(fd, (struct sockaddr *)&addr, sizeof(addr));
问题是调用民意调查,该轮询总是返回一个值>0。我们正在尝试测试获取0情况,这是超时,而负面的情况是错误。我们试图模拟这一点,但是我们不能因为它不在班级中以继承并创建模拟或使用Gmock框架。仅针对此方法创建类是过多的。我们可以以任何方式模仿这些不同的插座状态吗?
谢谢!
民意调查在libc中标记为弱符号,因此您可以定义自己的存根民意调查,在动态链接后,您的应用程序将使用固执。
类似的东西:
TestState g_test = TestState::Uninitialized;
void test2() {
....
g_test = TestState::TestTimeout;
....
poll();
}
int poll (struct pollfd *__fds, nfds_t __nfds, int __timeout) {
switch (g_test) {
case TestState::TestTimeout:
return 0;
break;
}
}
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- 带内存和隔离功能的SQLite
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 类模板的成员功能的定义在单独的TU中完全专业化
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++中获得"静态纯虚拟"功能?
- 两个文件使用彼此的功能-如何解决
- 我应该实现右值推送功能吗?我应该使用std::move吗
- QML按钮点击功能执行顺序
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 有没有可能有一个只有ADL才能找到的非好友功能
- 功能样式转换从 'int' 到 'ItemType' 的匹配转换
- 文件系统:复制功能的速度秘诀是什么
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 如何在Directwrite中获得给定字体的可用OpenType功能
- 对可变参数使用声明.如何选择正确的功能
- 询问在设计我的手臂模拟器功能表示格式1
- Asio端接插座功能:取消、关闭、关闭、释放
- 测试C 轮询插座功能