Fixed whitespace in all files (no tabs)
[senf.git] / Socket / INetAddressing.test.cc
1 // $Id$
2 //
3 // Copyright (C) 2006
4 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
5 // Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
6 //     Stefan Bund <stefan.bund@fokus.fraunhofer.de>
7 //
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.
12 //
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.
17 //
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.
22
23 // Unit tests
24
25 //#include "INetAddressing.test.hh"
26 //#include "INetAddressing.test.ih"
27
28 // Custom includes
29 #include "INetAddressing.hh"
30
31 #include <boost/test/auto_unit_test.hpp>
32 #include <boost/test/test_tools.hpp>
33
34 #define prefix_
35 ///////////////////////////////cc.p////////////////////////////////////////
36
37 BOOST_AUTO_UNIT_TEST(inet4Address)
38 {
39     using senf::INet4Address;
40     using senf::InvalidINetAddressException;
41
42     {
43         INet4Address addr;
44
45         addr = "127.0.0.1:12345";
46     }
47
48     {
49         INet4Address addr1("127.0.0.1:12345");
50         INet4Address addr2(std::string("127.0.0.1:12345"));
51         INet4Address addr3("127.0.0.1",12345);
52     }
53
54     BOOST_CHECK_EQUAL( INet4Address("127.0.0.1:12345"), INet4Address("127.0.0.1",12345) );
55
56     BOOST_CHECK_THROW( INet4Address("127.0.0.1"), InvalidINetAddressException );
57     BOOST_CHECK_THROW( INet4Address("foo@bar:12345"), InvalidINetAddressException );
58     BOOST_CHECK_THROW( INet4Address("127.0.0.1:1234a"), InvalidINetAddressException );
59     BOOST_CHECK_THROW( INet4Address("foo@bar",12345), InvalidINetAddressException );
60
61     BOOST_CHECK_EQUAL( INet4Address("127.0.0.1:12345").host(), "127.0.0.1" );
62     BOOST_CHECK_EQUAL( INet4Address("127.0.0.1:12345").port(), 12345u );
63     BOOST_CHECK_EQUAL( INet4Address("127.0.0.1:12345").str(), "127.0.0.1:12345" );
64
65     {
66         INet4Address addr("127.0.0.1:12345");
67         BOOST_CHECK_EQUAL( reinterpret_cast< ::sockaddr_in * >(addr.sockaddr_p())->sin_port,
68                            htons(12345) );
69         BOOST_CHECK_EQUAL( reinterpret_cast< ::sockaddr_in * >(addr.sockaddr_p())->sin_addr.s_addr,
70                            htonl(INADDR_LOOPBACK) );
71
72         std::stringstream s;
73         s << addr;
74         BOOST_CHECK_EQUAL( s.str(), "127.0.0.1:12345" );
75     }
76 }
77
78 BOOST_AUTO_UNIT_TEST(inet6Address)
79 {
80     using senf::INet6Address;
81     using senf::INet6SocketAddress;
82     using senf::InvalidINetAddressException;
83
84     {
85         INet6Address addr1 ("0102:0304:0506:0708:090A:0B0C:0D0E:0F00");
86         BOOST_CHECK_EQUAL( addr1.addr().s6_addr[0], 1 );
87         BOOST_CHECK_EQUAL( addr1.addr().s6_addr[1], 2 );
88         BOOST_CHECK_EQUAL( addr1.addr().s6_addr[2], 3 );
89         BOOST_CHECK_EQUAL( addr1.addr().s6_addr[3], 4 );
90         BOOST_CHECK_EQUAL( addr1.addr().s6_addr[4], 5 );
91         BOOST_CHECK_EQUAL( addr1.addr().s6_addr[5], 6 );
92         BOOST_CHECK_EQUAL( addr1.addr().s6_addr[6], 7 );
93         BOOST_CHECK_EQUAL( addr1.addr().s6_addr[7], 8 );
94         BOOST_CHECK_EQUAL( addr1.addr().s6_addr[8], 9 );
95         BOOST_CHECK_EQUAL( addr1.addr().s6_addr[9], 10 );
96         BOOST_CHECK_EQUAL( addr1.addr().s6_addr[10], 11 );
97         BOOST_CHECK_EQUAL( addr1.addr().s6_addr[11], 12 );
98         BOOST_CHECK_EQUAL( addr1.addr().s6_addr[12], 13 );
99         BOOST_CHECK_EQUAL( addr1.addr().s6_addr[13], 14 );
100         BOOST_CHECK_EQUAL( addr1.addr().s6_addr[14], 15 );
101         BOOST_CHECK_EQUAL( addr1.addr().s6_addr[15], 0 );
102         INet6Address addr2;
103         BOOST_CHECK_EQUAL( addr2, "::" );
104         addr2 = "::1";
105         BOOST_CHECK( addr1 != addr2 );
106         addr1 ="::1";
107         BOOST_CHECK_EQUAL( addr1, addr2 );
108         BOOST_CHECK_EQUAL( addr1.address(),"::1" );
109         addr1.clear();
110         addr2 = "::";
111         BOOST_CHECK_EQUAL( addr1, addr2 );
112         BOOST_CHECK_THROW( addr1 = "", InvalidINetAddressException );
113         BOOST_CHECK_EQUAL( boost::lexical_cast<std::string>(addr1), "::" );
114         unsigned char data[] = { 0x12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x21, 0 };
115         INet6Address addr3 (std::make_pair(&data[0],&data[0]+sizeof(data)-1));
116         BOOST_CHECK_EQUAL( addr3, "1200::21" );
117         BOOST_CHECK_THROW( INet6Address(std::make_pair(&data[0],&data[0]+sizeof(data))),
118                            InvalidINetAddressException );
119         BOOST_CHECK_THROW( INet6Address(std::make_pair(&data[0],&data[0]+sizeof(data)-2)),
120                            InvalidINetAddressException );
121     }
122
123     {
124         INet6SocketAddress addr;
125         BOOST_CHECK_EQUAL( addr.host(), "::" );
126         BOOST_CHECK_EQUAL( addr.port(), 0u );
127         BOOST_CHECK_EQUAL( addr.iface(), "" );
128         addr = "[12::21]:12345";
129         BOOST_CHECK_EQUAL( addr.host(), "12::21" );
130         BOOST_CHECK_EQUAL( addr.port(), 12345u );
131         BOOST_CHECK_EQUAL( addr.iface(), "" );
132         BOOST_CHECK_EQUAL( addr, INet6SocketAddress("[12::21]:12345") );
133     }
134
135     {
136         INet6SocketAddress addr ("::1", 1);
137         BOOST_CHECK_EQUAL( addr, "[::1]:1" );
138         BOOST_CHECK_EQUAL( addr.iface(), "" );
139     }
140
141     {
142         INet6SocketAddress addr ("::1", 1, "lo");
143         BOOST_CHECK_EQUAL( addr, "[::1@lo]:1" );
144         BOOST_CHECK_EQUAL( addr.iface(), "lo" );
145         addr.iface("");
146         BOOST_CHECK_EQUAL( addr.iface(), "" );
147         addr.port(100u);
148         BOOST_CHECK_EQUAL( addr.port(), 100u );
149         addr.host("::2");
150         BOOST_CHECK_EQUAL( addr.host(), "::2" );
151         BOOST_CHECK_THROW( addr = "", InvalidINetAddressException );
152         BOOST_CHECK_THROW( addr = "[::1]", InvalidINetAddressException );
153         BOOST_CHECK_THROW( addr = "[::1]1234", InvalidINetAddressException );
154         addr = "[12::21@lo]:12345";
155         BOOST_CHECK_EQUAL( addr.address(), "[12::21@lo]:12345" );
156         BOOST_CHECK_EQUAL( addr.host(), "12::21" );
157         BOOST_CHECK_EQUAL( addr.port(), 12345u );
158         BOOST_CHECK_EQUAL( addr.iface(), "lo" );
159         BOOST_CHECK_EQUAL( boost::lexical_cast<std::string>(addr), "[12::21@lo]:12345" );
160     }
161 }
162
163 ///////////////////////////////cc.e////////////////////////////////////////
164 #undef prefix_
165
166 \f
167 // Local Variables:
168 // mode: c++
169 // fill-column: 100
170 // c-file-style: "senf"
171 // indent-tabs-mode: nil
172 // ispell-local-dictionary: "american"
173 // End: