Browse Source

Add tests for read method of Socket class

Patrick-Christopher Mattulat 1 năm trước cách đây
mục cha
commit
f193200fd5

+ 2 - 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-16
+ * Changed:         2022-12-25
  *
  * */
 
@@ -29,7 +29,7 @@ namespace ls::std::network
 
       // implementation
 
-      ls::std::core::type::byte_field read() override;
+      [[nodiscard]] ls::std::core::type::byte_field read() override;
 
       // other functionalities
 

+ 2 - 2
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-16
+ * Changed:         2022-12-25
  *
  * */
 
@@ -37,7 +37,7 @@ ls::std::core::type::byte_field ls::std::network::Socket::read()
 {
   if (!this->readBufferSet)
   {
-    this->_initReadBuffer(); // TODO: is this really wise to initialize once? what if reading second time wouldn't work?
+    this->_initReadBuffer(); // TODO: is this really wise to initialize once? what if reading second time wouldn't work? - test it with unit tests and remove it
     this->readBufferSet = true;
   }
 

+ 50 - 1
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-16
+ * Changed:         2022-12-25
  *
  * */
 
@@ -16,6 +16,7 @@ using namespace ls::std::network;
 using namespace ::testing;
 using namespace ::std;
 using namespace ls::std::core;
+using namespace ls::std::core::type;
 using namespace ls_std_core_test;
 
 namespace
@@ -53,6 +54,54 @@ namespace
     ASSERT_STREQ("Socket", Socket{generateSocketParameter()}.getClassName().c_str());
   }
 
+  TEST_F(SocketTest, read)
+  {
+    SocketParameter parameter = generateSocketParameter();
+
+    #if defined(unix) || defined(__APPLE__)
+    shared_ptr<MockPosixSocket> mockSocket = make_shared<MockPosixSocket>();
+    shared_ptr<MockPosixReader> mockReader = make_shared<MockPosixReader>();
+    parameter.posixSocket = mockSocket;
+    parameter.posixReader = mockReader;
+
+    EXPECT_CALL(*mockSocket, create(_, _, _)).Times(AtLeast(1));
+    ON_CALL(*mockSocket, create(_, _, _)).WillByDefault(Return(0));
+    EXPECT_CALL(*mockReader, read(_, _, _)).Times(AtLeast(1));
+    ON_CALL(*mockReader, read(_, _, _)).WillByDefault(Return(1));
+    #endif
+
+    parameter.readBufferSize = 32;
+    Socket socket{parameter};
+
+    ASSERT_FALSE(socket.read().empty());
+  }
+
+  TEST_F(SocketTest, read_no_buffer_size_set)
+  {
+    SocketParameter parameter = generateSocketParameter();
+
+    #if defined(unix) || defined(__APPLE__)
+    shared_ptr<MockPosixSocket> mockSocket = make_shared<MockPosixSocket>();
+    parameter.posixSocket = mockSocket;
+
+    EXPECT_CALL(*mockSocket, create(_, _, _)).Times(AtLeast(1));
+    ON_CALL(*mockSocket, create(_, _, _)).WillByDefault(Return(0));
+    #endif
+
+    Socket socket{parameter};
+
+    EXPECT_THROW({
+                   try
+                   {
+                     byte_field data = socket.read();
+                   }
+                   catch (const IllegalArgumentException &_exception)
+                   {
+                     throw;
+                   }
+                 }, IllegalArgumentException);
+  }
+
   TEST_F(SocketTest, accept)
   {
     SocketParameter parameter = generateSocketParameter();