我正试图为我的服务器编写Boost单元测试。 我想启动我的服务器--start()在一个线程中启动服务器 - 打开一个客户端,连接它并尝试下载一个文件。
我这样做:
tftp_server* my_test_server;
BOOST_AUTO_TEST_SUITE (tftptest) // name of the test suite is tftptest
BOOST_AUTO_TEST_CASE (test1)
{
my_test_server = new tftp_server(69);
my_test_server->start();
FILE *in;
char buff[512];
if(!(in = popen("tftp", "w"))){
exit(1);
}
fputs ( "connect xx.xx.xx.xx\n", in );
fputs ( "mode binary\n", in );
fputs ( "mode\n", in );
fputs ( "get truc.txt\n", in );
while(fgets(buff, sizeof(buff), in)!=NULL)
printf("%s", buff);
sleep(10);
BOOST_CHECK(true);
}
1)创建并启动服务器,
2)使用系统TFTP客户端(我在OSX上),
3)等待10秒钟。
它不起作用:它只在测试完成后才执行客户端。
Running 1 test case...
Server started on port 69
Server running.
*** No errors detected
$ Using octet mode to transfer files.
Transfer timed out.
知道如何解决我的问题吗?
谢谢!
修改
void tftp_server::start()
{
LOG_INFO("Server running.", 0);
boost::thread bt(boost::bind(&boost::asio::io_service::run, &_io_service));
}
答案 0 :(得分:0)
我已经加上了,它确实有效。 感谢Arne Mertz。
if(!(in = popen("tftp", "w"))){
exit(1);
}
//...
while(fgets(buff, sizeof(buff), in)!=NULL)
printf("%s", buff);
pclose(in);