diff --git a/trunk/src/utest/srs_utest_protocol.cpp b/trunk/src/utest/srs_utest_protocol.cpp index 1a6a7a6e3..645e53296 100644 --- a/trunk/src/utest/srs_utest_protocol.cpp +++ b/trunk/src/utest/srs_utest_protocol.cpp @@ -95,6 +95,7 @@ MockBufferIO::MockBufferIO() { rtm = stm = SRS_UTIME_NO_TIMEOUT; rbytes = sbytes = 0; + in_err = out_err = srs_success; } MockBufferIO::~MockBufferIO() @@ -109,6 +110,10 @@ MockBufferIO* MockBufferIO::append(string data) srs_error_t MockBufferIO::read_fully(void* buf, size_t size, ssize_t* nread) { + if (in_err != srs_success) { + return srs_error_copy(in_err); + } + if (in_buffer.length() < (int)size) { return srs_error_new(ERROR_SOCKET_READ, "read"); } @@ -124,6 +129,10 @@ srs_error_t MockBufferIO::read_fully(void* buf, size_t size, ssize_t* nread) srs_error_t MockBufferIO::write(void* buf, size_t size, ssize_t* nwrite) { + if (out_err != srs_success) { + return srs_error_copy(out_err); + } + sbytes += size; if (nwrite) { *nwrite = size; @@ -165,6 +174,10 @@ int64_t MockBufferIO::get_send_bytes() srs_error_t MockBufferIO::writev(const iovec *iov, int iov_size, ssize_t* nwrite) { srs_error_t err = srs_success; + + if (out_err != srs_success) { + return srs_error_copy(out_err); + } ssize_t total = 0; for (int i = 0; i size; + payload = this->payload; + this->payload = NULL; return srs_success; } }; @@ -63,12 +81,16 @@ VOID TEST(ProtoStackTest, PacketEncode) char* payload; if (true) { - MockErrorPacket pkt; + MockPacket pkt; + pkt.size = 1024; + HELPER_EXPECT_FAILED(pkt.encode(size, payload)); } if (true) { - MockErrorPacket pkt; + MockPacket pkt; + pkt.size = 1024; + SrsBuffer b; HELPER_EXPECT_FAILED(pkt.decode(&b)); } @@ -81,7 +103,9 @@ VOID TEST(ProtoStackTest, PacketEncode) } if (true) { - MockErrorPacket pkt; + MockPacket pkt; + pkt.size = 1024; + EXPECT_EQ(1024, pkt.get_size()); } } @@ -192,7 +216,8 @@ VOID TEST(ProtoStackTest, SendPacketsError) MockBufferIO io; SrsProtocol p(&io); - SrsPacket* pkt = new MockErrorPacket(); + MockPacket* pkt = new MockPacket(); + pkt->size = 1024; HELPER_EXPECT_FAILED(p.send_and_free_packet(pkt, 1)); } @@ -208,11 +233,39 @@ VOID TEST(ProtoStackTest, SendPacketsError) MockBufferIO io; SrsProtocol p(&io); - SrsPacket* pkt = new MockPayloadErrorPacket(); + MockPacket2* pkt = new MockPacket2(); + pkt->size = 1024; HELPER_EXPECT_SUCCESS(p.send_and_free_packet(pkt, 1)); } } +VOID TEST(ProtoStackTest, SendHugePacket) +{ + srs_error_t err; + + if (true) { + MockBufferIO io; + SrsProtocol p(&io); + + MockPacket2* pkt = new MockPacket2(); + pkt->size = 1024; + pkt->payload = new char[1024]; + HELPER_EXPECT_SUCCESS(p.send_and_free_packet(pkt, 1)); + } + + if (true) { + MockBufferIO io; + SrsProtocol p(&io); + + MockPacket2* pkt = new MockPacket2(); + pkt->size = 16; + pkt->payload = new char[16]; + + io.out_err = srs_error_new(1, "fail"); + HELPER_EXPECT_FAILED(p.send_and_free_packet(pkt, 1)); + } +} + VOID TEST(ProtoStackTest, SendZeroMessages) { srs_error_t err;