Explorar o código

Add posix socket reference member to Socket class

This member can now be set to either productive posix socket class or its mock class.
Patrick-Christopher Mattulat %!s(int64=2) %!d(string=hai) anos
pai
achega
9d7a584a74

+ 4 - 1
include/ls_std/ls_std_network.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2022-11-16
- * Changed:         2022-12-09
+ * Changed:         2022-12-10
  *
  * */
 
@@ -16,7 +16,10 @@
 #include <ls_std/network/core/ProtocolFamilyType.hpp>
 #include <ls_std/network/core/ProtocolMapper.hpp>
 #include <ls_std/network/core/ProtocolType.hpp>
+
 #include <ls_std/network/socket/ConvertedSocketAddress.hpp>
+#include <ls_std/network/socket/MockPosixSocket.hpp>
+#include <ls_std/network/socket/PosixSocket.hpp>
 #include <ls_std/network/socket/Socket.hpp>
 #include <ls_std/network/socket/SocketAddress.hpp>
 #include <ls_std/network/socket/SocketAddressMapper.hpp>

+ 1 - 1
test/classes/network/socket/MockPosixSocket.hpp → include/ls_std/network/socket/MockPosixSocket.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2022-12-09
- * Changed:         2022-12-09
+ * Changed:         2022-12-10
  *
  * */
 

+ 4 - 2
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-09
+ * Changed:         2022-12-10
  *
  * */
 
@@ -17,6 +17,7 @@
 #endif
 #include "SocketParameter.hpp"
 #include "SocketAddressMapperParameter.hpp"
+#include <memory>
 
 namespace ls::std::network
 {
@@ -35,7 +36,7 @@ namespace ls::std::network
       bool initialized{};
       ls::std::network::SocketParameter parameter{};
       #if defined(unix) || defined(__APPLE__)
-      ls::std::network::PosixSocket posixSocket{};
+      ::std::shared_ptr<ls::std::core::interface_type::IPosixSocket> posixSocket{};
       int unixDescriptor{};
       #endif
 
@@ -46,6 +47,7 @@ namespace ls::std::network
       [[nodiscard]] bool _init(const ls::std::network::SocketParameter& _parameter);
       #if defined(unix) || defined(__APPLE__)
       [[nodiscard]] bool _initUnix(const ls::std::network::SocketParameter& _parameter);
+      void _selectUnixSocketApi(const ls::std::network::SocketParameter& _parameter);
       #endif
   };
 }

+ 2 - 1
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-11-16
+ * Changed:         2022-12-10
  *
  * */
 
@@ -17,6 +17,7 @@ namespace ls::std::network
 {
   struct SocketParameter
   {
+    bool mockSocketApi{};
     ls::std::network::ProtocolFamilyType protocolFamilyType{};
     ls::std::network::SocketAddress socketAddress{};
   };

+ 19 - 3
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-09
+ * Changed:         2022-12-10
  *
  * */
 
@@ -12,6 +12,9 @@
 #include <ls_std/network/core/ProtocolMapper.hpp>
 #include <ls_std/network/socket/ConvertedSocketAddress.hpp>
 #include <ls_std/network/socket/SocketAddressMapper.hpp>
+#include <ls_std/network/socket/MockPosixSocket.hpp>
+#include <ls_std/network/socket/PosixSocket.hpp>
+#include <memory>
 
 ls::std::network::Socket::Socket(const ls::std::network::SocketParameter& _parameter) : ls::std::core::Class("Socket"),
 parameter(_parameter)
@@ -38,7 +41,7 @@ bool ls::std::network::Socket::isInitialized() const
 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->posixSocket->connect(this->unixDescriptor, reinterpret_cast<const sockaddr *>(&convertedSocketAddress.socketAddressUnix), sizeof(convertedSocketAddress.socketAddressUnix)) == 0;
 }
 #endif
 
@@ -61,9 +64,22 @@ bool ls::std::network::Socket::_init(const ls::std::network::SocketParameter &_p
 #if defined(unix) || defined(__APPLE__)
 bool ls::std::network::Socket::_initUnix(const ls::std::network::SocketParameter &_parameter)
 {
+  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);
 
-  return this->posixSocket.create(convertedProtocolFamily.unixDomain, protocol.unixProtocol, 0);
+  return this->posixSocket->create(convertedProtocolFamily.unixDomain, protocol.unixProtocol, 0) != -1;
+}
+
+void ls::std::network::Socket::_selectUnixSocketApi(const ls::std::network::SocketParameter &_parameter)
+{
+  if (_parameter.mockSocketApi)
+  {
+    this->posixSocket = ::std::make_shared<ls_std_network_test::MockPosixSocket>();
+  }
+  else
+  {
+    this->posixSocket = ::std::make_shared<ls::std::network::PosixSocket>();
+  }
 }
 #endif

+ 9 - 5
test/cases/network/socket/SocketTest.cpp

@@ -3,13 +3,12 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-11-16
- * Changed:         2022-12-09
+ * Changed:         2022-12-10
  *
  * */
 
 #include <gtest/gtest.h>
 #include <ls_std/ls_std_network.hpp>
-#include <ls_std_network_test.hpp>
 
 using namespace ls::std::network;
 using namespace ::testing;
@@ -54,11 +53,16 @@ namespace
   {
     #if defined(unix) || defined(__APPLE__)
     MockPosixSocket mockPosixSocket{};
-    EXPECT_CALL(mockPosixSocket, connect(_, _, _)).Times(1);
-    ON_CALL(mockPosixSocket, connect(_, _, _)).WillByDefault(Return(true));
+    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));
     #endif
 
-    Socket socket{generateSocketParameter()};
+    SocketParameter parameter = generateSocketParameter();
+    parameter.mockSocketApi = true;
+    Socket socket{parameter};
+
     ASSERT_TRUE(socket.connect());
   }
 

+ 0 - 15
test/ls_std_network_test.hpp

@@ -1,15 +0,0 @@
-/*
- * Author:          Patrick-Christopher Mattulat
- * Company:         Lynar Studios
- * E-Mail:          webmaster@lynarstudios.com
- * Created:         2022-12-09
- * Changed:         2022-12-09
- *
- * */
-
-#ifndef LS_STD_LS_STD_NETWORK_TEST_HPP
-#define LS_STD_LS_STD_NETWORK_TEST_HPP
-
-#include <classes/network/socket/MockPosixSocket.hpp>
-
-#endif