4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
5 // Competence Center NETwork research (NET), St. Augustin, GERMANY
6 // Stefan Bund <g0dil@berlios.de>
8 // This program is free software; you can redistribute it and/or modify
9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation; either version 2 of the License, or
11 // (at your option) any later version.
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU General Public License for more details.
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the
20 // Free Software Foundation, Inc.,
21 // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24 \brief FileHandle unit tests */
26 //#include "FileHandle.test.hh"
27 //#include "FileHandle.test.ih"
33 #include "FileHandle.hh"
35 #include "../Utils/auto_unit_test.hh"
36 #include <boost/test/test_tools.hpp>
39 ///////////////////////////////cc.p////////////////////////////////////////
42 class FHandle : public senf::FileHandle
47 : senf::FileHandle(std::auto_ptr<senf::FileBody>(
48 new senf::FileBody(fd))) {}
49 FHandle(std::string const & name)
50 : senf::FileHandle(std::auto_ptr<senf::FileBody>(
51 new senf::FileBody()))
53 int rv = ::open(name.c_str(),O_RDWR|O_NONBLOCK) ;
55 throw senf::SystemException();
61 BOOST_AUTO_UNIT_TEST(fileHandle)
65 FHandle fh("/dev/null");
66 BOOST_CHECK(fh.fd() != -1);
67 BOOST_CHECK(fh.valid());
72 BOOST_CHECK( ! fh2.valid() );
74 BOOST_CHECK_EQUAL(fh.fd(), fh2.fd());
76 BOOST_CHECK(fh.writeable());
77 SENF_CHECK_NO_THROW(fh.close());
78 BOOST_CHECK_THROW(fh.close(),senf::SystemException);
79 SENF_CHECK_NO_THROW(fh.terminate());
83 FHandle fh("/dev/zero");
84 BOOST_CHECK(fh.readable());
89 BOOST_REQUIRE(pipe(fds) == 0);
92 BOOST_CHECK(!fh.readable());
94 // Set non-blocking IO and fill the pipe buffer
95 int flags = fcntl(fds[1],F_GETFL,0);
97 BOOST_FAIL(strerror(errno));
98 if (fcntl(fds[1],F_SETFL,flags|O_NONBLOCK) == -1)
99 BOOST_FAIL(strerror(errno));
101 ::memset(buffer, 0, sizeof(buffer));
102 while (write(fds[1],buffer,1024) == 1024) ;
105 BOOST_CHECK(!fh.writeable());
108 catch (std::exception const & ex) {
109 BOOST_FAIL(ex.what());
113 ///////////////////////////////cc.e////////////////////////////////////////
120 // c-file-style: "senf"
121 // indent-tabs-mode: nil
122 // ispell-local-dictionary: "american"
123 // compile-command: "scons -u test"
124 // comment-column: 40