From 79314f7d4a5aafe397711b260f806eee2bfa22e1 Mon Sep 17 00:00:00 2001 From: winlin Date: Fri, 3 Jan 2020 13:31:08 +0800 Subject: [PATCH] Improve test coverage for HTTP service --- trunk/src/service/srs_service_http_conn.cpp | 29 +++++---- trunk/src/utest/srs_utest_service.cpp | 70 +++++++++++++++++++-- 2 files changed, 84 insertions(+), 15 deletions(-) diff --git a/trunk/src/service/srs_service_http_conn.cpp b/trunk/src/service/srs_service_http_conn.cpp index 08eca160f9..0f2f327171 100644 --- a/trunk/src/service/srs_service_http_conn.cpp +++ b/trunk/src/service/srs_service_http_conn.cpp @@ -296,9 +296,13 @@ SrsHttpMessage::SrsHttpMessage(ISrsReader* reader, SrsFastStream* buffer) : ISrs jsonp = false; - _method = 0; - _status = 0; + // As 0 is DELETE, so we use GET as default. + _method = SRS_CONSTS_HTTP_GET; + // 200 is ok. + _status = SRS_CONSTS_HTTP_OK; + // -1 means infinity chunked mode. _content_length = -1; + // From HTTP/1.1, default to keep alive. _keep_alive = true; } @@ -338,18 +342,21 @@ srs_error_t SrsHttpMessage::set_url(string url, bool allow_jsonp) _url = url; - // use server public ip when host not specified. - // to make telnet happy. - std::string host = _header.get("Host"); - if (host.empty()) { - host= srs_get_public_internet_address(); - } - // parse uri from schema/server:port/path?query std::string uri = _url; - if (!host.empty()) { - uri = "http://" + host + _url; + + if (!srs_string_contains(uri, "://")) { + // use server public ip when host not specified. + // to make telnet happy. + std::string host = _header.get("Host"); + if (host.empty()) { + host= srs_get_public_internet_address(); + } + if (!host.empty()) { + uri = "http://" + host + _url; + } } + if ((err = _uri->initialize(uri)) != srs_success) { return srs_error_wrap(err, "init uri %s", uri.c_str()); } diff --git a/trunk/src/utest/srs_utest_service.cpp b/trunk/src/utest/srs_utest_service.cpp index 77218d982e..44ed22d070 100644 --- a/trunk/src/utest/srs_utest_service.cpp +++ b/trunk/src/utest/srs_utest_service.cpp @@ -29,10 +29,20 @@ using namespace std; #include #include -// Disable coroutine test for OSX. -#if !defined(SRS_OSX) - #include +#include + +class MockSrsConnection : public ISrsConnection +{ +public: + MockSrsConnection() { + } + virtual ~MockSrsConnection() { + } + virtual std::string remote_ip() { + return "127.0.0.1"; + } +}; VOID TEST(ServiceTimeTest, TimeUnit) { @@ -376,6 +386,7 @@ VOID TEST(TCPServerTest, StringIsHex) VOID TEST(TCPServerTest, WritevIOVC) { srs_error_t err; + if (true) { MockTcpHandler h; SrsTcpListener l(&h, _srs_tmp_host, _srs_tmp_port); @@ -431,4 +442,55 @@ VOID TEST(TCPServerTest, WritevIOVC) } } -#endif +VOID TEST(TCPServerTest, MessageConnection) +{ + srs_error_t err; + + if (true) { + MockSrsConnection conn; + SrsHttpMessage m; + m.set_connection(&conn); + EXPECT_TRUE(&conn == m.connection()); + } + + if (true) { + SrsHttpMessage m; + HELPER_EXPECT_SUCCESS(m.set_url("http://127.0.0.1/live/livestream.flv?callback=fn&method=POST", true)); + EXPECT_TRUE(m.jsonp); EXPECT_STREQ("POST", m.jsonp_method.c_str()); + } + + if (true) { + SrsHttpMessage m; + HELPER_EXPECT_SUCCESS(m.set_url("http://127.0.0.1/live/livestream.flv?callback=fn&method=GET", true)); + EXPECT_EQ(SRS_CONSTS_HTTP_GET, m.method()); EXPECT_STREQ("GET", m.method_str().c_str()); + } + + if (true) { + SrsHttpMessage m; + HELPER_EXPECT_SUCCESS(m.set_url("http://127.0.0.1/live/livestream.flv?callback=fn&method=PUT", true)); + EXPECT_EQ(SRS_CONSTS_HTTP_PUT, m.method()); EXPECT_STREQ("PUT", m.method_str().c_str()); + } + + if (true) { + SrsHttpMessage m; + HELPER_EXPECT_SUCCESS(m.set_url("http://127.0.0.1/live/livestream.flv?callback=fn&method=POST", true)); + EXPECT_EQ(SRS_CONSTS_HTTP_POST, m.method()); EXPECT_STREQ("POST", m.method_str().c_str()); + } + + if (true) { + SrsHttpMessage m; + HELPER_EXPECT_SUCCESS(m.set_url("http://127.0.0.1/live/livestream.flv?callback=fn&method=DELETE", true)); + EXPECT_EQ(SRS_CONSTS_HTTP_DELETE, m.method()); EXPECT_STREQ("DELETE", m.method_str().c_str()); + } + + if (true) { + SrsHttpMessage m; + m.set_basic(100, 0, 0); EXPECT_STREQ("OTHER", m.method_str().c_str()); + m.set_basic(SRS_CONSTS_HTTP_GET, 0, 0); EXPECT_EQ(SRS_CONSTS_HTTP_GET, m.method()); EXPECT_STREQ("GET", m.method_str().c_str()); + m.set_basic(SRS_CONSTS_HTTP_PUT, 0, 0); EXPECT_EQ(SRS_CONSTS_HTTP_PUT, m.method()); EXPECT_STREQ("PUT", m.method_str().c_str()); + m.set_basic(SRS_CONSTS_HTTP_POST, 0, 0); EXPECT_EQ(SRS_CONSTS_HTTP_POST, m.method()); EXPECT_STREQ("POST", m.method_str().c_str()); + m.set_basic(SRS_CONSTS_HTTP_DELETE, 0, 0); EXPECT_EQ(SRS_CONSTS_HTTP_DELETE, m.method()); EXPECT_STREQ("DELETE", m.method_str().c_str()); + m.set_basic(SRS_CONSTS_HTTP_OPTIONS, 0, 0); EXPECT_EQ(SRS_CONSTS_HTTP_OPTIONS, m.method()); EXPECT_STREQ("OPTIONS", m.method_str().c_str()); + } +} +