mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
Cover protocol stack RTMP. 3.0.63
This commit is contained in:
parent
918a2943c9
commit
ce8f778fe6
3 changed files with 85 additions and 10 deletions
|
@ -95,6 +95,7 @@ MockBufferIO::MockBufferIO()
|
||||||
{
|
{
|
||||||
rtm = stm = SRS_UTIME_NO_TIMEOUT;
|
rtm = stm = SRS_UTIME_NO_TIMEOUT;
|
||||||
rbytes = sbytes = 0;
|
rbytes = sbytes = 0;
|
||||||
|
in_err = out_err = srs_success;
|
||||||
}
|
}
|
||||||
|
|
||||||
MockBufferIO::~MockBufferIO()
|
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)
|
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) {
|
if (in_buffer.length() < (int)size) {
|
||||||
return srs_error_new(ERROR_SOCKET_READ, "read");
|
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)
|
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;
|
sbytes += size;
|
||||||
if (nwrite) {
|
if (nwrite) {
|
||||||
*nwrite = size;
|
*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 MockBufferIO::writev(const iovec *iov, int iov_size, ssize_t* nwrite)
|
||||||
{
|
{
|
||||||
srs_error_t err = srs_success;
|
srs_error_t err = srs_success;
|
||||||
|
|
||||||
|
if (out_err != srs_success) {
|
||||||
|
return srs_error_copy(out_err);
|
||||||
|
}
|
||||||
|
|
||||||
ssize_t total = 0;
|
ssize_t total = 0;
|
||||||
for (int i = 0; i <iov_size; i++) {
|
for (int i = 0; i <iov_size; i++) {
|
||||||
|
@ -187,6 +200,10 @@ srs_error_t MockBufferIO::writev(const iovec *iov, int iov_size, ssize_t* nwrite
|
||||||
|
|
||||||
srs_error_t MockBufferIO::read(void* buf, size_t size, ssize_t* nread)
|
srs_error_t MockBufferIO::read(void* buf, size_t size, ssize_t* nread)
|
||||||
{
|
{
|
||||||
|
if (in_err != srs_success) {
|
||||||
|
return srs_error_copy(in_err);
|
||||||
|
}
|
||||||
|
|
||||||
if (in_buffer.length() <= 0) {
|
if (in_buffer.length() <= 0) {
|
||||||
return srs_error_new(ERROR_SOCKET_READ, "read");
|
return srs_error_new(ERROR_SOCKET_READ, "read");
|
||||||
}
|
}
|
||||||
|
@ -199,6 +216,7 @@ srs_error_t MockBufferIO::read(void* buf, size_t size, ssize_t* nread)
|
||||||
*nread = available;
|
*nread = available;
|
||||||
}
|
}
|
||||||
in_buffer.erase(available);
|
in_buffer.erase(available);
|
||||||
|
|
||||||
return srs_success;
|
return srs_success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -79,6 +79,10 @@ public:
|
||||||
SrsSimpleStream in_buffer;
|
SrsSimpleStream in_buffer;
|
||||||
// data buffer for socket send.
|
// data buffer for socket send.
|
||||||
SrsSimpleStream out_buffer;
|
SrsSimpleStream out_buffer;
|
||||||
|
public:
|
||||||
|
// Mock error for io.
|
||||||
|
srs_error_t in_err;
|
||||||
|
srs_error_t out_err;
|
||||||
public:
|
public:
|
||||||
MockBufferIO();
|
MockBufferIO();
|
||||||
virtual ~MockBufferIO();
|
virtual ~MockBufferIO();
|
||||||
|
|
|
@ -38,19 +38,37 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
class MockErrorPacket : public SrsPacket
|
class MockPacket : public SrsPacket
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
|
int size;
|
||||||
|
public:
|
||||||
|
MockPacket() {
|
||||||
|
size = 0;
|
||||||
|
}
|
||||||
|
virtual ~MockPacket() {
|
||||||
|
}
|
||||||
protected:
|
protected:
|
||||||
virtual int get_size() {
|
virtual int get_size() {
|
||||||
return 1024;
|
return size;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class MockPayloadErrorPacket : public SrsPacket
|
class MockPacket2 : public MockPacket
|
||||||
{
|
{
|
||||||
protected:
|
public:
|
||||||
|
char* payload;
|
||||||
|
public:
|
||||||
|
MockPacket2() {
|
||||||
|
payload = NULL;
|
||||||
|
}
|
||||||
|
virtual ~MockPacket2() {
|
||||||
|
srs_freep(payload);
|
||||||
|
}
|
||||||
virtual srs_error_t encode(int& size, char*& payload) {
|
virtual srs_error_t encode(int& size, char*& payload) {
|
||||||
size = 1024;
|
size = this->size;
|
||||||
|
payload = this->payload;
|
||||||
|
this->payload = NULL;
|
||||||
return srs_success;
|
return srs_success;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -63,12 +81,16 @@ VOID TEST(ProtoStackTest, PacketEncode)
|
||||||
char* payload;
|
char* payload;
|
||||||
|
|
||||||
if (true) {
|
if (true) {
|
||||||
MockErrorPacket pkt;
|
MockPacket pkt;
|
||||||
|
pkt.size = 1024;
|
||||||
|
|
||||||
HELPER_EXPECT_FAILED(pkt.encode(size, payload));
|
HELPER_EXPECT_FAILED(pkt.encode(size, payload));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (true) {
|
if (true) {
|
||||||
MockErrorPacket pkt;
|
MockPacket pkt;
|
||||||
|
pkt.size = 1024;
|
||||||
|
|
||||||
SrsBuffer b;
|
SrsBuffer b;
|
||||||
HELPER_EXPECT_FAILED(pkt.decode(&b));
|
HELPER_EXPECT_FAILED(pkt.decode(&b));
|
||||||
}
|
}
|
||||||
|
@ -81,7 +103,9 @@ VOID TEST(ProtoStackTest, PacketEncode)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (true) {
|
if (true) {
|
||||||
MockErrorPacket pkt;
|
MockPacket pkt;
|
||||||
|
pkt.size = 1024;
|
||||||
|
|
||||||
EXPECT_EQ(1024, pkt.get_size());
|
EXPECT_EQ(1024, pkt.get_size());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -192,7 +216,8 @@ VOID TEST(ProtoStackTest, SendPacketsError)
|
||||||
MockBufferIO io;
|
MockBufferIO io;
|
||||||
SrsProtocol p(&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));
|
HELPER_EXPECT_FAILED(p.send_and_free_packet(pkt, 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -208,11 +233,39 @@ VOID TEST(ProtoStackTest, SendPacketsError)
|
||||||
MockBufferIO io;
|
MockBufferIO io;
|
||||||
SrsProtocol p(&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));
|
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)
|
VOID TEST(ProtoStackTest, SendZeroMessages)
|
||||||
{
|
{
|
||||||
srs_error_t err;
|
srs_error_t err;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue