|
1 |
| -/* Copyright (c) 2019 vesoft inc. All rights reserved. |
| 1 | +/* Copyright (c) 2022 vesoft inc. All rights reserved. |
2 | 2 | *
|
3 | 3 | * This source code is licensed under Apache 2.0 License.
|
4 | 4 | */
|
5 | 5 |
|
6 |
| -#include <gtest/gtest.h> |
7 |
| -#include <proxygen/httpserver/RequestHandler.h> |
8 |
| -#include <proxygen/httpserver/ResponseBuilder.h> |
9 |
| - |
10 | 6 | #include "common/http/HttpClient.h"
|
11 |
| -#include "webservice/Common.h" |
12 |
| -#include "webservice/Router.h" |
13 |
| -#include "webservice/WebService.h" |
| 7 | +#include "gtest/gtest.h" |
| 8 | +#include "mock/FakeHttpServer.h" |
14 | 9 |
|
15 | 10 | namespace nebula {
|
16 |
| -namespace http { |
17 |
| - |
18 |
| -class HttpClientHandler : public proxygen::RequestHandler { |
19 |
| - public: |
20 |
| - HttpClientHandler() = default; |
21 |
| - |
22 |
| - void onRequest(std::unique_ptr<proxygen::HTTPMessage>) noexcept override {} |
23 |
| - |
24 |
| - void onBody(std::unique_ptr<folly::IOBuf>) noexcept override {} |
25 |
| - |
26 |
| - void onEOM() noexcept override { |
27 |
| - proxygen::ResponseBuilder(downstream_) |
28 |
| - .status(WebServiceUtils::to(HttpStatusCode::OK), |
29 |
| - WebServiceUtils::toString(HttpStatusCode::OK)) |
30 |
| - .body("HttpClientHandler successfully") |
31 |
| - .sendWithEOM(); |
32 |
| - } |
33 |
| - |
34 |
| - void onUpgrade(proxygen::UpgradeProtocol) noexcept override {} |
35 |
| - |
36 |
| - void requestComplete() noexcept override { |
37 |
| - delete this; |
38 |
| - } |
39 | 11 |
|
40 |
| - void onError(proxygen::ProxygenError error) noexcept override { |
41 |
| - LOG(ERROR) << "HttpClientHandler Error: " << proxygen::getErrorString(error); |
42 |
| - } |
43 |
| -}; |
44 |
| -class HttpClientTestEnv : public ::testing::Environment { |
45 |
| - public: |
46 |
| - void SetUp() override { |
47 |
| - FLAGS_ws_ip = "127.0.0.1"; |
48 |
| - FLAGS_ws_http_port = 0; |
49 |
| - LOG(INFO) << "Starting web service..."; |
50 |
| - webSvc_ = std::make_unique<WebService>(); |
| 12 | +class HTTPClientTest : public ::testing::Test {}; |
51 | 13 |
|
52 |
| - auto& router = webSvc_->router(); |
53 |
| - router.get("/path").handler([](auto&&) { return new HttpClientHandler(); }); |
54 |
| - |
55 |
| - auto status = webSvc_->start(); |
56 |
| - ASSERT_TRUE(status.ok()) << status; |
57 |
| - } |
| 14 | +TEST_F(HTTPClientTest, GET) { |
| 15 | + FakeHttpServer server(3659); |
| 16 | + server.start(); |
| 17 | + auto resp = HttpClient::get("http://localhost:3659"); |
| 18 | + ASSERT_EQ(resp.curlCode, 0) << resp.curlMessage; |
| 19 | + ASSERT_EQ(resp.body, "GET"); |
| 20 | + server.stop(); |
| 21 | + server.join(); |
| 22 | +} |
58 | 23 |
|
59 |
| - void TearDown() override { |
60 |
| - webSvc_.reset(); |
61 |
| - VLOG(1) << "Web service stopped"; |
62 |
| - } |
| 24 | +TEST_F(HTTPClientTest, POST) { |
| 25 | + FakeHttpServer server(3660); |
| 26 | + server.start(); |
| 27 | + auto resp = HttpClient::post("http://localhost:3660", {}, ""); |
| 28 | + ASSERT_EQ(resp.curlCode, 0) << resp.curlMessage; |
| 29 | + ASSERT_EQ(resp.body, "POST"); |
| 30 | + server.stop(); |
| 31 | + server.join(); |
| 32 | +} |
63 | 33 |
|
64 |
| - private: |
65 |
| - std::unique_ptr<WebService> webSvc_; |
66 |
| -}; |
| 34 | +TEST_F(HTTPClientTest, DELETE) { |
| 35 | + FakeHttpServer server(3661); |
| 36 | + server.start(); |
| 37 | + auto resp = HttpClient::delete_("http://localhost:3661", {}); |
| 38 | + ASSERT_EQ(resp.curlCode, 0) << resp.curlMessage; |
| 39 | + ASSERT_EQ(resp.body, "DELETE"); |
| 40 | + server.stop(); |
| 41 | + server.join(); |
| 42 | +} |
67 | 43 |
|
68 |
| -TEST(HttpClient, get) { |
69 |
| - { |
70 |
| - auto url = |
71 |
| - folly::stringPrintf("http://%s:%d%s", FLAGS_ws_ip.c_str(), FLAGS_ws_http_port, "/path"); |
72 |
| - auto httpResp = HttpClient::get(url); |
73 |
| - ASSERT_EQ(httpResp.curlCode, 0); |
74 |
| - ASSERT_EQ("HttpClientHandler successfully", httpResp.body); |
75 |
| - } |
76 |
| - { |
77 |
| - auto url = folly::stringPrintf( |
78 |
| - "http://%s:%d%s", FLAGS_ws_ip.c_str(), FLAGS_ws_http_port, "/not_exist"); |
79 |
| - auto httpResp = HttpClient::get(url); |
80 |
| - ASSERT_EQ(httpResp.curlCode, 0); |
81 |
| - ASSERT_TRUE(httpResp.body.empty()); |
82 |
| - } |
| 44 | +TEST_F(HTTPClientTest, PUT) { |
| 45 | + FakeHttpServer server(3662); |
| 46 | + server.start(); |
| 47 | + auto resp = HttpClient::put("http://localhost:3662", {}, ""); |
| 48 | + ASSERT_EQ(resp.curlCode, 0) << resp.curlMessage; |
| 49 | + ASSERT_EQ(resp.body, "PUT"); |
| 50 | + server.stop(); |
| 51 | + server.join(); |
83 | 52 | }
|
84 | 53 |
|
85 |
| -} // namespace http |
86 | 54 | } // namespace nebula
|
87 |
| - |
88 |
| -int main(int argc, char** argv) { |
89 |
| - testing::InitGoogleTest(&argc, argv); |
90 |
| - folly::init(&argc, &argv, true); |
91 |
| - google::SetStderrLogging(google::INFO); |
92 |
| - |
93 |
| - ::testing::AddGlobalTestEnvironment(new nebula::http::HttpClientTestEnv()); |
94 |
| - return RUN_ALL_TESTS(); |
95 |
| -} |
0 commit comments