+++ /dev/null
-/*\r
- * Copyright (c) 2017 Uber Technologies, Inc.\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- */\r
-\r
-#include "jaegertracing/net/IPAddress.h"\r
-#include "jaegertracing/testutils/TracerUtil.h"\r
-#include <gtest/gtest.h>\r
-#include <iterator>\r
-#include <memory>\r
-#include <opentracing/string_view.h>\r
-#include <opentracing/tracer.h>\r
-#include <stdexcept>\r
-#include <string>\r
-#include <utility>\r
-\r
-#include "jaegertracing/net/Socket.h"\r
-#include "jaegertracing/net/http/Request.h"\r
-#include "jaegertracing/net/http/Response.h"\r
-#include <future>\r
-#include <thread>\r
-\r
-namespace jaegertracing {\r
-\r
-namespace utils {\r
-\r
-TEST(HTTPTransporter, testSpanReporting)\r
-{\r
- net::IPAddress serverAddr;\r
- std::promise<void> started;\r
-\r
- std::string target;\r
- net::http::Method method;\r
- std::string contentType;\r
- std::string acceptType;\r
-\r
- std::thread serverThread(\r
- [&serverAddr, &started, &target, &method, &contentType, &acceptType]() {\r
- net::Socket socket;\r
- socket.open(AF_INET, SOCK_STREAM);\r
- socket.bind(net::IPAddress::v4("127.0.0.1", 0));\r
- ::sockaddr_storage addrStorage;\r
- ::socklen_t addrLen = sizeof(addrStorage);\r
- const auto returnCode =\r
- ::getsockname(socket.handle(),\r
- reinterpret_cast<::sockaddr*>(&addrStorage),\r
- &addrLen);\r
- ASSERT_EQ(0, returnCode);\r
- serverAddr = net::IPAddress(addrStorage, addrLen);\r
-\r
- // Listening to the port\r
- socket.listen();\r
-\r
- // Unblocking the client\r
- started.set_value();\r
-\r
- // Waiting for the client to connect\r
- auto clientSocket = socket.accept();\r
-\r
- net::http::Request request = net::http::Request::read(clientSocket);\r
-\r
- target = request.target();\r
- method = request.method();\r
-\r
- for (auto header : request.headers()) {\r
- if (header.key() == "Content-Type") {\r
- contentType = header.value();\r
- }\r
-\r
- if (header.key() == "Accept") {\r
- acceptType = header.value();\r
- }\r
- }\r
-\r
- std::string answer(\r
- "HTTP/1.1 202 Accepted\r\nDate: Tue, 10 Sep 2019 09:03:26 "\r
- "GMT\r\nContent-Length: 0\r\n\r\n");\r
-\r
- ::send(clientSocket.handle(), answer.c_str(), answer.size(), 0);\r
- });\r
-\r
- started.get_future().wait();\r
-\r
- std::ostringstream oss;\r
- oss << "http://127.0.0.1:" << serverAddr.port() << "/api/traces";\r
- std::shared_ptr<opentracing::Tracer> tracer =\r
- ::jaegertracing::testutils::TracerUtil::buildTracer(oss.str());\r
-\r
- {\r
- auto span1 = tracer->StartSpan("tracedFunction");\r
- }\r
-\r
- serverThread.join();\r
-\r
- ASSERT_EQ(std::string("/api/traces?format=jaeger.thrift"), target);\r
- ASSERT_EQ(net::http::Method::POST, method);\r
- ASSERT_EQ(std::string("application/x-thrift"), contentType);\r
- ASSERT_EQ(std::string("application/x-thrift"), acceptType);\r
-}\r
-\r
-} // namespace utils\r
-} // namespace jaegertracing\r