4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
6 // The contents of this file are subject to the Fraunhofer FOKUS Public License
7 // Version 1.0 (the "License"); you may not use this file except in compliance
8 // with the License. You may obtain a copy of the License at
9 // http://senf.berlios.de/license.html
11 // The Fraunhofer FOKUS Public License Version 1.0 is based on,
12 // but modifies the Mozilla Public License Version 1.1.
13 // See the full license text for the amendments.
15 // Software distributed under the License is distributed on an "AS IS" basis,
16 // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
17 // for the specific language governing rights and limitations under the License.
19 // The Original Code is Fraunhofer FOKUS code.
21 // The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V.
22 // (registered association), Hansastraße 27 c, 80686 Munich, Germany.
23 // All Rights Reserved.
26 // Stefan Bund <g0dil@berlios.de>
29 \brief FileHandle unit tests */
31 //#include "FileHandle.test.hh"
32 //#include "FileHandle.test.ih"
38 #include "FileHandle.hh"
40 #include <senf/Utils/auto_unit_test.hh>
41 #include <boost/test/test_tools.hpp>
44 //-/////////////////////////////////////////////////////////////////////////////////////////////////
47 class FHandle : public senf::FileHandle
52 : senf::FileHandle(std::auto_ptr<senf::FileBody>(
53 new senf::FileBody(fd))) {}
54 FHandle(std::string const & name)
55 : senf::FileHandle(std::auto_ptr<senf::FileBody>(
56 new senf::FileBody()))
58 int rv = ::open(name.c_str(),O_RDWR|O_NONBLOCK) ;
60 throw senf::SystemException();
66 SENF_AUTO_UNIT_TEST(fileHandle)
70 FHandle fh("/dev/null");
71 BOOST_CHECK(fh.fd() != -1);
72 BOOST_CHECK(fh.valid());
77 BOOST_CHECK( ! fh2.valid() );
79 BOOST_CHECK_EQUAL(fh.fd(), fh2.fd());
81 BOOST_CHECK(fh.writeable());
82 SENF_CHECK_NO_THROW(fh.close());
83 BOOST_CHECK_THROW(fh.close(),senf::SystemException);
84 SENF_CHECK_NO_THROW(fh.terminate());
88 FHandle fh("/dev/zero");
89 BOOST_CHECK(fh.readable());
94 BOOST_REQUIRE(pipe(fds) == 0);
97 BOOST_CHECK(!fh.readable());
99 // Set non-blocking IO and fill the pipe buffer
100 int flags = fcntl(fds[1],F_GETFL,0);
102 BOOST_FAIL(strerror(errno));
103 if (fcntl(fds[1],F_SETFL,flags|O_NONBLOCK) == -1)
104 BOOST_FAIL(strerror(errno));
106 ::memset(buffer, 0, sizeof(buffer));
107 while (write(fds[1],buffer,1024) == 1024) ;
110 BOOST_CHECK(!fh.writeable());
113 catch (std::exception const & ex) {
114 BOOST_FAIL(ex.what());
118 //-/////////////////////////////////////////////////////////////////////////////////////////////////
125 // c-file-style: "senf"
126 // indent-tabs-mode: nil
127 // ispell-local-dictionary: "american"
128 // compile-command: "scons -u test"
129 // comment-column: 40