X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;ds=sidebyside;f=src%2Ftest_pipe.cpp;h=162e673b13ab5014b63aa2fc640c8d6598249c9c;hb=2b84829b69bc668745a1fed29e8a0447eecce811;hp=40c67d4da7fa1407968f9bc55f4de4cbb46bbe71;hpb=77dee8966dd1304a0fb8540c3fc68d02dc6ce84a;p=metaproxy-moved-to-github.git diff --git a/src/test_pipe.cpp b/src/test_pipe.cpp index 40c67d4..162e673 100644 --- a/src/test_pipe.cpp +++ b/src/test_pipe.cpp @@ -1,12 +1,24 @@ -/* $Id: test_pipe.cpp,v 1.4 2005-12-02 12:21:07 adam Exp $ - Copyright (c) 2005, Index Data. +/* $Id: test_pipe.cpp,v 1.9 2007-02-19 12:51:08 adam Exp $ + Copyright (c) 2005-2007, Index Data. -%LICENSE% + See the LICENSE file for details */ #include "config.hpp" +#include +#include -#include +#if HAVE_UNISTD_H +#include +#endif + +#ifdef WIN32 +#include +#endif + +#if HAVE_SYS_SOCKET_H +#include +#endif #include #include @@ -18,44 +30,75 @@ #include using namespace boost::unit_test; +namespace mp = metaproxy_1; class Timer : public yazpp_1::ISocketObserver { private: yazpp_1::ISocketObservable *m_obs; - yp2::Pipe m_pipe; + mp::Pipe m_pipe; + bool m_data; bool m_timeout; public: Timer(yazpp_1::ISocketObservable *obs, int duration); void socketNotify(int event); bool timeout() { return m_timeout; }; + bool data() { return m_data; }; }; Timer::Timer(yazpp_1::ISocketObservable *obs, int duration) : - m_obs(obs), m_pipe(9122), m_timeout(false) + m_obs(obs), m_pipe(9122), m_data(false), m_timeout(false) { obs->addObserver(m_pipe.read_fd(), this); obs->maskObserver(this, yazpp_1::SOCKET_OBSERVE_READ); obs->timeoutObserver(this, duration); +#ifdef WIN32 + int r = send(m_pipe.write_fd(), "", 1, 0); +#else + int r = write(m_pipe.write_fd(), "", 1); +#endif + if (r == -1) + { + std::cout << "Error write: "<< strerror(errno) << std::endl; + } + BOOST_CHECK_EQUAL(write(m_pipe.write_fd(), "", 1), 1); } void Timer::socketNotify(int event) { - m_timeout = true; - m_obs->deleteObserver(this); + if (event & yazpp_1::SOCKET_OBSERVE_READ) + { + m_data = true; + char buf[3]; +#ifdef WIN32 + int r = recv(m_pipe.read_fd(), buf, 1, 0); +#else + int r = read(m_pipe.read_fd(), buf, 1); +#endif + if (r == -1) + { + std::cout << "Error read: "<< strerror(errno) << std::endl; + } + } + else if (event && yazpp_1::SOCKET_OBSERVE_TIMEOUT) + { + m_timeout = true; + m_obs->deleteObserver(this); + } } BOOST_AUTO_UNIT_TEST( test_pipe_1 ) { yazpp_1::SocketManager mySocketManager; - Timer t(&mySocketManager, 0); + Timer t(&mySocketManager, 1); while (mySocketManager.processEvent() > 0) if (t.timeout()) break; BOOST_CHECK(t.timeout()); + BOOST_CHECK(t.data()); } /*