From 975ca13faa852e6c449c616eacaf77c35d5d3361 Mon Sep 17 00:00:00 2001 From: Nicolas Gomez Palacios Date: Mon, 30 Sep 2024 16:53:32 -0300 Subject: [PATCH] fix: fixes tests after adding https_enabled option --- .../communicator/tests/communicator_test.cpp | 7 ++-- .../communicator/tests/http_client_test.cpp | 41 ++++++++++-------- .../tests/mocks/mock_http_client.hpp | 4 +- .../tests/mocks/mock_http_socket_factory.hpp | 2 +- src/agent/src/register.cpp | 3 +- src/agent/tests/register_test.cpp | 42 ++++++++++++++----- 6 files changed, 64 insertions(+), 35 deletions(-) diff --git a/src/agent/communicator/tests/communicator_test.cpp b/src/agent/communicator/tests/communicator_test.cpp index 470ee85bc2..946a49dbb1 100644 --- a/src/agent/communicator/tests/communicator_test.cpp +++ b/src/agent/communicator/tests/communicator_test.cpp @@ -80,12 +80,13 @@ TEST(CommunicatorTest, WaitForTokenExpirationAndAuthenticate_FailedAuthenticatio std::make_shared(std::move(mockHttpClient), "uuid", "key", nullptr); // A failed authentication won't return a token - EXPECT_CALL(*mockHttpClientPtr, AuthenticateWithUuidAndKey(_, _, _, _)) + EXPECT_CALL(*mockHttpClientPtr, AuthenticateWithUuidAndKey(_, _, _, _, _)) .WillOnce(Invoke( [communicatorPtr]([[maybe_unused]] const std::string& host, [[maybe_unused]] const std::string& port, [[maybe_unused]] const std::string& uuid, - [[maybe_unused]] const std::string& key) -> std::optional + [[maybe_unused]] const std::string& key, + [[maybe_unused]] const bool useHttps) -> std::optional { communicatorPtr->Stop(); return std::nullopt; @@ -138,7 +139,7 @@ TEST(CommunicatorTest, StatelessMessageProcessingTask_CallsWithValidToken) std::make_shared(std::move(mockHttpClient), "uuid", "key", nullptr); const auto mockedToken = CreateToken(); - EXPECT_CALL(*mockHttpClientPtr, AuthenticateWithUuidAndKey(_, _, _, _)).WillOnce(Return(mockedToken)); + EXPECT_CALL(*mockHttpClientPtr, AuthenticateWithUuidAndKey(_, _, _, _, _)).WillOnce(Return(mockedToken)); std::string capturedToken; EXPECT_CALL(*mockHttpClientPtr, Co_PerformHttpRequest(_, _, _, _, _, _)) diff --git a/src/agent/communicator/tests/http_client_test.cpp b/src/agent/communicator/tests/http_client_test.cpp index d4535926ac..1b762a7ead 100644 --- a/src/agent/communicator/tests/http_client_test.cpp +++ b/src/agent/communicator/tests/http_client_test.cpp @@ -42,9 +42,9 @@ class HttpClientTest : public Test void SetupMockSocketFactory() { - EXPECT_CALL(*mockSocketFactory, Create(_)) + EXPECT_CALL(*mockSocketFactory, Create(_, _)) .WillOnce(Invoke( - [&](const auto& executor) -> std::unique_ptr + [&](const auto& executor, [[maybe_unused]] const bool useHttps) -> std::unique_ptr { EXPECT_TRUE(executor); return std::move(mockSocket); @@ -106,7 +106,8 @@ class HttpClientTest : public Test TEST(CreateHttpRequestTest, BasicGetRequest) { auto httpClient = http_client::HttpClient(); - const auto reqParams = http_client::HttpRequestParams(boost::beast::http::verb::get, "localhost", "8080", "/test"); + const auto reqParams = + http_client::HttpRequestParams(boost::beast::http::verb::get, "localhost", "8080", "/test", true); const auto req = httpClient.CreateHttpRequest(reqParams); EXPECT_EQ(req.method(), boost::beast::http::verb::get); @@ -122,7 +123,7 @@ TEST(CreateHttpRequestTest, PostRequestWithBody) auto httpClient = http_client::HttpClient(); const std::string body = R"({"key": "value"})"; const auto reqParams = - http_client::HttpRequestParams(boost::beast::http::verb::post, "localhost", "8080", "/submit", "", "", body); + http_client::HttpRequestParams(boost::beast::http::verb::post, "localhost", "8080", "/submit", false, "", "", body); const auto req = httpClient.CreateHttpRequest(reqParams); EXPECT_EQ(req.method(), boost::beast::http::verb::post); @@ -140,7 +141,7 @@ TEST(CreateHttpRequestTest, AuthorizationBearerToken) auto httpClient = http_client::HttpClient(); const std::string token = "dummy_token"; const auto reqParams = - http_client::HttpRequestParams(boost::beast::http::verb::get, "localhost", "8080", "/secure", token); + http_client::HttpRequestParams(boost::beast::http::verb::get, "localhost", "8080", "/secure", true, token); const auto req = httpClient.CreateHttpRequest(reqParams); EXPECT_EQ(req[boost::beast::http::field::authorization], "Bearer dummy_token"); @@ -151,7 +152,7 @@ TEST(CreateHttpRequestTest, AuthorizationBasic) auto httpClient = http_client::HttpClient(); const std::string user_pass = "username:password"; const auto reqParams = - http_client::HttpRequestParams(boost::beast::http::verb::get, "localhost", "8080", "/secure", "", user_pass); + http_client::HttpRequestParams(boost::beast::http::verb::get, "localhost", "8080", "/secure", true, "", user_pass); const auto req = httpClient.CreateHttpRequest(reqParams); EXPECT_EQ(req[boost::beast::http::field::authorization], "Basic username:password"); @@ -167,7 +168,7 @@ TEST_F(HttpClientTest, PerformHttpRequest_Success) EXPECT_CALL(*mockSocket, Write(_)).Times(1); EXPECT_CALL(*mockSocket, Read(_)).WillOnce([](auto& res) { res.result(boost::beast::http::status::ok); }); - const http_client::HttpRequestParams params(boost::beast::http::verb::get, "localhost", "80", "/"); + const http_client::HttpRequestParams params(boost::beast::http::verb::get, "localhost", "80", "/", true); const auto response = client->PerformHttpRequest(params); EXPECT_EQ(response.result(), boost::beast::http::status::ok); @@ -179,7 +180,7 @@ TEST_F(HttpClientTest, PerformHttpRequest_ExceptionThrown) EXPECT_CALL(*mockResolver, Resolve(_, _)).WillOnce(Throw(std::runtime_error("Simulated resolution failure"))); - const http_client::HttpRequestParams params(boost::beast::http::verb::get, "localhost", "80", "/"); + const http_client::HttpRequestParams params(boost::beast::http::verb::get, "localhost", "80", "/", true); const auto response = client->PerformHttpRequest(params); EXPECT_EQ(response.result(), boost::beast::http::status::internal_server_error); @@ -216,7 +217,9 @@ TEST_F(HttpClientTest, Co_PerformHttpRequest_Success) unauthorizedCalled = true; }; - const auto reqParams = http_client::HttpRequestParams(boost::beast::http::verb::get, "localhost", "8080", "/"); + const auto reqParams = http_client::HttpRequestParams( + boost::beast::http::verb::get, "localhost", "8080", "/", true); + auto task = client->Co_PerformHttpRequest( std::make_shared("token"), reqParams, getMessages, onUnauthorized, onSuccess, nullptr); @@ -256,7 +259,8 @@ TEST_F(HttpClientTest, Co_PerformHttpRequest_CallbacksNotCalledIfCannotConnect) unauthorizedCalled = true; }; - const auto reqParams = http_client::HttpRequestParams(boost::beast::http::verb::get, "localhost", "8080", "/"); + const auto reqParams = http_client::HttpRequestParams( + boost::beast::http::verb::get, "localhost", "8080", "/", true); auto task = client->Co_PerformHttpRequest( std::make_shared("token"), reqParams, getMessages, onUnauthorized, onSuccess, nullptr); @@ -297,7 +301,8 @@ TEST_F(HttpClientTest, Co_PerformHttpRequest_OnSuccessNotCalledIfAsyncWriteFails unauthorizedCalled = true; }; - const auto reqParams = http_client::HttpRequestParams(boost::beast::http::verb::get, "localhost", "8080", "/"); + const auto reqParams = http_client::HttpRequestParams( + boost::beast::http::verb::get, "localhost", "8080", "/", true); auto task = client->Co_PerformHttpRequest( std::make_shared("token"), reqParams, getMessages, onUnauthorized, onSuccess, nullptr); @@ -340,7 +345,8 @@ TEST_F(HttpClientTest, Co_PerformHttpRequest_OnSuccessNotCalledIfAsyncReadFails) unauthorizedCalled = true; }; - const auto reqParams = http_client::HttpRequestParams(boost::beast::http::verb::get, "localhost", "8080", "/"); + const auto reqParams = http_client::HttpRequestParams( + boost::beast::http::verb::get, "localhost", "8080", "/", true); auto task = client->Co_PerformHttpRequest( std::make_shared("token"), reqParams, getMessages, onUnauthorized, onSuccess, nullptr); @@ -382,7 +388,8 @@ TEST_F(HttpClientTest, Co_PerformHttpRequest_UnauthorizedCalledWhenAuthorization unauthorizedCalled = true; }; - const auto reqParams = http_client::HttpRequestParams(boost::beast::http::verb::get, "localhost", "8080", "/"); + const auto reqParams = http_client::HttpRequestParams( + boost::beast::http::verb::get, "localhost", "8080", "/", true); auto task = client->Co_PerformHttpRequest( std::make_shared("token"), reqParams, getMessages, onUnauthorized, onSuccess, nullptr); @@ -411,7 +418,7 @@ TEST_F(HttpClientTest, AuthenticateWithUuidAndKey_Success) boost::beast::ostream(res.body()) << R"({"token":"valid_token"})"; }); - const auto token = client->AuthenticateWithUuidAndKey("localhost", "8080", "test-uuid", "test-key"); + const auto token = client->AuthenticateWithUuidAndKey("localhost", "8080", "test-uuid", "test-key", true); ASSERT_TRUE(token.has_value()); @@ -429,7 +436,7 @@ TEST_F(HttpClientTest, AuthenticateWithUuidAndKey_Failure) EXPECT_CALL(*mockSocket, Write(_)).Times(1); EXPECT_CALL(*mockSocket, Read(_)).WillOnce([](auto& res) { res.result(boost::beast::http::status::unauthorized); }); - const auto token = client->AuthenticateWithUuidAndKey("localhost", "8080", "test-uuid", "test-key"); + const auto token = client->AuthenticateWithUuidAndKey("localhost", "8080", "test-uuid", "test-key", true); EXPECT_FALSE(token.has_value()); } @@ -450,7 +457,7 @@ TEST_F(HttpClientTest, AuthenticateWithUserPassword_Success) boost::beast::ostream(res.body()) << R"({"data":{"token":"valid_token"}})"; }); - const auto token = client->AuthenticateWithUserPassword("localhost", "8080", "user", "password"); + const auto token = client->AuthenticateWithUserPassword("localhost", "8080", "user", "password", true); ASSERT_TRUE(token.has_value()); @@ -468,7 +475,7 @@ TEST_F(HttpClientTest, AuthenticateWithUserPassword_Failure) EXPECT_CALL(*mockSocket, Write(_)).Times(1); EXPECT_CALL(*mockSocket, Read(_)).WillOnce([](auto& res) { res.result(boost::beast::http::status::unauthorized); }); - const auto token = client->AuthenticateWithUserPassword("localhost", "8080", "user", "password"); + const auto token = client->AuthenticateWithUserPassword("localhost", "8080", "user", "password", true); EXPECT_FALSE(token.has_value()); } diff --git a/src/agent/communicator/tests/mocks/mock_http_client.hpp b/src/agent/communicator/tests/mocks/mock_http_client.hpp index fa51708f61..a9b2b430ab 100644 --- a/src/agent/communicator/tests/mocks/mock_http_client.hpp +++ b/src/agent/communicator/tests/mocks/mock_http_client.hpp @@ -27,12 +27,12 @@ class MockHttpClient : public http_client::IHttpClient MOCK_METHOD(std::optional, AuthenticateWithUuidAndKey, - (const std::string& host, const std::string& port, const std::string& uuid, const std::string& key), + (const std::string& host, const std::string& port, const std::string& uuid, const std::string& key, const bool useHttps), (override)); MOCK_METHOD( std::optional, AuthenticateWithUserPassword, - (const std::string& host, const std::string& port, const std::string& user, const std::string& password), + (const std::string& host, const std::string& port, const std::string& user, const std::string& password, const bool useHttps), (override)); }; diff --git a/src/agent/communicator/tests/mocks/mock_http_socket_factory.hpp b/src/agent/communicator/tests/mocks/mock_http_socket_factory.hpp index 3781a67029..27cbba4392 100644 --- a/src/agent/communicator/tests/mocks/mock_http_socket_factory.hpp +++ b/src/agent/communicator/tests/mocks/mock_http_socket_factory.hpp @@ -8,6 +8,6 @@ class MockHttpSocketFactory : public http_client::IHttpSocketFactory public: MOCK_METHOD(std::unique_ptr, Create, - (const boost::asio::any_io_executor& executor), + (const boost::asio::any_io_executor& executor, const bool use_https), (override)); }; diff --git a/src/agent/src/register.cpp b/src/agent/src/register.cpp index 22394385fd..f9c6f081a0 100644 --- a/src/agent/src/register.cpp +++ b/src/agent/src/register.cpp @@ -16,7 +16,8 @@ namespace registration const configuration::ConfigurationParser configurationParser; const auto managerIp = configurationParser.GetConfig("agent", "manager_ip"); const auto managerPort = configurationParser.GetConfig("agent", "server_mgmt_api_port"); - const bool useHttps = (configurationParser.GetConfig("agent", "https_enabled") == "no") ? false : true; + const bool useHttps = + (configurationParser.GetConfig("agent", "https_enabled") == "no") ? false : true; const auto token = httpClient.AuthenticateWithUserPassword( managerIp, managerPort, userCredentials.user, userCredentials.password, useHttps); diff --git a/src/agent/tests/register_test.cpp b/src/agent/tests/register_test.cpp index bdcc6b7006..241b0e404f 100644 --- a/src/agent/tests/register_test.cpp +++ b/src/agent/tests/register_test.cpp @@ -39,14 +39,21 @@ class MockHttpClient : public http_client::IHttpClient MOCK_METHOD(std::optional, AuthenticateWithUuidAndKey, - (const std::string& host, const std::string& port, const std::string& uuid, const std::string& key), + (const std::string& host, + const std::string& port, + const std::string& uuid, + const std::string& key, + const bool useHttps), (override)); - MOCK_METHOD( - std::optional, - AuthenticateWithUserPassword, - (const std::string& host, const std::string& port, const std::string& user, const std::string& password), - (override)); + MOCK_METHOD(std::optional, + AuthenticateWithUserPassword, + (const std::string& host, + const std::string& port, + const std::string& user, + const std::string& password, + const bool useHttps), + (override)); }; class RegisterTest : public ::testing::Test @@ -65,7 +72,11 @@ class RegisterTest : public ::testing::Test TEST_F(RegisterTest, RegistrationTestSuccess) { EXPECT_CALL(mockHttpClient, - AuthenticateWithUserPassword(testing::_, testing::_, userCredentials.user, userCredentials.password)) + AuthenticateWithUserPassword(testing::_, + testing::_, + userCredentials.user, + userCredentials.password, + testing::_)) .WillOnce(testing::Return("token")); nlohmann::json bodyJson = {{"id", agent->GetUUID()}, {"key", agent->GetKey()}}; @@ -76,7 +87,7 @@ TEST_F(RegisterTest, RegistrationTestSuccess) } http_client::HttpRequestParams reqParams( - boost::beast::http::verb::post, "localhost", "55000", "/agents", "token", "", bodyJson.dump()); + boost::beast::http::verb::post, "localhost", "55000", "/agents", true, "token", "", bodyJson.dump()); boost::beast::http::response expectedResponse; expectedResponse.result(boost::beast::http::status::ok); @@ -90,7 +101,11 @@ TEST_F(RegisterTest, RegistrationTestSuccess) TEST_F(RegisterTest, RegistrationFailsIfAuthenticationFails) { - EXPECT_CALL(mockHttpClient, AuthenticateWithUserPassword(testing::_, testing::_, testing::_, testing::_)) + EXPECT_CALL(mockHttpClient, AuthenticateWithUserPassword(testing::_, + testing::_, + testing::_, + testing::_, + testing::_)) .WillOnce(testing::Return(std::nullopt)); // NOLINTNEXTLINE(cppcoreguidelines-init-variables) @@ -101,13 +116,18 @@ TEST_F(RegisterTest, RegistrationFailsIfAuthenticationFails) TEST_F(RegisterTest, RegistrationFailsIfServerResponseIsNotOk) { EXPECT_CALL(mockHttpClient, - AuthenticateWithUserPassword(testing::_, testing::_, userCredentials.user, userCredentials.password)) + AuthenticateWithUserPassword(testing::_, + testing::_, + userCredentials.user, + userCredentials.password, + testing::_)) .WillOnce(testing::Return("token")); boost::beast::http::response expectedResponse; expectedResponse.result(boost::beast::http::status::bad_request); - EXPECT_CALL(mockHttpClient, PerformHttpRequest(testing::_)).WillOnce(testing::Return(expectedResponse)); + EXPECT_CALL(mockHttpClient, PerformHttpRequest(testing::_)) + .WillOnce(testing::Return(expectedResponse)); // NOLINTNEXTLINE(cppcoreguidelines-init-variables) const bool res = registration::RegisterAgent(userCredentials, mockHttpClient);