summaryrefslogtreecommitdiffstats
path: root/Tests/CMakeServerLib
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2017-11-30 16:11:54 (GMT)
committerBrad King <brad.king@kitware.com>2017-11-30 16:19:31 (GMT)
commit32cfa7b324de799eefb2f7370fb54b700d1a87a5 (patch)
tree4b002818928a543986959b34f34117a2558f139c /Tests/CMakeServerLib
parent92b212e87542552a8dd095608098609a3ebe1d6d (diff)
downloadCMake-32cfa7b324de799eefb2f7370fb54b700d1a87a5.zip
CMake-32cfa7b324de799eefb2f7370fb54b700d1a87a5.tar.gz
CMake-32cfa7b324de799eefb2f7370fb54b700d1a87a5.tar.bz2
cmUVHandlePtr: Move to CMakeLib to make it available everywhere
Diffstat (limited to 'Tests/CMakeServerLib')
-rw-r--r--Tests/CMakeServerLib/CMakeLists.txt1
-rw-r--r--Tests/CMakeServerLib/testUVRAII.cxx179
2 files changed, 0 insertions, 180 deletions
diff --git a/Tests/CMakeServerLib/CMakeLists.txt b/Tests/CMakeServerLib/CMakeLists.txt
index f1ca2a4..5e1ad0c 100644
--- a/Tests/CMakeServerLib/CMakeLists.txt
+++ b/Tests/CMakeServerLib/CMakeLists.txt
@@ -6,7 +6,6 @@ include_directories(
set(CMakeServerLib_TESTS
testServerBuffering
- testUVRAII
)
create_test_sourcelist(CMakeLib_TEST_SRCS CMakeServerLibTests.cxx ${CMakeServerLib_TESTS})
diff --git a/Tests/CMakeServerLib/testUVRAII.cxx b/Tests/CMakeServerLib/testUVRAII.cxx
deleted file mode 100644
index 7ecef39..0000000
--- a/Tests/CMakeServerLib/testUVRAII.cxx
+++ /dev/null
@@ -1,179 +0,0 @@
-#include "cmUVHandlePtr.h"
-
-#include <algorithm>
-#include <chrono>
-#include <iostream>
-#include <thread>
-
-#include "cm_uv.h"
-
-static void signal_reset_fn(uv_async_t* handle)
-{
- auto ptr = static_cast<cm::uv_async_ptr*>(handle->data);
- ptr->reset();
-}
-
-// A common pattern is to use an async signal to shutdown the server.
-static bool testAsyncShutdown()
-{
- uv_loop_t Loop;
- auto err = uv_loop_init(&Loop);
- if (err != 0) {
- std::cerr << "Could not init loop" << std::endl;
- return false;
- }
-
- {
- cm::uv_async_ptr signal;
- signal.init(Loop, &signal_reset_fn, &signal);
-
- std::thread([&] {
- std::this_thread::sleep_for(std::chrono::seconds(2));
- signal.send();
- }).detach();
-
- if (uv_run(&Loop, UV_RUN_DEFAULT) != 0) {
- std::cerr << "Unclean exit state in testAsyncDtor" << std::endl;
- return false;
- }
-
- if (signal.get()) {
- std::cerr << "Loop exited with signal not being cleaned up" << std::endl;
- return false;
- }
- }
-
- uv_loop_close(&Loop);
-
- return true;
-}
-
-static void signal_fn(uv_async_t*)
-{
-}
-
-// Async dtor is sort of a pain; since it locks a mutex we must be sure its
-// dtor always calls reset otherwise the mutex is deleted then locked.
-static bool testAsyncDtor()
-{
- uv_loop_t Loop;
- auto err = uv_loop_init(&Loop);
- if (err != 0) {
- std::cerr << "Could not init loop" << std::endl;
- return false;
- }
-
- {
- cm::uv_async_ptr signal;
- signal.init(Loop, signal_fn);
- }
-
- if (uv_run(&Loop, UV_RUN_DEFAULT) != 0) {
- std::cerr << "Unclean exit state in testAsyncDtor" << std::endl;
- return false;
- }
-
- uv_loop_close(&Loop);
-
- return true;
-}
-
-// Async needs a relatively stateful deleter; make sure that is properly
-// accounted for and doesn't try to hold on to invalid state when it is
-// moved
-static bool testAsyncMove()
-{
- uv_loop_t Loop;
- auto err = uv_loop_init(&Loop);
- if (err != 0) {
- std::cerr << "Could not init loop" << std::endl;
- return false;
- }
-
- {
- cm::uv_async_ptr signal;
- {
- cm::uv_async_ptr signalTmp;
- signalTmp.init(Loop, signal_fn);
- signal = std::move(signalTmp);
- }
- }
-
- if (uv_run(&Loop, UV_RUN_DEFAULT) != 0) {
- std::cerr << "Unclean exit state in testAsyncDtor" << std::endl;
- return false;
- }
-
- uv_loop_close(&Loop);
- return true;
-}
-
-// When a type is castable to another uv type (pipe -> stream) here,
-// and the deleter is convertible as well, we should allow moves from
-// one type to the other.
-static bool testCrossAssignment()
-{
- uv_loop_t Loop;
- auto err = uv_loop_init(&Loop);
- if (err != 0) {
- std::cerr << "Could not init loop" << std::endl;
- return false;
- }
-
- {
- cm::uv_pipe_ptr pipe;
- pipe.init(Loop, 0);
-
- cm::uv_stream_ptr stream = std::move(pipe);
- if (pipe.get()) {
- std::cerr << "Move should be sure to invalidate the previous ptr"
- << std::endl;
- return false;
- }
- cm::uv_handle_ptr handle = std::move(stream);
- if (stream.get()) {
- std::cerr << "Move should be sure to invalidate the previous ptr"
- << std::endl;
- return false;
- }
- }
-
- if (uv_run(&Loop, UV_RUN_DEFAULT) != 0) {
- std::cerr << "Unclean exit state in testCrossAssignment" << std::endl;
- return false;
- }
-
- uv_loop_close(&Loop);
- return true;
-}
-
-// This test can't fail at run time; but this makes sure we have all our move
-// ctors created correctly.
-static bool testAllMoves()
-{
- using namespace cm;
- struct allTypes
- {
- uv_stream_ptr _7;
- uv_tty_ptr _9;
- uv_pipe_ptr _12;
- uv_async_ptr _13;
- uv_signal_ptr _14;
- uv_handle_ptr _15;
- };
-
- allTypes a;
- allTypes b(std::move(a));
- allTypes c = std::move(b);
- return true;
-};
-
-int testUVRAII(int, char** const)
-{
- if ((testAsyncShutdown() &&
- testAsyncDtor() & testAsyncMove() & testCrossAssignment() &
- testAllMoves()) == 0) {
- return -1;
- }
- return 0;
-}