Go to the documentation of this file.00001 #include <boost/test/auto_unit_test.hpp>
00002
00003 #include "testsuite.hh"
00004 #include <utilmm/system/system.hh>
00005 #include <utilmm/system/socket.hh>
00006 #include <utilmm/system/endian.hh>
00007 #include <boost/filesystem/operations.hpp>
00008 #include <boost/lexical_cast.hpp>
00009 #include <iostream>
00010 #include <errno.h>
00011 using namespace utilmm;
00012 using std::string;
00013
00014 BOOST_AUTO_TEST_CASE( test_swap_endian )
00015 {
00016 BOOST_REQUIRE_EQUAL(0x10, endian::swap<int8_t>(0x10));
00017 BOOST_REQUIRE_EQUAL(0x1032, endian::swap<int16_t>(0x3210));
00018 BOOST_REQUIRE_EQUAL(0x10325476, endian::swap<int32_t>(0x76543210));
00019 BOOST_REQUIRE_EQUAL(0x1032547698badcfeLL,endian::swap<int64_t>(0xfedcba9876543210LL));
00020 }
00021
00022 BOOST_AUTO_TEST_CASE( test_filetools )
00023 {
00024
00025 int files[2];
00026 pipe(files);
00027 { auto_close close_read(files[0]); }
00028 BOOST_REQUIRE( close(files[0]) == -1 && errno == EBADF );
00029
00030 {
00031 auto_close close_write(files[1]);
00032 BOOST_REQUIRE(close_write.handle<int>() == files[1]);
00033 BOOST_REQUIRE_THROW(close_write.handle<FILE*>(), std::bad_cast);
00034 close_write.detach();
00035 }
00036 BOOST_REQUIRE( close(files[1]) == 0 );
00037 }
00038
00039 BOOST_AUTO_TEST_CASE( test_tempfile )
00040 {
00041 boost::filesystem::path tmppath;
00042 {
00043 tempfile file("bla");
00044 tmppath = file.path();
00045 BOOST_REQUIRE(boost::filesystem::exists(tmppath));
00046 }
00047 BOOST_REQUIRE(!boost::filesystem::exists(tmppath));
00048
00049 {
00050 tempfile file("blo");
00051 tmppath = file.path();
00052 std::cout << tmppath.native_file_string() << std::endl;
00053 BOOST_REQUIRE(boost::filesystem::exists(tmppath));
00054 file.detach();
00055 BOOST_REQUIRE(boost::filesystem::exists(tmppath));
00056 BOOST_REQUIRE_EQUAL(file.handle(), (FILE*) 0);
00057 }
00058 BOOST_REQUIRE(boost::filesystem::exists(tmppath));
00059 boost::filesystem::remove(tmppath);
00060 }
00061
00062 BOOST_AUTO_TEST_CASE( test_socket )
00063 {
00064
00065
00066
00067 srand(time(0));
00068 std::string port = boost::lexical_cast<std::string>(static_cast<long long>(rand()) * 30000 / RAND_MAX + 30000);
00069 std::string other_port = boost::lexical_cast<std::string>(static_cast<long long>(rand()) * 30000 / RAND_MAX + 30000);
00070
00071
00072 server_socket server(server_socket::Inet, server_socket::Stream, string("0.0.0.0:") + port);
00073
00074 BOOST_REQUIRE_THROW(server_socket another_server(server_socket::Inet, server_socket::Stream, string("0.0.0.0:") + port), unix_error);
00075
00076
00077 socket client(socket::Inet, socket::Stream, "localhost:" + port);
00078
00079 BOOST_REQUIRE_THROW(socket another_client(socket::Inet, socket::Stream, string("127.0.0.1:") + other_port), unix_error);
00080
00081 server.wait();
00082 BOOST_REQUIRE(server.try_wait());
00083 std::auto_ptr<socket> accepted(server.accept());
00084
00085
00086 BOOST_REQUIRE(!server.try_wait());
00087
00088
00089
00090 accepted->write("blabla", 7);
00091 char buffer[7];
00092
00093
00094 client.wait(socket::WaitRead);
00095
00096 client.read(buffer, 7);
00097 BOOST_REQUIRE(!client.try_wait(socket::WaitRead));
00098 BOOST_REQUIRE_EQUAL(std::string(buffer), std::string("blabla"));
00099 }