X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Ftest_pipe.cpp;h=0f72f7c0851ec6125236c8bc6d37048f419bb1c9;hb=586d78659d671683f33ec55f4a7d32b28e345ccd;hp=e4f09c86d950ddc28e5a0050ac8bfe7228da682c;hpb=7ccf90cb13451e3d024eff6239815f92aff6e51b;p=metaproxy-moved-to-github.git diff --git a/src/test_pipe.cpp b/src/test_pipe.cpp index e4f09c8..0f72f7c 100644 --- a/src/test_pipe.cpp +++ b/src/test_pipe.cpp @@ -1,70 +1,125 @@ -/* $Id: test_pipe.cpp,v 1.1 2005-11-07 12:32:01 adam Exp $ - Copyright (c) 2005, Index Data. +/* This file is part of Metaproxy. + Copyright (C) Index Data -%LICENSE% - */ +Metaproxy is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +Metaproxy is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ #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 -#include "util.hpp" +#include #include "pipe.hpp" #define BOOST_AUTO_TEST_MAIN +#define BOOST_TEST_DYN_LINK #include using namespace boost::unit_test; +namespace mp = metaproxy_1; -class My_Timer_Thread : public yazpp_1::ISocketObserver { +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: - My_Timer_Thread(yazpp_1::ISocketObservable *obs, int duration); + Timer(yazpp_1::ISocketObservable *obs, int duration); void socketNotify(int event); bool timeout() { return m_timeout; }; + bool data() { return m_data; }; }; -My_Timer_Thread::My_Timer_Thread(yazpp_1::ISocketObservable *obs, - int duration) : - m_obs(obs), m_pipe(0), m_timeout(false) +Timer::Timer(yazpp_1::ISocketObservable *obs, + int duration) : + 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(r, 1); } -void My_Timer_Thread::socketNotify(int event) +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_TEST_CASE( test_pipe_1 ) { yazpp_1::SocketManager mySocketManager; - - yp2::Pipe pipe(0); - My_Timer_Thread t(&mySocketManager, 0); + Timer t(&mySocketManager, 1); while (mySocketManager.processEvent() > 0) if (t.timeout()) break; - BOOST_CHECK (t.timeout()); + BOOST_CHECK(t.timeout()); + BOOST_CHECK(t.data()); } /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil - * c-file-style: "stroustrup" * End: * vim: shiftwidth=4 tabstop=8 expandtab */ +