簡體   English   中英

在Boost單元測試中使用管道

[英]Using pipes in Boost unit tests

我正在嘗試為服務器編寫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));
}

我添加了close,它可以正常工作。 感謝Arne Mertz。

if(!(in = popen("tftp", "w"))){
    exit(1);
}

//...

while(fgets(buff, sizeof(buff), in)!=NULL)
    printf("%s", buff);

pclose(in);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM