mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
Tools: Update console and httpx.
This commit is contained in:
parent
2c259bd95b
commit
d877c0b76f
9 changed files with 3623 additions and 3598 deletions
47
trunk/3rdparty/httpx-static/main.go
vendored
47
trunk/3rdparty/httpx-static/main.go
vendored
|
@ -262,6 +262,12 @@ func run(ctx context.Context) error {
|
||||||
flag.Var(&skeys, "skey", "the SSL key for domain")
|
flag.Var(&skeys, "skey", "the SSL key for domain")
|
||||||
flag.Var(&scerts, "scert", "the SSL cert for domain")
|
flag.Var(&scerts, "scert", "the SSL cert for domain")
|
||||||
|
|
||||||
|
var trimSlashLimit int
|
||||||
|
var noRedirectIndex, trimLastSlash bool
|
||||||
|
flag.BoolVar(&noRedirectIndex, "no-redirect-index", false, "Whether serve with index.html without redirect.")
|
||||||
|
flag.BoolVar(&trimLastSlash, "trim-last-slash", false, "Whether trim last slash by HTTP redirect(302).")
|
||||||
|
flag.IntVar(&trimSlashLimit, "trim-slash-limit", 0, "Only trim last slash when got enough directories.")
|
||||||
|
|
||||||
flag.Usage = func() {
|
flag.Usage = func() {
|
||||||
fmt.Println(fmt.Sprintf("Usage: %v -t http -s https -d domains -r root -e cache -l lets -k ssk -c ssc -p proxy", os.Args[0]))
|
fmt.Println(fmt.Sprintf("Usage: %v -t http -s https -d domains -r root -e cache -l lets -k ssk -c ssc -p proxy", os.Args[0]))
|
||||||
fmt.Println(fmt.Sprintf(" "))
|
fmt.Println(fmt.Sprintf(" "))
|
||||||
|
@ -272,6 +278,8 @@ func run(ctx context.Context) error {
|
||||||
fmt.Println(fmt.Sprintf(" Listen at port for HTTPS server. Default: 0, disable HTTPS."))
|
fmt.Println(fmt.Sprintf(" Listen at port for HTTPS server. Default: 0, disable HTTPS."))
|
||||||
fmt.Println(fmt.Sprintf(" -r, -root string"))
|
fmt.Println(fmt.Sprintf(" -r, -root string"))
|
||||||
fmt.Println(fmt.Sprintf(" The www root path. Supports relative to argv[0]=%v. Default: ./html", path.Dir(os.Args[0])))
|
fmt.Println(fmt.Sprintf(" The www root path. Supports relative to argv[0]=%v. Default: ./html", path.Dir(os.Args[0])))
|
||||||
|
fmt.Println(fmt.Sprintf(" -no-redirect-index=bool"))
|
||||||
|
fmt.Println(fmt.Sprintf(" Whether serve with index.html without redirect. Default: false"))
|
||||||
fmt.Println(fmt.Sprintf(" -p, -proxy string"))
|
fmt.Println(fmt.Sprintf(" -p, -proxy string"))
|
||||||
fmt.Println(fmt.Sprintf(" Proxy path to backend. For example: http://127.0.0.1:8888/api/webrtc"))
|
fmt.Println(fmt.Sprintf(" Proxy path to backend. For example: http://127.0.0.1:8888/api/webrtc"))
|
||||||
fmt.Println(fmt.Sprintf(" Proxy path to backend. For example: http://127.0.0.1:8888/api/webrtc?modifyRequestHost=false"))
|
fmt.Println(fmt.Sprintf(" Proxy path to backend. For example: http://127.0.0.1:8888/api/webrtc?modifyRequestHost=false"))
|
||||||
|
@ -317,6 +325,12 @@ func run(ctx context.Context) error {
|
||||||
os.Exit(-1)
|
os.Exit(-1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If trim last slash, we should enable no redirect index, to avoid infinitely redirect.
|
||||||
|
if trimLastSlash {
|
||||||
|
noRedirectIndex = true
|
||||||
|
}
|
||||||
|
fmt.Println(fmt.Sprintf("Config trimLastSlash=%v, trimSlashLimit=%v, noRedirectIndex=%v", trimLastSlash, trimSlashLimit, noRedirectIndex))
|
||||||
|
|
||||||
var proxyUrls []*url.URL
|
var proxyUrls []*url.URL
|
||||||
proxies := make(map[string]*url.URL)
|
proxies := make(map[string]*url.URL)
|
||||||
for _, oproxy := range []string(oproxies) {
|
for _, oproxy := range []string(oproxies) {
|
||||||
|
@ -366,7 +380,34 @@ func run(ctx context.Context) error {
|
||||||
html = path.Join(path.Dir(os.Args[0]), html)
|
html = path.Join(path.Dir(os.Args[0]), html)
|
||||||
}
|
}
|
||||||
|
|
||||||
fs := http.FileServer(http.Dir(html))
|
serveFileNoRedirect := func (w http.ResponseWriter, r *http.Request, name string) {
|
||||||
|
upath := path.Join(html, path.Clean(r.URL.Path))
|
||||||
|
|
||||||
|
// Redirect without the last slash.
|
||||||
|
if trimLastSlash && r.URL.Path != "/" && strings.HasSuffix(r.URL.Path, "/") {
|
||||||
|
u := strings.TrimSuffix(r.URL.Path, "/")
|
||||||
|
if r.URL.RawQuery != "" {
|
||||||
|
u += "?" + r.URL.RawQuery
|
||||||
|
}
|
||||||
|
if strings.Count(u, "/") >= trimSlashLimit {
|
||||||
|
http.Redirect(w, r, u, http.StatusFound)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Append the index.html path if access a directory.
|
||||||
|
if noRedirectIndex && !strings.Contains(path.Base(upath), ".") {
|
||||||
|
if d, err := os.Stat(upath); err != nil {
|
||||||
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
} else if d.IsDir() {
|
||||||
|
upath = path.Join(upath, "index.html")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
http.ServeFile(w, r, upath)
|
||||||
|
}
|
||||||
|
|
||||||
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||||
oh.SetHeader(w)
|
oh.SetHeader(w)
|
||||||
|
|
||||||
|
@ -388,7 +429,7 @@ func run(ctx context.Context) error {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
fs.ServeHTTP(w, r)
|
serveFileNoRedirect(w, r, path.Join(html, path.Clean(r.URL.Path)))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -417,7 +458,7 @@ func run(ctx context.Context) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fs.ServeHTTP(w, r)
|
serveFileNoRedirect(w, r, path.Join(html, path.Clean(r.URL.Path)))
|
||||||
})
|
})
|
||||||
|
|
||||||
var protos []string
|
var protos []string
|
||||||
|
|
2
trunk/3rdparty/httpx-static/version.go
vendored
2
trunk/3rdparty/httpx-static/version.go
vendored
|
@ -35,7 +35,7 @@ func VersionMinor() int {
|
||||||
}
|
}
|
||||||
|
|
||||||
func VersionRevision() int {
|
func VersionRevision() int {
|
||||||
return 19
|
return 26
|
||||||
}
|
}
|
||||||
|
|
||||||
func Version() string {
|
func Version() string {
|
||||||
|
|
5
trunk/configure
vendored
5
trunk/configure
vendored
|
@ -387,9 +387,10 @@ fi
|
||||||
#
|
#
|
||||||
# utest, the unit-test cases of srs, base on gtest1.6
|
# utest, the unit-test cases of srs, base on gtest1.6
|
||||||
if [ $SRS_UTEST = YES ]; then
|
if [ $SRS_UTEST = YES ]; then
|
||||||
MODULE_FILES=("srs_utest" "srs_utest_amf0" "srs_utest_protocol" "srs_utest_kernel" "srs_utest_core"
|
MODULE_FILES=("srs_utest" "srs_utest_amf0" "srs_utest_kernel" "srs_utest_core"
|
||||||
"srs_utest_config" "srs_utest_rtmp" "srs_utest_http" "srs_utest_avc" "srs_utest_reload"
|
"srs_utest_config" "srs_utest_rtmp" "srs_utest_http" "srs_utest_avc" "srs_utest_reload"
|
||||||
"srs_utest_mp4" "srs_utest_service" "srs_utest_app" "srs_utest_rtc" "srs_utest_protocol2")
|
"srs_utest_mp4" "srs_utest_service" "srs_utest_app" "srs_utest_rtc"
|
||||||
|
"srs_utest_protocol")
|
||||||
if [[ $SRS_SRT == YES ]]; then
|
if [[ $SRS_SRT == YES ]]; then
|
||||||
MODULE_FILES+=("srs_utest_srt")
|
MODULE_FILES+=("srs_utest_srt")
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -578,6 +578,23 @@ scApp.filter('sc_filter_preview_url', ['$sc_server', function($sc_server){
|
||||||
};
|
};
|
||||||
}]);
|
}]);
|
||||||
|
|
||||||
|
scApp.filter('sc_filter_streamURL', function(){
|
||||||
|
return function(v){
|
||||||
|
if (!v || !v.url) return '';
|
||||||
|
|
||||||
|
const pos = v.url.lastIndexOf('/');
|
||||||
|
const stream = pos < 0 ? '' : v.url.substr(pos);
|
||||||
|
|
||||||
|
const pos2 = v.tcUrl.indexOf('?');
|
||||||
|
const tcUrl = pos2 < 0 ? v.tcUrl : v.tcUrl.substr(0, pos2);
|
||||||
|
|
||||||
|
let params = pos2 < 0 ? '' : v.tcUrl.substr(pos2);
|
||||||
|
if (params === '?vhost=__defaultVhost__' || params === '?domain=__defaultVhost__') params = '';
|
||||||
|
|
||||||
|
return `${tcUrl}${stream}${params}`;
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
// the sc nav is the nevigator
|
// the sc nav is the nevigator
|
||||||
scApp.provider("$sc_nav", function(){
|
scApp.provider("$sc_nav", function(){
|
||||||
this.$get = function(){
|
this.$get = function(){
|
||||||
|
|
|
@ -16,7 +16,8 @@
|
||||||
<th>Stream</th>
|
<th>Stream</th>
|
||||||
<th>类型</th>
|
<th>类型</th>
|
||||||
<th>时长</th>
|
<th>时长</th>
|
||||||
<th>TcUrl</th>
|
<th>URL</th>
|
||||||
|
<th>分类</th>
|
||||||
<th>管理</th>
|
<th>管理</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr ng-repeat="client in clients">
|
<tr ng-repeat="client in clients">
|
||||||
|
@ -26,7 +27,8 @@
|
||||||
<td><a href="javascript:void(0)" ng-click="gogogo('/streams/' + client.stream)">{{client.stream}}</a></td>
|
<td><a href="javascript:void(0)" ng-click="gogogo('/streams/' + client.stream)">{{client.stream}}</a></td>
|
||||||
<td>{{client.publish| sc_filter_ctype}}</td>
|
<td>{{client.publish| sc_filter_ctype}}</td>
|
||||||
<td>{{client.alive| sc_filter_time}}</td>
|
<td>{{client.alive| sc_filter_time}}</td>
|
||||||
<td>{{client.tcUrl}}</td>
|
<td>{{client |sc_filter_streamURL}}</td>
|
||||||
|
<td>{{client.type}}</td>
|
||||||
<td>
|
<td>
|
||||||
<a ng-click="kickoff(client)" href="javascript:void(0)">踢Ta</a>
|
<a ng-click="kickoff(client)" href="javascript:void(0)">踢Ta</a>
|
||||||
</td>
|
</td>
|
||||||
|
|
|
@ -16,7 +16,8 @@
|
||||||
<th>Stream</th>
|
<th>Stream</th>
|
||||||
<th>Type</th>
|
<th>Type</th>
|
||||||
<th>Duration</th>
|
<th>Duration</th>
|
||||||
<th>TcUrl</th>
|
<th>URL</th>
|
||||||
|
<th>Category</th>
|
||||||
<th>Manage</th>
|
<th>Manage</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr ng-repeat="client in clients">
|
<tr ng-repeat="client in clients">
|
||||||
|
@ -26,7 +27,8 @@
|
||||||
<td><a href="javascript:void(0)" ng-click="gogogo('/streams/' + client.stream)">{{client.stream}}</a></td>
|
<td><a href="javascript:void(0)" ng-click="gogogo('/streams/' + client.stream)">{{client.stream}}</a></td>
|
||||||
<td>{{client.publish| sc_filter_ctype}}</td>
|
<td>{{client.publish| sc_filter_ctype}}</td>
|
||||||
<td>{{client.alive| sc_filter_time}}</td>
|
<td>{{client.alive| sc_filter_time}}</td>
|
||||||
<td>{{client.tcUrl}}</td>
|
<td>{{client |sc_filter_streamURL}}</td>
|
||||||
|
<td>{{client.type}}</td>
|
||||||
<td>
|
<td>
|
||||||
<a ng-click="kickoff(client)" href="javascript:void(0)">Kickoff It</a>
|
<a ng-click="kickoff(client)" href="javascript:void(0)">Kickoff It</a>
|
||||||
</td>
|
</td>
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,707 +0,0 @@
|
||||||
//
|
|
||||||
// Copyright (c) 2013-2022 The SRS Authors
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: MIT or MulanPSL-2.0
|
|
||||||
//
|
|
||||||
#include <srs_utest_protocol2.hpp>
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
#include <srs_kernel_error.hpp>
|
|
||||||
#include <srs_core_autofree.hpp>
|
|
||||||
#include <srs_protocol_utility.hpp>
|
|
||||||
#include <srs_protocol_rtmp_msg_array.hpp>
|
|
||||||
#include <srs_protocol_rtmp_stack.hpp>
|
|
||||||
#include <srs_kernel_utility.hpp>
|
|
||||||
#include <srs_app_st.hpp>
|
|
||||||
#include <srs_protocol_amf0.hpp>
|
|
||||||
#include <srs_protocol_rtmp_stack.hpp>
|
|
||||||
#include <srs_protocol_http_conn.hpp>
|
|
||||||
#include <srs_protocol_protobuf.hpp>
|
|
||||||
#include <srs_kernel_buffer.hpp>
|
|
||||||
|
|
||||||
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);
|
|
||||||
|
|
||||||
SrsNetworkDelta* delta = new SrsNetworkDelta();
|
|
||||||
SrsAutoFree(SrsNetworkDelta, delta);
|
|
||||||
delta->set_io(io, io);
|
|
||||||
|
|
||||||
// No data, 0kbps.
|
|
||||||
kbps->add_delta(delta);
|
|
||||||
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->add_delta(delta);
|
|
||||||
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->add_delta(delta);
|
|
||||||
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);
|
|
||||||
|
|
||||||
SrsNetworkDelta* delta = new SrsNetworkDelta();
|
|
||||||
SrsAutoFree(SrsNetworkDelta, delta);
|
|
||||||
delta->set_io(io, io);
|
|
||||||
|
|
||||||
// No data, 0kbps.
|
|
||||||
kbps->add_delta(delta);
|
|
||||||
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->add_delta(delta);
|
|
||||||
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->add_delta(delta);
|
|
||||||
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);
|
|
||||||
|
|
||||||
SrsNetworkDelta* delta = new SrsNetworkDelta();
|
|
||||||
SrsAutoFree(SrsNetworkDelta, delta);
|
|
||||||
delta->set_io(io, io);
|
|
||||||
|
|
||||||
// No data, 0kbps.
|
|
||||||
kbps->add_delta(delta);
|
|
||||||
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->add_delta(delta);
|
|
||||||
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->add_delta(delta);
|
|
||||||
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* delta = new SrsNetworkDelta();
|
|
||||||
SrsAutoFree(SrsNetworkDelta, delta);
|
|
||||||
delta->set_io(io, io);
|
|
||||||
|
|
||||||
// No data.
|
|
||||||
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* delta = new SrsNetworkDelta();
|
|
||||||
SrsAutoFree(SrsNetworkDelta, delta);
|
|
||||||
delta->set_io(io, io);
|
|
||||||
|
|
||||||
// No data.
|
|
||||||
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);
|
|
||||||
|
|
||||||
// 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);
|
|
||||||
|
|
||||||
SrsNetworkDelta* delta = new SrsNetworkDelta();
|
|
||||||
SrsAutoFree(SrsNetworkDelta, delta);
|
|
||||||
delta->set_io(io, io);
|
|
||||||
|
|
||||||
SrsKbps* kbps = new SrsKbps(clock->set_clock(0));
|
|
||||||
SrsAutoFree(SrsKbps, kbps);
|
|
||||||
|
|
||||||
// No data, 0kbps.
|
|
||||||
kbps->add_delta(delta);
|
|
||||||
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->add_delta(delta);
|
|
||||||
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.
|
|
||||||
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);
|
|
||||||
|
|
||||||
SrsNetworkDelta* delta = new SrsNetworkDelta();
|
|
||||||
SrsAutoFree(SrsNetworkDelta, delta);
|
|
||||||
delta->set_io(io, io);
|
|
||||||
|
|
||||||
kbps->add_delta(delta);
|
|
||||||
kbps->sample();
|
|
||||||
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);
|
|
||||||
kbps->add_delta(delta);
|
|
||||||
kbps->sample();
|
|
||||||
EXPECT_EQ(100 * 1000, kbps->get_recv_bytes());
|
|
||||||
EXPECT_EQ(100 * 1000, kbps->get_send_bytes());
|
|
||||||
|
|
||||||
// No io, cached data.
|
|
||||||
delta->set_io(NULL, NULL);
|
|
||||||
kbps->add_delta(delta);
|
|
||||||
kbps->sample();
|
|
||||||
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.
|
|
||||||
delta->set_io(io, io);
|
|
||||||
kbps->add_delta(delta);
|
|
||||||
kbps->sample();
|
|
||||||
EXPECT_EQ(200 * 1000, kbps->get_recv_bytes());
|
|
||||||
EXPECT_EQ(200 * 1000, kbps->get_send_bytes());
|
|
||||||
|
|
||||||
io->set_in(150 * 1000)->set_out(150 * 1000);
|
|
||||||
kbps->add_delta(delta);
|
|
||||||
kbps->sample();
|
|
||||||
EXPECT_EQ(250 * 1000, kbps->get_recv_bytes());
|
|
||||||
EXPECT_EQ(250 * 1000, kbps->get_send_bytes());
|
|
||||||
|
|
||||||
// No io, cached data.
|
|
||||||
delta->set_io(NULL, NULL);
|
|
||||||
kbps->add_delta(delta);
|
|
||||||
kbps->sample();
|
|
||||||
EXPECT_EQ(250 * 1000, kbps->get_recv_bytes());
|
|
||||||
EXPECT_EQ(250 * 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(ProtocolKbpsTest, ConnectionsSugar)
|
|
||||||
{
|
|
||||||
if (true) {
|
|
||||||
MockWallClock* clock = new MockWallClock();
|
|
||||||
SrsAutoFree(MockWallClock, clock);
|
|
||||||
MockStatistic* io = new MockStatistic();
|
|
||||||
SrsAutoFree(MockStatistic, io);
|
|
||||||
|
|
||||||
SrsNetworkKbps* kbps = new SrsNetworkKbps(clock->set_clock(0));
|
|
||||||
SrsAutoFree(SrsNetworkKbps, 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);
|
|
||||||
|
|
||||||
SrsNetworkKbps* kbps = new SrsNetworkKbps(clock->set_clock(0));
|
|
||||||
SrsAutoFree(SrsNetworkKbps, 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);
|
|
||||||
|
|
||||||
SrsNetworkKbps* kbps = new SrsNetworkKbps(clock->set_clock(0));
|
|
||||||
SrsAutoFree(SrsNetworkKbps, 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, DeltaSugar)
|
|
||||||
{
|
|
||||||
if (true) {
|
|
||||||
MockWallClock* clock = new MockWallClock();
|
|
||||||
SrsAutoFree(MockWallClock, clock);
|
|
||||||
MockStatistic* io = new MockStatistic();
|
|
||||||
SrsAutoFree(MockStatistic, io);
|
|
||||||
|
|
||||||
// Kbps without io, gather delta.
|
|
||||||
SrsNetworkKbps* kbps = new SrsNetworkKbps(clock->set_clock(0));
|
|
||||||
SrsAutoFree(SrsNetworkKbps, 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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID TEST(ProtocolKbpsTest, RAWStatisticSugar)
|
|
||||||
{
|
|
||||||
if (true) {
|
|
||||||
MockWallClock* clock = new MockWallClock();
|
|
||||||
SrsAutoFree(MockWallClock, clock);
|
|
||||||
MockStatistic* io = new MockStatistic();
|
|
||||||
SrsAutoFree(MockStatistic, io);
|
|
||||||
|
|
||||||
SrsNetworkKbps* kbps = new SrsNetworkKbps(clock->set_clock(0));
|
|
||||||
SrsAutoFree(SrsNetworkKbps, 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());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (true) {
|
|
||||||
MockWallClock* clock = new MockWallClock();
|
|
||||||
SrsAutoFree(MockWallClock, clock);
|
|
||||||
|
|
||||||
SrsNetworkKbps* kbps = new SrsNetworkKbps(clock->set_clock(0));
|
|
||||||
SrsAutoFree(SrsNetworkKbps, kbps);
|
|
||||||
|
|
||||||
// No io, no data.
|
|
||||||
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);
|
|
||||||
|
|
||||||
kbps->sample();
|
|
||||||
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);
|
|
||||||
kbps->sample();
|
|
||||||
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);
|
|
||||||
kbps->sample();
|
|
||||||
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);
|
|
||||||
kbps->sample();
|
|
||||||
EXPECT_EQ(200 * 1000, kbps->get_recv_bytes());
|
|
||||||
EXPECT_EQ(200 * 1000, kbps->get_send_bytes());
|
|
||||||
|
|
||||||
io->set_in(150 * 1000)->set_out(150 * 1000);
|
|
||||||
kbps->sample();
|
|
||||||
EXPECT_EQ(250 * 1000, kbps->get_recv_bytes());
|
|
||||||
EXPECT_EQ(250 * 1000, kbps->get_send_bytes());
|
|
||||||
|
|
||||||
// No io, cached data.
|
|
||||||
kbps->set_io(NULL, NULL);
|
|
||||||
kbps->sample();
|
|
||||||
EXPECT_EQ(250 * 1000, kbps->get_recv_bytes());
|
|
||||||
EXPECT_EQ(250 * 1000, kbps->get_send_bytes());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
//
|
|
||||||
// Copyright (c) 2013-2022 The SRS Authors
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: MIT or MulanPSL-2.0
|
|
||||||
//
|
|
||||||
|
|
||||||
#ifndef SRS_UTEST_PROTOCOL2_HPP
|
|
||||||
#define SRS_UTEST_PROTOCOL2_HPP
|
|
||||||
|
|
||||||
/*
|
|
||||||
#include <srs_utest_protocol2.hpp>
|
|
||||||
*/
|
|
||||||
#include <srs_utest_protocol.hpp>
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue