diff --git a/ext/CMakeLists.txt b/ext/CMakeLists.txt index 17a765a92b..0062e6c671 100644 --- a/ext/CMakeLists.txt +++ b/ext/CMakeLists.txt @@ -1,3 +1,4 @@ +include_directories(sdk) add_library(opentelemetry_ext INTERFACE) target_include_directories( opentelemetry_ext @@ -19,8 +20,8 @@ install( FILES_MATCHING PATTERN "*.h") -add_subdirectory(src) include_directories(include) +add_subdirectory(src) if(BUILD_TESTING) add_subdirectory(test) diff --git a/ext/include/opentelemetry/ext/http/client/http_client_factory.h b/ext/include/opentelemetry/ext/http/client/http_client_factory.h new file mode 100644 index 0000000000..3093b1a149 --- /dev/null +++ b/ext/include/opentelemetry/ext/http/client/http_client_factory.h @@ -0,0 +1,19 @@ +#pragma once +#include "opentelemetry/ext/http/client/http_client.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace ext +{ +namespace http +{ +namespace client +{ +class HttpClientFactory +{ +public: + static std::shared_ptr Create(); +}; +} // namespace client +} // namespace http +} // namespace ext +OPENTELEMETRY_END_NAMESPACE diff --git a/ext/src/CMakeLists.txt b/ext/src/CMakeLists.txt index 189a03f69c..d449d06b06 100644 --- a/ext/src/CMakeLists.txt +++ b/ext/src/CMakeLists.txt @@ -1 +1,2 @@ add_subdirectory(zpages) +add_subdirectory(http/client/curl) diff --git a/ext/src/http/client/curl/BUILD b/ext/src/http/client/curl/BUILD new file mode 100644 index 0000000000..8360692601 --- /dev/null +++ b/ext/src/http/client/curl/BUILD @@ -0,0 +1,14 @@ +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "http_client_curl", + srcs = ["http_client_factory_curl.cc"], + include_prefix = "src/http/client/curl", + deps = [ + "//api", + "//ext:headers", + "//sdk:headers", + "//sdk/src/common:random", + "@curl", + ], +) diff --git a/ext/src/http/client/curl/CMakeLists.txt b/ext/src/http/client/curl/CMakeLists.txt new file mode 100644 index 0000000000..2026dbaf28 --- /dev/null +++ b/ext/src/http/client/curl/CMakeLists.txt @@ -0,0 +1,4 @@ +find_package(CURL) +if(CURL_FOUND) + add_library(opentelemetry_curl_factory http_client_factory_curl) +endif() diff --git a/ext/src/http/client/curl/http_client_factory_curl.cc b/ext/src/http/client/curl/http_client_factory_curl.cc new file mode 100644 index 0000000000..f75885aa43 --- /dev/null +++ b/ext/src/http/client/curl/http_client_factory_curl.cc @@ -0,0 +1,9 @@ +#include "opentelemetry/ext/http/client/curl/http_client_curl.h" +#include "opentelemetry/ext/http/client/http_client.h" +#include "opentelemetry/ext/http/client/http_client_factory.h" + +std::shared_ptr +opentelemetry::ext::http::client::HttpClientFactory::Create() +{ + return std::make_shared(); +} \ No newline at end of file diff --git a/ext/test/http/BUILD b/ext/test/http/BUILD index 678b2e5da7..7251c0fde6 100644 --- a/ext/test/http/BUILD +++ b/ext/test/http/BUILD @@ -6,6 +6,7 @@ cc_test( # TODO: Move copts/linkopts for static CURL usage into shared bzl file. copts = [ "-DCURL_STATICLIB", + "-DWITH_CURL", ], linkopts = select({ "//bazel:windows": [ @@ -17,6 +18,7 @@ cc_test( }), deps = [ "//ext:headers", + "//ext/src/http/client/curl:http_client_curl", "//sdk/src/trace", "@com_google_googletest//:gtest_main", "@curl", diff --git a/ext/test/http/CMakeLists.txt b/ext/test/http/CMakeLists.txt index e79ae7fea4..0fcaa24c48 100644 --- a/ext/test/http/CMakeLists.txt +++ b/ext/test/http/CMakeLists.txt @@ -1,15 +1,17 @@ find_package(CURL) if(CURL_FOUND) set(FILENAME curl_http_test) + add_compile_definitions(WITH_CURL) add_executable(${FILENAME} ${FILENAME}.cc) target_link_libraries(${FILENAME} ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) if(TARGET CURL::libcurl) - target_link_libraries(${FILENAME} CURL::libcurl) + target_link_libraries(${FILENAME} CURL::libcurl opentelemetry_curl_factory) else() include_directories(${CURL_INCLUDE_DIRS}) - target_link_libraries(${FILENAME} ${CURL_LIBRARIES}) + target_link_libraries(${FILENAME} ${CURL_LIBRARIES} + opentelemetry_curl_factory) endif() gtest_add_tests( TARGET ${FILENAME} diff --git a/ext/test/http/curl_http_test.cc b/ext/test/http/curl_http_test.cc index c5466df6ed..13db98131e 100644 --- a/ext/test/http/curl_http_test.cc +++ b/ext/test/http/curl_http_test.cc @@ -1,4 +1,5 @@ #include "opentelemetry/ext//http/client/curl//http_client_curl.h" +#include "opentelemetry/ext/http/client/http_client_factory.h" #include "opentelemetry/ext/http/server/http_server.h" #include @@ -184,9 +185,10 @@ TEST_F(BasicCurlHttpTests, HttpResponse) TEST_F(BasicCurlHttpTests, SendGetRequest) { received_requests_.clear(); - curl::SessionManager session_manager; + auto session_manager = http_client::HttpClientFactory::Create(); + EXPECT_TRUE(session_manager != nullptr); - auto session = session_manager.CreateSession("127.0.0.1", HTTP_PORT); + auto session = session_manager->CreateSession("127.0.0.1", HTTP_PORT); auto request = session->CreateRequest(); request->SetUri("get/"); GetEventHandler *handler = new GetEventHandler(); @@ -200,9 +202,10 @@ TEST_F(BasicCurlHttpTests, SendGetRequest) TEST_F(BasicCurlHttpTests, SendPostRequest) { received_requests_.clear(); - curl::SessionManager session_manager; + auto session_manager = http_client::HttpClientFactory::Create(); + EXPECT_TRUE(session_manager != nullptr); - auto session = session_manager.CreateSession("127.0.0.1", HTTP_PORT); + auto session = session_manager->CreateSession("127.0.0.1", HTTP_PORT); auto request = session->CreateRequest(); request->SetUri("post/"); request->SetMethod(http_client::Method::Post); @@ -217,8 +220,8 @@ TEST_F(BasicCurlHttpTests, SendPostRequest) session->FinishSession(); ASSERT_TRUE(handler->is_called_); - session_manager.CancelAllSessions(); - session_manager.FinishAllSessions(); + session_manager->CancelAllSessions(); + session_manager->FinishAllSessions(); delete handler; } @@ -226,10 +229,11 @@ TEST_F(BasicCurlHttpTests, SendPostRequest) TEST_F(BasicCurlHttpTests, RequestTimeout) { received_requests_.clear(); - curl::SessionManager session_manager; + auto session_manager = http_client::HttpClientFactory::Create(); + EXPECT_TRUE(session_manager != nullptr); auto session = - session_manager.CreateSession("222.222.222.200", HTTP_PORT); // Non Existing address + session_manager->CreateSession("222.222.222.200", HTTP_PORT); // Non Existing address auto request = session->CreateRequest(); request->SetUri("get/"); GetEventHandler *handler = new GetEventHandler();