@@ -131,6 +131,69 @@ FOSSIL_TEST_CASE(cpp_test_nstream_client_types) {
131131 }
132132}
133133
134+ FOSSIL_TEST_CASE (cpp_test_nstream_class_create_and_destroy) {
135+ using namespace fossil ::io;
136+
137+ const std::string protocols[] = {" tcp" , " udp" , " raw" , " icmp" , " sctp" , " http" , " https" , " ftp" , " ssh" , " dns" , " ntp" , " smtp" , " pop3" , " imap" , " ldap" , " mqtt" };
138+ const std::string clients[] = {" mail-server" , " server" , " mail-client" , " client" , " mail-bot" , " bot" , " multicast" , " broadcast" };
139+
140+ for (const auto &protocol : protocols) {
141+ for (const auto &client : clients) {
142+ NStream stream (protocol, client);
143+ }
144+ }
145+ }
146+
147+ FOSSIL_TEST_CASE (cpp_test_nstream_class_connect_invalid_host) {
148+ using namespace fossil ::io;
149+
150+ try {
151+ NStream stream (" tcp" , " client" );
152+ stream.connect (" invalid_host" , 12345 );
153+ ASSUME_ITS_FALSE (" Expected exception for invalid host" );
154+ } catch (const std::runtime_error &e) {
155+ ASSUME_ITS_TRUE (" Caught expected exception" );
156+ }
157+ }
158+
159+ FOSSIL_TEST_CASE (cpp_test_nstream_class_listen_and_accept) {
160+ using namespace fossil ::io;
161+
162+ NStream server (" tcp" , " server" );
163+ server.listen (" 127.0.0.1" , 12345 );
164+
165+ NStream client (" tcp" , " client" );
166+ client.connect (" 127.0.0.1" , 12345 );
167+
168+ NStream *accepted_client = server.accept ();
169+ ASSUME_NOT_CNULL (accepted_client);
170+
171+ delete accepted_client;
172+ }
173+
174+ FOSSIL_TEST_CASE (cpp_test_nstream_class_send_and_receive) {
175+ using namespace fossil ::io;
176+
177+ NStream server (" tcp" , " server" );
178+ server.listen (" 127.0.0.1" , 12345 );
179+
180+ NStream client (" tcp" , " client" );
181+ client.connect (" 127.0.0.1" , 12345 );
182+
183+ NStream *accepted_client = server.accept ();
184+ ASSUME_NOT_CNULL (accepted_client);
185+
186+ const std::string message = " Hello, Fossil!" ;
187+ client.send (message.c_str (), message.size ());
188+
189+ char buffer[1024 ] = {0 };
190+ ssize_t bytes_received = accepted_client->recv (buffer, sizeof (buffer));
191+ ASSUME_ITS_EQUAL_I32 (message.size (), bytes_received);
192+ ASSUME_ITS_EQUAL_CSTR (message.c_str (), buffer);
193+
194+ delete accepted_client;
195+ }
196+
134197// * * * * * * * * * * * * * * * * * * * * * * * *
135198// * Fossil Logic Test Pool
136199// * * * * * * * * * * * * * * * * * * * * * * * *
@@ -143,5 +206,10 @@ FOSSIL_TEST_GROUP(cpp_network_tests) {
143206 FOSSIL_TEST_ADD (cpp_network_suite, cpp_test_nstream_protocols);
144207 FOSSIL_TEST_ADD (cpp_network_suite, cpp_test_nstream_client_types);
145208
209+ FOSSIL_TEST_ADD (cpp_network_suite, cpp_test_nstream_class_create_and_destroy);
210+ FOSSIL_TEST_ADD (cpp_network_suite, cpp_test_nstream_class_connect_invalid_host);
211+ FOSSIL_TEST_ADD (cpp_network_suite, cpp_test_nstream_class_listen_and_accept);
212+ FOSSIL_TEST_ADD (cpp_network_suite, cpp_test_nstream_class_send_and_receive);
213+
146214 FOSSIL_TEST_REGISTER (cpp_network_suite);
147215}
0 commit comments