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(&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() {
|
||||
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(" "))
|
||||
|
@ -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(" -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(" -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(" 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"))
|
||||
|
@ -317,6 +325,12 @@ func run(ctx context.Context) error {
|
|||
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
|
||||
proxies := make(map[string]*url.URL)
|
||||
for _, oproxy := range []string(oproxies) {
|
||||
|
@ -366,7 +380,34 @@ func run(ctx context.Context) error {
|
|||
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) {
|
||||
oh.SetHeader(w)
|
||||
|
||||
|
@ -388,7 +429,7 @@ func run(ctx context.Context) error {
|
|||
return
|
||||
}
|
||||
|
||||
fs.ServeHTTP(w, r)
|
||||
serveFileNoRedirect(w, r, path.Join(html, path.Clean(r.URL.Path)))
|
||||
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
|
||||
|
|
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 {
|
||||
return 19
|
||||
return 26
|
||||
}
|
||||
|
||||
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
|
||||
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_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
|
||||
MODULE_FILES+=("srs_utest_srt")
|
||||
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
|
||||
scApp.provider("$sc_nav", function(){
|
||||
this.$get = function(){
|
||||
|
|
|
@ -16,7 +16,8 @@
|
|||
<th>Stream</th>
|
||||
<th>类型</th>
|
||||
<th>时长</th>
|
||||
<th>TcUrl</th>
|
||||
<th>URL</th>
|
||||
<th>分类</th>
|
||||
<th>管理</th>
|
||||
</tr>
|
||||
<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>{{client.publish| sc_filter_ctype}}</td>
|
||||
<td>{{client.alive| sc_filter_time}}</td>
|
||||
<td>{{client.tcUrl}}</td>
|
||||
<td>{{client |sc_filter_streamURL}}</td>
|
||||
<td>{{client.type}}</td>
|
||||
<td>
|
||||
<a ng-click="kickoff(client)" href="javascript:void(0)">踢Ta</a>
|
||||
</td>
|
||||
|
|
|
@ -16,7 +16,8 @@
|
|||
<th>Stream</th>
|
||||
<th>Type</th>
|
||||
<th>Duration</th>
|
||||
<th>TcUrl</th>
|
||||
<th>URL</th>
|
||||
<th>Category</th>
|
||||
<th>Manage</th>
|
||||
</tr>
|
||||
<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>{{client.publish| sc_filter_ctype}}</td>
|
||||
<td>{{client.alive| sc_filter_time}}</td>
|
||||
<td>{{client.tcUrl}}</td>
|
||||
<td>{{client |sc_filter_streamURL}}</td>
|
||||
<td>{{client.type}}</td>
|
||||
<td>
|
||||
<a ng-click="kickoff(client)" href="javascript:void(0)">Kickoff It</a>
|
||||
</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