]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/seastar/tests/unit/socket_test.cc
import quincy beta 17.1.0
[ceph.git] / ceph / src / seastar / tests / unit / socket_test.cc
index b4640bbfc8ba2795a6cf8e4ee18ed98f5d009b9b..b58a65e8da460600c4b9ea82556bb14901488f93 100644 (file)
 #include <seastar/core/print.hh>
 #include <seastar/core/memory.hh>
 #include <seastar/util/std-compat.hh>
+#include <seastar/testing/test_case.hh>
+#include <seastar/core/abort_source.hh>
+#include <seastar/core/sleep.hh>
+#include <seastar/core/thread.hh>
 
 #include <seastar/net/posix-stack.hh>
 
@@ -70,13 +74,34 @@ public:
 my_malloc_allocator malloc_allocator;
 std::pmr::polymorphic_allocator<char> allocator{&malloc_allocator};
 
-int main(int ac, char** av) {
-    register_network_stack("posix", boost::program_options::options_description(),
-        [](boost::program_options::variables_map ops) {
-            return smp::main_thread() ? net::posix_network_stack::create(ops, &allocator)
-                : net::posix_ap_network_stack::create(ops);
-        }, true);
-    return app_template().run_deprecated(ac, av, [] {
-       return echo_server_loop().finally([](){ engine().exit((malloc_allocator.allocs == malloc_allocator.frees) ? 0 : 1); });
-    });
+SEASTAR_TEST_CASE(socket_allocation_test) {
+    return echo_server_loop().finally([](){ engine().exit((malloc_allocator.allocs == malloc_allocator.frees) ? 0 : 1); });
 }
+
+SEASTAR_TEST_CASE(socket_skip_test) {
+    return seastar::async([&] {
+        listen_options lo;
+        lo.reuse_address = true;
+        server_socket ss = seastar::listen(ipv4_addr("127.0.0.1", 1234), lo);
+
+        abort_source as;
+        auto client = async([&as] {
+            connected_socket socket = connect(ipv4_addr("127.0.0.1", 1234)).get();
+            socket.output().write("abc").get();
+            socket.shutdown_output();
+            try {
+                sleep_abortable(std::chrono::seconds(10), as).get();
+            } catch (const sleep_aborted&) {
+                // expected
+                return;
+            }
+            assert(!"Skipping data from socket is likely stuck");
+        });
+
+        accept_result accepted = ss.accept().get();
+        input_stream<char> input = accepted.connection.input();
+        input.skip(16).get();
+        as.request_abort();
+        client.get();
+    });
+}
\ No newline at end of file