SocketTest.cpp 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. /*
  2. * Author: Patrick-Christopher Mattulat
  3. * Company: Lynar Studios
  4. * E-Mail: webmaster@lynarstudios.com
  5. * Created: 2020-11-16
  6. * Changed: 2022-12-25
  7. *
  8. * */
  9. #include <gtest/gtest.h>
  10. #include <ls_std/ls_std_network.hpp>
  11. #include <ls_std/ls_std_core.hpp>
  12. #include <ls_std_core_test.hpp>
  13. #include <ls_std_common_test.hpp>
  14. using namespace ls::std::network;
  15. using namespace ::testing;
  16. using namespace ::std;
  17. using namespace ls::std::core;
  18. using namespace ls::std::core::type;
  19. using namespace ls_std_core_test;
  20. using namespace ls_std_common_test;
  21. namespace
  22. {
  23. class SocketTest : public ::testing::Test
  24. {
  25. protected:
  26. SocketTest() = default;
  27. ~SocketTest() override = default;
  28. void SetUp() override
  29. {}
  30. void TearDown() override
  31. {}
  32. static SocketParameter generateSocketParameter()
  33. {
  34. SocketParameter socketParameter{};
  35. socketParameter.protocolFamilyType = ProtocolFamilyType::PROTOCOL_FAMILY_TYPE_IPV4;
  36. SocketAddress socketAddress{};
  37. socketAddress.protocolType = ProtocolType::PROTOCOL_TYPE_TCP;
  38. socketAddress.ipAddress = "127.0.0.1";
  39. socketAddress.port = 2220;
  40. socketParameter.socketAddress = socketAddress;
  41. return socketParameter;
  42. }
  43. };
  44. TEST_F(SocketTest, getClassName)
  45. {
  46. ASSERT_STREQ("Socket", Socket{generateSocketParameter()}.getClassName().c_str());
  47. }
  48. TEST_F(SocketTest, read)
  49. {
  50. SocketParameter parameter = generateSocketParameter();
  51. #if defined(unix) || defined(__APPLE__)
  52. shared_ptr<MockPosixSocket> mockSocket = make_shared<MockPosixSocket>();
  53. shared_ptr<MockPosixReader> mockReader = make_shared<MockPosixReader>();
  54. parameter.posixSocket = mockSocket;
  55. parameter.posixReader = mockReader;
  56. EXPECT_CALL(*mockSocket, create(_, _, _)).Times(AtLeast(1));
  57. ON_CALL(*mockSocket, create(_, _, _)).WillByDefault(Return(0));
  58. EXPECT_CALL(*mockReader, read(_, _, _)).Times(AtLeast(1));
  59. ON_CALL(*mockReader, read(_, _, _)).WillByDefault(Return(1));
  60. #endif
  61. parameter.readBufferSize = 32;
  62. Socket socket{parameter};
  63. ASSERT_FALSE(socket.read().empty());
  64. }
  65. TEST_F(SocketTest, read_no_buffer_size_set)
  66. {
  67. SocketParameter parameter = generateSocketParameter();
  68. #if defined(unix) || defined(__APPLE__)
  69. shared_ptr<MockPosixSocket> mockSocket = make_shared<MockPosixSocket>();
  70. parameter.posixSocket = mockSocket;
  71. EXPECT_CALL(*mockSocket, create(_, _, _)).Times(AtLeast(1));
  72. ON_CALL(*mockSocket, create(_, _, _)).WillByDefault(Return(0));
  73. #endif
  74. Socket socket{parameter};
  75. EXPECT_THROW({
  76. try
  77. {
  78. byte_field data = socket.read();
  79. }
  80. catch (const IllegalArgumentException &_exception)
  81. {
  82. throw;
  83. }
  84. }, IllegalArgumentException);
  85. }
  86. TEST_F(SocketTest, write)
  87. {
  88. SocketParameter parameter = generateSocketParameter();
  89. #if defined(unix) || defined(__APPLE__)
  90. shared_ptr<MockPosixSocket> mockSocket = make_shared<MockPosixSocket>();
  91. shared_ptr<MockPosixWriter> mockWriter = make_shared<MockPosixWriter>();
  92. parameter.posixSocket = mockSocket;
  93. parameter.posixWriter = mockWriter;
  94. EXPECT_CALL(*mockSocket, create(_, _, _)).Times(AtLeast(1));
  95. ON_CALL(*mockSocket, create(_, _, _)).WillByDefault(Return(0));
  96. EXPECT_CALL(*mockWriter, write(_, _, _)).Times(AtLeast(1));
  97. ON_CALL(*mockWriter, write(_, _, _)).WillByDefault(Return(0));
  98. #endif
  99. Socket socket{parameter};
  100. ASSERT_TRUE(socket.write("Hello Server!"));
  101. }
  102. TEST_F(SocketTest, accept)
  103. {
  104. SocketParameter parameter = generateSocketParameter();
  105. #if defined(unix) || defined(__APPLE__)
  106. shared_ptr<MockPosixSocket> mockSocket = make_shared<MockPosixSocket>();
  107. parameter.posixSocket = mockSocket;
  108. EXPECT_CALL(*mockSocket, create(_, _, _)).Times(AtLeast(1));
  109. ON_CALL(*mockSocket, create(_, _, _)).WillByDefault(Return(0));
  110. EXPECT_CALL(*mockSocket, accept(_, _, _)).Times(AtLeast(1));
  111. ON_CALL(*mockSocket, accept(_, _, _)).WillByDefault(Return(0));
  112. #endif
  113. Socket socket{parameter};
  114. ASSERT_TRUE(socket.accept());
  115. }
  116. TEST_F(SocketTest, accept_wrong_protocol)
  117. {
  118. SocketParameter parameter = generateSocketParameter();
  119. parameter.socketAddress.protocolType = PROTOCOL_TYPE_UDP;
  120. #if defined(unix) || defined(__APPLE__)
  121. shared_ptr<MockPosixSocket> mockSocket = make_shared<MockPosixSocket>();
  122. parameter.posixSocket = mockSocket;
  123. EXPECT_CALL(*mockSocket, create(_, _, _)).Times(AtLeast(1));
  124. ON_CALL(*mockSocket, create(_, _, _)).WillByDefault(Return(0));
  125. #endif
  126. Socket socket{parameter};
  127. EXPECT_THROW({
  128. try
  129. {
  130. bool listened = socket.accept();
  131. }
  132. catch (const WrongProtocolException &_exception)
  133. {
  134. throw;
  135. }
  136. }, WrongProtocolException);
  137. }
  138. TEST_F(SocketTest, bind)
  139. {
  140. SocketParameter parameter = generateSocketParameter();
  141. #if defined(unix) || defined(__APPLE__)
  142. shared_ptr<MockPosixSocket> mockSocket = make_shared<MockPosixSocket>();
  143. parameter.posixSocket = mockSocket;
  144. EXPECT_CALL(*mockSocket, create(_, _, _)).Times(AtLeast(1));
  145. ON_CALL(*mockSocket, create(_, _, _)).WillByDefault(Return(0));
  146. EXPECT_CALL(*mockSocket, bind(_, _, _)).Times(AtLeast(1));
  147. ON_CALL(*mockSocket, bind(_, _, _)).WillByDefault(Return(0));
  148. #endif
  149. Socket socket{parameter};
  150. ASSERT_TRUE(socket.bind());
  151. }
  152. TEST_F(SocketTest, close)
  153. {
  154. SocketParameter parameter = generateSocketParameter();
  155. #if defined(unix) || defined(__APPLE__)
  156. shared_ptr<MockPosixSocket> mockSocket = make_shared<MockPosixSocket>();
  157. parameter.posixSocket = mockSocket;
  158. EXPECT_CALL(*mockSocket, create(_, _, _)).Times(AtLeast(1));
  159. ON_CALL(*mockSocket, create(_, _, _)).WillByDefault(Return(0));
  160. EXPECT_CALL(*mockSocket, close(_)).Times(AtLeast(1));
  161. ON_CALL(*mockSocket, close(_)).WillByDefault(Return(0));
  162. #endif
  163. Socket socket{parameter};
  164. ASSERT_TRUE(socket.close());
  165. }
  166. TEST_F(SocketTest, connect)
  167. {
  168. SocketParameter parameter = generateSocketParameter();
  169. #if defined(unix) || defined(__APPLE__)
  170. shared_ptr<MockPosixSocket> mockSocket = make_shared<MockPosixSocket>();
  171. parameter.posixSocket = mockSocket;
  172. EXPECT_CALL(*mockSocket, create(_, _, _)).Times(AtLeast(1));
  173. ON_CALL(*mockSocket, create(_, _, _)).WillByDefault(Return(0));
  174. EXPECT_CALL(*mockSocket, connect(_, _, _)).Times(AtLeast(1));
  175. ON_CALL(*mockSocket, connect(_, _, _)).WillByDefault(Return(0));
  176. #endif
  177. Socket socket{parameter};
  178. ASSERT_TRUE(socket.connect());
  179. }
  180. TEST_F(SocketTest, isInitialized)
  181. {
  182. Socket socket{generateSocketParameter()};
  183. ASSERT_TRUE(socket.isInitialized());
  184. }
  185. TEST_F(SocketTest, listen)
  186. {
  187. SocketParameter parameter = generateSocketParameter();
  188. #if defined(unix) || defined(__APPLE__)
  189. shared_ptr<MockPosixSocket> mockSocket = make_shared<MockPosixSocket>();
  190. parameter.posixSocket = mockSocket;
  191. EXPECT_CALL(*mockSocket, create(_, _, _)).Times(AtLeast(1));
  192. ON_CALL(*mockSocket, create(_, _, _)).WillByDefault(Return(0));
  193. EXPECT_CALL(*mockSocket, listen(_, _)).Times(AtLeast(1));
  194. ON_CALL(*mockSocket, listen(_, _)).WillByDefault(Return(0));
  195. #endif
  196. Socket socket{parameter};
  197. ASSERT_TRUE(socket.listen());
  198. }
  199. TEST_F(SocketTest, listen_wrong_protocol)
  200. {
  201. SocketParameter parameter = generateSocketParameter();
  202. parameter.socketAddress.protocolType = PROTOCOL_TYPE_UDP;
  203. #if defined(unix) || defined(__APPLE__)
  204. shared_ptr<MockPosixSocket> mockSocket = make_shared<MockPosixSocket>();
  205. parameter.posixSocket = mockSocket;
  206. EXPECT_CALL(*mockSocket, create(_, _, _)).Times(AtLeast(1));
  207. ON_CALL(*mockSocket, create(_, _, _)).WillByDefault(Return(0));
  208. #endif
  209. Socket socket{parameter};
  210. EXPECT_THROW({
  211. try
  212. {
  213. bool listened = socket.listen();
  214. }
  215. catch (const WrongProtocolException &_exception)
  216. {
  217. throw;
  218. }
  219. }, WrongProtocolException);
  220. }
  221. }