mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
Refactor: Extract SrsNetworkKbps from SrsKbps. v5.0.53
This commit is contained in:
parent
937605b18c
commit
2c259bd95b
20 changed files with 949 additions and 662 deletions
|
@ -6042,387 +6042,6 @@ VOID TEST(ProtocolHTTPTest, ParseHTTPMessage)
|
|||
}
|
||||
}
|
||||
|
||||
VOID TEST(ProtocolKbpsTest, Connections)
|
||||
{
|
||||
if (true) {
|
||||
MockWallClock* clock = new MockWallClock();
|
||||
SrsAutoFree(MockWallClock, clock);
|
||||
MockStatistic* io = new MockStatistic();
|
||||
SrsAutoFree(MockStatistic, io);
|
||||
|
||||
SrsKbps* kbps = new SrsKbps(clock->set_clock(0));
|
||||
SrsAutoFree(SrsKbps, kbps);
|
||||
kbps->set_io(io, io);
|
||||
|
||||
// No data, 0kbps.
|
||||
kbps->sample();
|
||||
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps());
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps_30s());
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps_5m());
|
||||
|
||||
EXPECT_EQ(0, kbps->get_send_kbps());
|
||||
EXPECT_EQ(0, kbps->get_send_kbps_30s());
|
||||
EXPECT_EQ(0, kbps->get_send_kbps_5m());
|
||||
|
||||
// 800kbps in 30s.
|
||||
clock->set_clock(30 * 1000 * SRS_UTIME_MILLISECONDS);
|
||||
io->set_in(30 * 100 * 1000)->set_out(30 * 100 * 1000);
|
||||
kbps->sample();
|
||||
|
||||
EXPECT_EQ(800, kbps->get_recv_kbps());
|
||||
EXPECT_EQ(800, kbps->get_recv_kbps_30s());
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps_5m());
|
||||
|
||||
EXPECT_EQ(800, kbps->get_send_kbps());
|
||||
EXPECT_EQ(800, kbps->get_send_kbps_30s());
|
||||
EXPECT_EQ(0, kbps->get_send_kbps_5m());
|
||||
|
||||
// 800kbps in 300s.
|
||||
clock->set_clock(330 * 1000 * SRS_UTIME_MILLISECONDS);
|
||||
io->set_in(330 * 100 * 1000)->set_out(330 * 100 * 1000);
|
||||
kbps->sample();
|
||||
|
||||
EXPECT_EQ(800, kbps->get_recv_kbps());
|
||||
EXPECT_EQ(800, kbps->get_recv_kbps_30s());
|
||||
EXPECT_EQ(800, kbps->get_recv_kbps_5m());
|
||||
|
||||
EXPECT_EQ(800, kbps->get_send_kbps());
|
||||
EXPECT_EQ(800, kbps->get_send_kbps_30s());
|
||||
EXPECT_EQ(800, kbps->get_send_kbps_5m());
|
||||
}
|
||||
|
||||
if (true) {
|
||||
MockWallClock* clock = new MockWallClock();
|
||||
SrsAutoFree(MockWallClock, clock);
|
||||
MockStatistic* io = new MockStatistic();
|
||||
SrsAutoFree(MockStatistic, io);
|
||||
|
||||
SrsKbps* kbps = new SrsKbps(clock->set_clock(0));
|
||||
SrsAutoFree(SrsKbps, kbps);
|
||||
kbps->set_io(io, io);
|
||||
|
||||
// No data, 0kbps.
|
||||
kbps->sample();
|
||||
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps());
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps_30s());
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps_5m());
|
||||
|
||||
EXPECT_EQ(0, kbps->get_send_kbps());
|
||||
EXPECT_EQ(0, kbps->get_send_kbps_30s());
|
||||
EXPECT_EQ(0, kbps->get_send_kbps_5m());
|
||||
|
||||
// 800kbps in 30s.
|
||||
clock->set_clock(30 * 1000 * SRS_UTIME_MILLISECONDS);
|
||||
io->set_in(30 * 100 * 1000);
|
||||
kbps->sample();
|
||||
|
||||
EXPECT_EQ(800, kbps->get_recv_kbps());
|
||||
EXPECT_EQ(800, kbps->get_recv_kbps_30s());
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps_5m());
|
||||
|
||||
EXPECT_EQ(0, kbps->get_send_kbps());
|
||||
EXPECT_EQ(0, kbps->get_send_kbps_30s());
|
||||
EXPECT_EQ(0, kbps->get_send_kbps_5m());
|
||||
|
||||
// 800kbps in 300s.
|
||||
clock->set_clock(330 * 1000 * SRS_UTIME_MILLISECONDS);
|
||||
io->set_in(330 * 100 * 1000);
|
||||
kbps->sample();
|
||||
|
||||
EXPECT_EQ(800, kbps->get_recv_kbps());
|
||||
EXPECT_EQ(800, kbps->get_recv_kbps_30s());
|
||||
EXPECT_EQ(800, kbps->get_recv_kbps_5m());
|
||||
|
||||
EXPECT_EQ(0, kbps->get_send_kbps());
|
||||
EXPECT_EQ(0, kbps->get_send_kbps_30s());
|
||||
EXPECT_EQ(0, kbps->get_send_kbps_5m());
|
||||
}
|
||||
|
||||
if (true) {
|
||||
MockWallClock* clock = new MockWallClock();
|
||||
SrsAutoFree(MockWallClock, clock);
|
||||
MockStatistic* io = new MockStatistic();
|
||||
SrsAutoFree(MockStatistic, io);
|
||||
|
||||
SrsKbps* kbps = new SrsKbps(clock->set_clock(0));
|
||||
SrsAutoFree(SrsKbps, kbps);
|
||||
kbps->set_io(io, io);
|
||||
|
||||
// No data, 0kbps.
|
||||
kbps->sample();
|
||||
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps());
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps_30s());
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps_5m());
|
||||
|
||||
EXPECT_EQ(0, kbps->get_send_kbps());
|
||||
EXPECT_EQ(0, kbps->get_send_kbps_30s());
|
||||
EXPECT_EQ(0, kbps->get_send_kbps_5m());
|
||||
|
||||
// 800kbps in 30s.
|
||||
clock->set_clock(30 * 1000 * SRS_UTIME_MILLISECONDS);
|
||||
io->set_out(30 * 100 * 1000);
|
||||
kbps->sample();
|
||||
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps());
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps_30s());
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps_5m());
|
||||
|
||||
EXPECT_EQ(800, kbps->get_send_kbps());
|
||||
EXPECT_EQ(800, kbps->get_send_kbps_30s());
|
||||
EXPECT_EQ(0, kbps->get_send_kbps_5m());
|
||||
|
||||
// 800kbps in 300s.
|
||||
clock->set_clock(330 * 1000 * SRS_UTIME_MILLISECONDS);
|
||||
io->set_out(330 * 100 * 1000);
|
||||
kbps->sample();
|
||||
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps());
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps_30s());
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps_5m());
|
||||
|
||||
EXPECT_EQ(800, kbps->get_send_kbps());
|
||||
EXPECT_EQ(800, kbps->get_send_kbps_30s());
|
||||
EXPECT_EQ(800, kbps->get_send_kbps_5m());
|
||||
}
|
||||
}
|
||||
|
||||
VOID TEST(ProtocolKbpsTest, Delta)
|
||||
{
|
||||
if (true) {
|
||||
MockWallClock* clock = new MockWallClock();
|
||||
SrsAutoFree(MockWallClock, clock);
|
||||
MockStatistic* io = new MockStatistic();
|
||||
SrsAutoFree(MockStatistic, io);
|
||||
|
||||
SrsNetworkDelta* conn = new SrsNetworkDelta();
|
||||
SrsAutoFree(SrsNetworkDelta, conn);
|
||||
conn->set_io(io, io);
|
||||
|
||||
// No data.
|
||||
ISrsKbpsDelta* delta = dynamic_cast<ISrsKbpsDelta*>(conn);
|
||||
int64_t in, out;
|
||||
delta->remark(&in, &out);
|
||||
EXPECT_EQ(0, in);
|
||||
EXPECT_EQ(0, out);
|
||||
|
||||
// 800kb.
|
||||
io->set_in(100 * 1000)->set_out(100 * 1000);
|
||||
delta->remark(&in, &out);
|
||||
EXPECT_EQ(100 * 1000, in);
|
||||
EXPECT_EQ(100 * 1000, out);
|
||||
|
||||
// No data.
|
||||
delta->remark(&in, &out);
|
||||
EXPECT_EQ(0, in);
|
||||
EXPECT_EQ(0, out);
|
||||
}
|
||||
|
||||
if (true) {
|
||||
MockWallClock* clock = new MockWallClock();
|
||||
SrsAutoFree(MockWallClock, clock);
|
||||
MockStatistic* io = new MockStatistic();
|
||||
SrsAutoFree(MockStatistic, io);
|
||||
|
||||
SrsNetworkDelta* conn = new SrsNetworkDelta();
|
||||
SrsAutoFree(SrsNetworkDelta, conn);
|
||||
conn->set_io(io, io);
|
||||
|
||||
// No data.
|
||||
ISrsKbpsDelta* delta = dynamic_cast<ISrsKbpsDelta*>(conn);
|
||||
int64_t in, out;
|
||||
delta->remark(&in, &out);
|
||||
EXPECT_EQ(0, in);
|
||||
EXPECT_EQ(0, out);
|
||||
|
||||
// 800kb.
|
||||
io->set_in(100 * 1000)->set_out(100 * 1000);
|
||||
delta->remark(&in, &out);
|
||||
EXPECT_EQ(100 * 1000, in);
|
||||
EXPECT_EQ(100 * 1000, out);
|
||||
|
||||
// Kbps without io, gather delta.
|
||||
SrsKbps* kbps = new SrsKbps(clock->set_clock(0));
|
||||
SrsAutoFree(SrsKbps, kbps);
|
||||
kbps->set_io(NULL, NULL);
|
||||
|
||||
// No data, 0kbps.
|
||||
kbps->sample();
|
||||
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps());
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps_30s());
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps_5m());
|
||||
|
||||
EXPECT_EQ(0, kbps->get_send_kbps());
|
||||
EXPECT_EQ(0, kbps->get_send_kbps_30s());
|
||||
EXPECT_EQ(0, kbps->get_send_kbps_5m());
|
||||
|
||||
// 800kbps in 30s.
|
||||
clock->set_clock(30 * 1000 * SRS_UTIME_MILLISECONDS);
|
||||
kbps->add_delta(30 * in, 30 * out);
|
||||
kbps->sample();
|
||||
|
||||
EXPECT_EQ(800, kbps->get_recv_kbps());
|
||||
EXPECT_EQ(800, kbps->get_recv_kbps_30s());
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps_5m());
|
||||
|
||||
EXPECT_EQ(800, kbps->get_send_kbps());
|
||||
EXPECT_EQ(800, kbps->get_send_kbps_30s());
|
||||
EXPECT_EQ(0, kbps->get_send_kbps_5m());
|
||||
}
|
||||
}
|
||||
|
||||
VOID TEST(ProtocolKbpsTest, RAWStatistic)
|
||||
{
|
||||
if (true) {
|
||||
MockWallClock* clock = new MockWallClock();
|
||||
SrsAutoFree(MockWallClock, clock);
|
||||
MockStatistic* io = new MockStatistic();
|
||||
SrsAutoFree(MockStatistic, io);
|
||||
|
||||
SrsKbps* conn = new SrsKbps(clock->set_clock(0));
|
||||
SrsAutoFree(SrsKbps, conn);
|
||||
conn->set_io(io, io);
|
||||
|
||||
SrsKbps* kbps = new SrsKbps(clock->set_clock(0));
|
||||
SrsAutoFree(SrsKbps, kbps);
|
||||
kbps->set_io(conn, conn);
|
||||
|
||||
// No data, 0kbps.
|
||||
kbps->sample();
|
||||
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps());
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps_30s());
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps_5m());
|
||||
|
||||
EXPECT_EQ(0, kbps->get_send_kbps());
|
||||
EXPECT_EQ(0, kbps->get_send_kbps_30s());
|
||||
EXPECT_EQ(0, kbps->get_send_kbps_5m());
|
||||
|
||||
// 800kbps in 30s.
|
||||
clock->set_clock(30 * 1000 * SRS_UTIME_MILLISECONDS);
|
||||
io->set_out(30 * 100 * 1000);
|
||||
kbps->sample();
|
||||
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps());
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps_30s());
|
||||
EXPECT_EQ(0, kbps->get_recv_kbps_5m());
|
||||
|
||||
EXPECT_EQ(800, kbps->get_send_kbps());
|
||||
EXPECT_EQ(800, kbps->get_send_kbps_30s());
|
||||
EXPECT_EQ(0, kbps->get_send_kbps_5m());
|
||||
}
|
||||
|
||||
if (true) {
|
||||
MockWallClock* clock = new MockWallClock();
|
||||
SrsAutoFree(MockWallClock, clock);
|
||||
|
||||
SrsKbps* kbps = new SrsKbps(clock->set_clock(0));
|
||||
SrsAutoFree(SrsKbps, kbps);
|
||||
|
||||
// No io, no data.
|
||||
kbps->set_io(NULL, NULL);
|
||||
EXPECT_EQ(0, kbps->get_recv_bytes());
|
||||
EXPECT_EQ(0, kbps->get_send_bytes());
|
||||
|
||||
// With io, zero data.
|
||||
MockStatistic* io = new MockStatistic();
|
||||
SrsAutoFree(MockStatistic, io);
|
||||
|
||||
kbps->set_io(io, io);
|
||||
EXPECT_EQ(0, kbps->get_recv_bytes());
|
||||
EXPECT_EQ(0, kbps->get_send_bytes());
|
||||
|
||||
// With io with data.
|
||||
io->set_in(100 * 1000)->set_out(100 * 1000);
|
||||
EXPECT_EQ(100 * 1000, kbps->get_recv_bytes());
|
||||
EXPECT_EQ(100 * 1000, kbps->get_send_bytes());
|
||||
|
||||
// No io, cached data.
|
||||
kbps->set_io(NULL, NULL);
|
||||
EXPECT_EQ(100 * 1000, kbps->get_recv_bytes());
|
||||
EXPECT_EQ(100 * 1000, kbps->get_send_bytes());
|
||||
|
||||
// Use the same IO, but as a fresh io.
|
||||
kbps->set_io(io, io);
|
||||
EXPECT_EQ(100 * 1000, kbps->get_recv_bytes());
|
||||
EXPECT_EQ(100 * 1000, kbps->get_send_bytes());
|
||||
|
||||
io->set_in(150 * 1000)->set_out(150 * 1000);
|
||||
EXPECT_EQ(150 * 1000, kbps->get_recv_bytes());
|
||||
EXPECT_EQ(150 * 1000, kbps->get_send_bytes());
|
||||
|
||||
// No io, cached data.
|
||||
kbps->set_io(NULL, NULL);
|
||||
EXPECT_EQ(150 * 1000, kbps->get_recv_bytes());
|
||||
EXPECT_EQ(150 * 1000, kbps->get_send_bytes());
|
||||
}
|
||||
}
|
||||
|
||||
VOID TEST(ProtocolKbpsTest, WriteLargeIOVs)
|
||||
{
|
||||
srs_error_t err;
|
||||
|
||||
if (true) {
|
||||
iovec iovs[1];
|
||||
iovs[0].iov_base = (char*)"Hello";
|
||||
iovs[0].iov_len = 5;
|
||||
|
||||
MockBufferIO io;
|
||||
ssize_t nn = 0;
|
||||
HELPER_EXPECT_SUCCESS(srs_write_large_iovs(&io, iovs, 1, &nn));
|
||||
EXPECT_EQ(5, nn);
|
||||
EXPECT_EQ(5, io.sbytes);
|
||||
}
|
||||
|
||||
if (true) {
|
||||
iovec iovs[1024];
|
||||
int nn_iovs = (int)(sizeof(iovs)/sizeof(iovec));
|
||||
for (int i = 0; i < nn_iovs; i++) {
|
||||
iovs[i].iov_base = (char*)"Hello";
|
||||
iovs[i].iov_len = 5;
|
||||
}
|
||||
|
||||
MockBufferIO io;
|
||||
ssize_t nn = 0;
|
||||
HELPER_EXPECT_SUCCESS(srs_write_large_iovs(&io, iovs, nn_iovs, &nn));
|
||||
EXPECT_EQ(5 * nn_iovs, nn);
|
||||
EXPECT_EQ(5 * nn_iovs, io.sbytes);
|
||||
}
|
||||
|
||||
if (true) {
|
||||
iovec iovs[1025];
|
||||
int nn_iovs = (int)(sizeof(iovs)/sizeof(iovec));
|
||||
for (int i = 0; i < nn_iovs; i++) {
|
||||
iovs[i].iov_base = (char*)"Hello";
|
||||
iovs[i].iov_len = 5;
|
||||
}
|
||||
|
||||
MockBufferIO io;
|
||||
ssize_t nn = 0;
|
||||
HELPER_EXPECT_SUCCESS(srs_write_large_iovs(&io, iovs, nn_iovs, &nn));
|
||||
EXPECT_EQ(5 * nn_iovs, nn);
|
||||
EXPECT_EQ(5 * nn_iovs, io.sbytes);
|
||||
}
|
||||
|
||||
if (true) {
|
||||
iovec iovs[4096];
|
||||
int nn_iovs = (int)(sizeof(iovs)/sizeof(iovec));
|
||||
for (int i = 0; i < nn_iovs; i++) {
|
||||
iovs[i].iov_base = (char*)"Hello";
|
||||
iovs[i].iov_len = 5;
|
||||
}
|
||||
|
||||
MockBufferIO io;
|
||||
ssize_t nn = 0;
|
||||
HELPER_EXPECT_SUCCESS(srs_write_large_iovs(&io, iovs, nn_iovs, &nn));
|
||||
EXPECT_EQ(5 * nn_iovs, nn);
|
||||
EXPECT_EQ(5 * nn_iovs, io.sbytes);
|
||||
}
|
||||
}
|
||||
|
||||
VOID TEST(ProtocolProtobufTest, VarintsSize)
|
||||
{
|
||||
EXPECT_EQ(1, SrsProtobufVarints::sizeof_varint( 0x00));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue