Ejemplo n.º 1
0
TEST_F(StreamSocketTest, StreamSocketReceiveLineInString)
{
    StreamSocket stream;
    EXPECT_TRUE(stream.Create(AF_INET));
    EXPECT_FALSE(stream.Connect(SocketAddressInet("0.0.0.0:0")));
    EXPECT_TRUE(stream.Connect(m_address)) << m_address.ToString();
    struct timeval tv;
    tv.tv_sec = 5;
    tv.tv_usec = 0;
    EXPECT_TRUE(stream.WaitWriteable(&tv, true));
    std::string sent = "12345\n";
    EXPECT_TRUE(stream.SendAll(sent.data(), sent.size()));
    tv.tv_sec = 5;
    tv.tv_usec = 0;
    EXPECT_TRUE(stream.WaitReadable(&tv, true));
    std::string received;
    EXPECT_TRUE(stream.ReceiveLine(&received));
    EXPECT_EQ(sent, received);

    // Send all with timeout
    tv.tv_sec = 5;
    tv.tv_usec = 0;
    size_t sent_size;
    EXPECT_TRUE(stream.SendAll(sent.data(), sent.size(), &sent_size, &tv));
    EXPECT_EQ(sent.size(), sent_size);
    // peek size with 2
    EXPECT_TRUE(stream.ReceiveLine(&received, 2));
    EXPECT_EQ(sent, received);
}
Ejemplo n.º 2
0
TEST_F(StreamSocketTest, StreamSocketReceiveAll)
{
    StreamSocket stream;
    EXPECT_TRUE(stream.Create(AF_INET));
    EXPECT_TRUE(stream.Connect(m_address)) << m_address.ToString();
    std::string sent = "12345\n";
    EXPECT_TRUE(stream.SendAll(sent.data(), sent.size()));
    char buffer1[6], buffer2[5];
    size_t buffer1_size = 6;
    size_t buffer2_size = 5;
    size_t received_size;
    EXPECT_TRUE(stream.ReceiveAll(buffer1, buffer1_size));
    EXPECT_STREQ(sent.data(), buffer1);

    // with timeout
    EXPECT_TRUE(stream.SendAll(sent.data(), sent.size()));
    struct timeval tv;
    tv.tv_sec = 5;
    tv.tv_usec = 0;
    EXPECT_TRUE(stream.ReceiveAll(buffer1, buffer1_size, &received_size, &tv));
    EXPECT_EQ(6U, received_size);
    EXPECT_STREQ(sent.data(), buffer1);

    EXPECT_TRUE(stream.SendAll(sent.data(), sent.size()));
    EXPECT_TRUE(stream.ReceiveAll(buffer2, buffer2_size, &received_size));
    EXPECT_EQ(5U, received_size);
    for (size_t i = 0; i < received_size; ++i) {
        EXPECT_EQ(sent[i], buffer2[i]);
    }
}
Ejemplo n.º 3
0
    void IoThread()
    {
        StreamSocket acceptor;
        EXPECT_TRUE(m_listener.Accept(&acceptor));
        SocketAddressInet peer_address;
        EXPECT_TRUE(acceptor.GetPeerAddress(&peer_address));
#if __unix__
        int keep_alive;
        int idle;
        int interval;
        int count;
        EXPECT_TRUE(acceptor.SetTcpKeepAliveOption(14400, 150, 5));
        EXPECT_TRUE(acceptor.GetOption(SOL_SOCKET, SO_KEEPALIVE, &keep_alive));
        EXPECT_EQ(1, keep_alive);
        EXPECT_TRUE(acceptor.GetOption(SOL_TCP, TCP_KEEPIDLE, &idle));
        EXPECT_EQ(14400, idle);
        EXPECT_TRUE(acceptor.GetOption(SOL_TCP, TCP_KEEPINTVL, &interval));
        EXPECT_EQ(150, interval);
        EXPECT_TRUE(acceptor.GetOption(SOL_TCP, TCP_KEEPCNT, &count));
        EXPECT_EQ(5, count);
#endif
        std::string line;
        while (acceptor.ReceiveLine(&line) && !line.empty())
        {
            acceptor.SendAll(line.data(), line.size());
        }
    }
Ejemplo n.º 4
0
TEST_F(StreamSocketTest, StreamSocketReceiveLineInEqualSizeBuffer)
{
    StreamSocket stream;
    EXPECT_TRUE(stream.Create(AF_INET));
    EXPECT_TRUE(stream.Connect(m_address)) << m_address.ToString();
    std::string sent = "12345\n";
    char buffer[6];
    size_t received_size;
    size_t buffer_size = 6;
    EXPECT_TRUE(stream.SendAll(sent.data(), sent.size()));
    EXPECT_TRUE(stream.ReceiveLine(buffer, buffer_size, &received_size));
    EXPECT_EQ(6U, received_size);
    EXPECT_STREQ(sent.data(), buffer);
}
Ejemplo n.º 5
0
TEST_F(StreamSocketTest, StreamSocketReceiveLineInLargerSizeBuffer)
{
    StreamSocket stream;
    EXPECT_TRUE(stream.Create(AF_INET));
    EXPECT_TRUE(stream.Connect(m_address)) << m_address.ToString();
    std::string sent = "12345\n";
    char buffer[10];
    size_t buffer_size = 10;
    size_t received_size;
    EXPECT_TRUE(stream.SendAll(sent.data(), sent.size()));
    EXPECT_TRUE(stream.ReceiveLine(buffer, buffer_size, &received_size));
    EXPECT_EQ(6U, received_size);
    for (size_t i = 0; i < received_size; ++i) {
        EXPECT_EQ(sent[i], buffer[i]);
    }
}
Ejemplo n.º 6
0
TEST_F(StreamSocketTest, StreamSocketReceiveLineInSmallerSizeBuffer)
{
    StreamSocket stream;
    EXPECT_TRUE(stream.Create(AF_INET));
    EXPECT_FALSE(stream.Connect(SocketAddressInet("0.0.0.0:0")));
    EXPECT_TRUE(stream.Connect(m_address)) << m_address.ToString();
    std::string sent = "12345\n";
    char buffer[5];
    size_t buffer_size = 5;
    size_t received_size;
    EXPECT_TRUE(stream.SendAll(sent.data(), sent.size()));
    EXPECT_FALSE(stream.ReceiveLine(buffer, buffer_size, &received_size));
    EXPECT_EQ(5U, received_size);
    for (size_t i = 0; i < received_size; ++i) {
        EXPECT_EQ(sent[i], buffer[i]);
    }
    // receive until '\n'
    EXPECT_TRUE(stream.ReceiveLine(buffer, buffer_size, &received_size));
    EXPECT_EQ(1U, received_size);
    EXPECT_EQ('\n', buffer[0]);
}
Ejemplo n.º 7
0
TEST_F(StreamSocketTest, ConnectWithTimeout)
{
    StreamSocket stream;
    EXPECT_TRUE(stream.Create(AF_INET));
    EXPECT_FALSE(stream.Connect(SocketAddressInet("0.0.0.0:0"), 10));

    bool blocking = true;

    // For unknown reason, if we reuse failed socket, the following Connect
    // will faile with ECONNRESET, create a new socket here.
    EXPECT_TRUE(stream.Create(AF_INET));
    EXPECT_TRUE(stream.GetBlocking(&blocking));
    EXPECT_TRUE(blocking);

    EXPECT_TRUE(stream.Connect(m_address, 10));

    EXPECT_TRUE(stream.GetBlocking(&blocking));
    EXPECT_TRUE(blocking);

    EXPECT_TRUE(stream.SendAll("\n", 1));
}