Explorar o código

Add posix socket reference to SocketParameter

This reference is now being used inside Socket class for mock injection or real API reference.
Patrick-Christopher Mattulat %!s(int64=2) %!d(string=hai) anos
pai
achega
b817310462

+ 5 - 6
include/ls_std/network/socket/Socket.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2022-11-16
- * Changed:         2022-12-10
+ * Changed:         2022-12-11
  *
  * */
 
@@ -25,7 +25,7 @@ namespace ls::std::network
   {
     public:
 
-      explicit Socket(const ls::std::network::SocketParameter& _parameter);
+      explicit Socket(ls::std::network::SocketParameter _parameter);
       ~Socket() override = default;
 
       [[nodiscard]] bool bind();
@@ -37,7 +37,6 @@ namespace ls::std::network
       bool initialized{};
       ls::std::network::SocketParameter parameter{};
       #if defined(unix) || defined(__APPLE__)
-      ::std::shared_ptr<ls::std::core::interface_type::IPosixSocket> posixSocket{};
       int unixDescriptor{};
       #endif
 
@@ -46,10 +45,10 @@ namespace ls::std::network
       [[nodiscard]] bool _connectUnix();
       #endif
       [[nodiscard]] SocketAddressMapperParameter _createSocketAddressMapperParameter() const;
-      [[nodiscard]] bool _init(const ls::std::network::SocketParameter& _parameter);
+      [[nodiscard]] bool _init();
       #if defined(unix) || defined(__APPLE__)
-      [[nodiscard]] bool _initUnix(const ls::std::network::SocketParameter& _parameter);
-      void _selectUnixSocketApi(const ls::std::network::SocketParameter& _parameter);
+      [[nodiscard]] bool _initUnix();
+      void _setUnixSocketApi();
       #endif
   };
 }

+ 3 - 2
include/ls_std/network/socket/SocketParameter.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2022-11-16
- * Changed:         2022-12-10
+ * Changed:         2022-12-11
  *
  * */
 
@@ -12,12 +12,13 @@
 
 #include <ls_std/network/core/ProtocolFamilyType.hpp>
 #include "SocketAddress.hpp"
+#include <memory>
 
 namespace ls::std::network
 {
   struct SocketParameter
   {
-    bool mockSocketApi{};
+    ::std::shared_ptr<ls::std::core::interface_type::IPosixSocket> posixSocket{};
     ls::std::network::ProtocolFamilyType protocolFamilyType{};
     ls::std::network::SocketAddress socketAddress{};
   };

+ 17 - 20
source/ls_std/network/socket/Socket.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2022-11-16
- * Changed:         2022-12-10
+ * Changed:         2022-12-11
  *
  * */
 
@@ -15,12 +15,13 @@
 #include <ls_std/network/socket/MockPosixSocket.hpp>
 #include <ls_std/network/socket/PosixSocket.hpp>
 #include <memory>
+#include <utility>
 
-ls::std::network::Socket::Socket(const ls::std::network::SocketParameter& _parameter) : ls::std::core::Class("Socket"),
-parameter(_parameter)
+ls::std::network::Socket::Socket(ls::std::network::SocketParameter _parameter) : ls::std::core::Class("Socket"),
+parameter(::std::move(_parameter))
 {
   #if defined(unix) || defined(__APPLE__)
-  this->unixDescriptor = ls::std::network::Socket::_initUnix(_parameter);
+  this->unixDescriptor = ls::std::network::Socket::_initUnix();
   this->initialized = this->unixDescriptor != -1;
   #endif
 }
@@ -49,13 +50,13 @@ bool ls::std::network::Socket::isInitialized() const
 bool ls::std::network::Socket::_bindUnix()
 {
   ls::std::network::ConvertedSocketAddress convertedSocketAddress = ls::std::network::SocketAddressMapper::from(ls::std::network::Socket::_createSocketAddressMapperParameter());
-  return this->posixSocket->bind(this->unixDescriptor, reinterpret_cast<const sockaddr *>(&convertedSocketAddress.socketAddressUnix), sizeof(convertedSocketAddress.socketAddressUnix)) == 0;
+  return this->parameter.posixSocket->bind(this->unixDescriptor, reinterpret_cast<const sockaddr *>(&convertedSocketAddress.socketAddressUnix), sizeof(convertedSocketAddress.socketAddressUnix)) == 0;
 }
 
 bool ls::std::network::Socket::_connectUnix()
 {
   ls::std::network::ConvertedSocketAddress convertedSocketAddress = ls::std::network::SocketAddressMapper::from(ls::std::network::Socket::_createSocketAddressMapperParameter());
-  return this->posixSocket->connect(this->unixDescriptor, reinterpret_cast<const sockaddr *>(&convertedSocketAddress.socketAddressUnix), sizeof(convertedSocketAddress.socketAddressUnix)) == 0;
+  return this->parameter.posixSocket->connect(this->unixDescriptor, reinterpret_cast<const sockaddr *>(&convertedSocketAddress.socketAddressUnix), sizeof(convertedSocketAddress.socketAddressUnix)) == 0;
 }
 #endif
 
@@ -68,32 +69,28 @@ ls::std::network::SocketAddressMapperParameter ls::std::network::Socket::_create
   return mapperParameter;
 }
 
-bool ls::std::network::Socket::_init(const ls::std::network::SocketParameter &_parameter)
+bool ls::std::network::Socket::_init()
 {
   #if defined(unix) || defined(__APPLE__)
-  return this->_initUnix(_parameter);
+  return this->_initUnix();
   #endif
 }
 
 #if defined(unix) || defined(__APPLE__)
-bool ls::std::network::Socket::_initUnix(const ls::std::network::SocketParameter &_parameter)
+bool ls::std::network::Socket::_initUnix()
 {
-  this->_selectUnixSocketApi(_parameter);
-  ls::std::network::ConvertedProtocolFamily convertedProtocolFamily = ls::std::network::ProtocolFamilyMapper::from(_parameter.protocolFamilyType);
-  ls::std::network::Protocol protocol = ls::std::network::ProtocolMapper::from(_parameter.socketAddress.protocolType);
+  this->_setUnixSocketApi();
+  ls::std::network::ConvertedProtocolFamily convertedProtocolFamily = ls::std::network::ProtocolFamilyMapper::from(this->parameter.protocolFamilyType);
+  ls::std::network::Protocol protocol = ls::std::network::ProtocolMapper::from(this->parameter.socketAddress.protocolType);
 
-  return this->posixSocket->create(convertedProtocolFamily.unixDomain, protocol.unixProtocol, 0) != -1;
+  return this->parameter.posixSocket->create(convertedProtocolFamily.unixDomain, protocol.unixProtocol, 0) != -1;
 }
 
-void ls::std::network::Socket::_selectUnixSocketApi(const ls::std::network::SocketParameter &_parameter)
+void ls::std::network::Socket::_setUnixSocketApi()
 {
-  if (_parameter.mockSocketApi)
+  if (this->parameter.posixSocket == nullptr)
   {
-    this->posixSocket = ::std::make_shared<ls_std_network_test::MockPosixSocket>();
-  }
-  else
-  {
-    this->posixSocket = ::std::make_shared<ls::std::network::PosixSocket>();
+    this->parameter.posixSocket = ::std::make_shared<ls::std::network::PosixSocket>();
   }
 }
 #endif

+ 19 - 17
test/cases/network/socket/SocketTest.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-11-16
- * Changed:         2022-12-10
+ * Changed:         2022-12-11
  *
  * */
 
@@ -51,35 +51,37 @@ namespace
 
   TEST_F(SocketTest, bind)
   {
+    SocketParameter parameter = generateSocketParameter();
+
     #if defined(unix) || defined(__APPLE__)
-    MockPosixSocket mockPosixSocket{};
-    EXPECT_CALL(mockPosixSocket, create(_, _, _)).Times(AtLeast(1));
-    ON_CALL(mockPosixSocket, create(_, _, _)).WillByDefault(Return(0));
-    EXPECT_CALL(mockPosixSocket, bind(_, _, _)).Times(AtLeast(1));
-    ON_CALL(mockPosixSocket, bind(_, _, _)).WillByDefault(Return(0));
+    ::std::shared_ptr<ls_std_network_test::MockPosixSocket> mockSocket = ::std::make_shared<ls_std_network_test::MockPosixSocket>();
+    parameter.posixSocket = mockSocket;
+
+    EXPECT_CALL(*mockSocket, create(_, _, _)).Times(AtLeast(1));
+    ON_CALL(*mockSocket, create(_, _, _)).WillByDefault(Return(0));
+    EXPECT_CALL(*mockSocket, bind(_, _, _)).Times(AtLeast(1));
+    ON_CALL(*mockSocket, bind(_, _, _)).WillByDefault(Return(0));
     #endif
 
-    SocketParameter parameter = generateSocketParameter();
-    parameter.mockSocketApi = true;
     Socket socket{parameter};
-
     ASSERT_TRUE(socket.bind());
   }
 
   TEST_F(SocketTest, connect)
   {
+    SocketParameter parameter = generateSocketParameter();
+
     #if defined(unix) || defined(__APPLE__)
-    MockPosixSocket mockPosixSocket{};
-    EXPECT_CALL(mockPosixSocket, create(_, _, _)).Times(AtLeast(1));
-    ON_CALL(mockPosixSocket, create(_, _, _)).WillByDefault(Return(0));
-    EXPECT_CALL(mockPosixSocket, connect(_, _, _)).Times(AtLeast(1));
-    ON_CALL(mockPosixSocket, connect(_, _, _)).WillByDefault(Return(0));
+    ::std::shared_ptr<ls_std_network_test::MockPosixSocket> mockSocket = ::std::make_shared<ls_std_network_test::MockPosixSocket>();
+    parameter.posixSocket = mockSocket;
+
+    EXPECT_CALL(*mockSocket, create(_, _, _)).Times(AtLeast(1));
+    ON_CALL(*mockSocket, create(_, _, _)).WillByDefault(Return(0));
+    EXPECT_CALL(*mockSocket, connect(_, _, _)).Times(AtLeast(1));
+    ON_CALL(*mockSocket, connect(_, _, _)).WillByDefault(Return(0));
     #endif
 
-    SocketParameter parameter = generateSocketParameter();
-    parameter.mockSocketApi = true;
     Socket socket{parameter};
-
     ASSERT_TRUE(socket.connect());
   }