Fix SCons 1.2.0 build failure
[senf.git] / Packets / 80211Bundle / WLANPacket.test.cc
1 // $Id$
2 //
3 // Copyright (C) 2008
4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
5 // Competence Center NETwork research (NET), St. Augustin, GERMANY
6 //     Christian Niephaus <cni@berlios.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 /** \file
24     \brief WLANPacket unit tests */
25
26 // Custom includes
27 #include "WLANPacket.hh"
28 #include "../../Packets/Packets.hh"
29 #include "../DefaultBundle/LlcSnapPacket.hh"
30
31 #include "../../Utils/auto_unit_test.hh"
32 #include <boost/test/test_tools.hpp>
33
34 ///////////////////////////////cc.p////////////////////////////////////////
35 /* test parser with a data frame */
36 BOOST_AUTO_UNIT_TEST(WLANPacket_dataFrame_packet)
37 {
38     unsigned char data[] = {
39             0x88, 0x01, 0x00, 0x00, 0x00, 0x1a,             //header
40             0x4d, 0x3e, 0xc7, 0x5c, 0x00, 0x0b, 0x6b, 0x57,
41             0x06, 0xb0, 0x00, 0x18, 0x4d, 0x6e, 0x78, 0x48,
42             0x30, 0x00, 0x01, 0x00,
43             0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00,  //llc header
44     };
45
46     senf::WLANPacket_DataFrame p (senf::WLANPacket_DataFrame::create(data));
47
48     BOOST_CHECK_EQUAL( p->version(),        0u    );
49     BOOST_CHECK_EQUAL( p->type(),           2u    );
50     BOOST_CHECK_EQUAL( p->subtype(),        8u    );
51     BOOST_CHECK_EQUAL( p->toDS(),           true  );
52     BOOST_CHECK_EQUAL( p->fromDS(),         false );
53     BOOST_CHECK_EQUAL( p->moreFrag(),       false );
54     BOOST_CHECK_EQUAL( p->retry(),          false );
55     BOOST_CHECK_EQUAL( p->pwrMgt(),         false );
56     BOOST_CHECK_EQUAL( p->moreData(),       false );
57     BOOST_CHECK_EQUAL( p->protectedFrame(), false );
58     BOOST_CHECK_EQUAL( p->order(),          false );
59
60     BOOST_CHECK_EQUAL( p->duration(),       0u    );
61
62     BOOST_CHECK_EQUAL( p->destinationAddress().value(),
63             senf::MACAddress::from_string("00:18:4d:6e:78:48") );
64     BOOST_CHECK_EQUAL( p->sourceAddress().value(),
65                        senf::MACAddress::from_string("00:0b:6b:57:06:b0") );
66     BOOST_CHECK_EQUAL (p->bssid().value(),
67                        senf::MACAddress::from_string("00:1a:4d:3e:c7:5c") );
68
69     BOOST_CHECK_EQUAL( p->bssid().value(),
70                        p->receiverAddress().value() );
71     BOOST_CHECK_EQUAL( p->transmitterAddress().value(),
72                        p->sourceAddress().value() );
73
74     BOOST_CHECK_EQUAL( p->sequenceNumber(), 3u );
75     BOOST_CHECK_EQUAL( p->fragmentNumber(), 0u );
76
77     std::ostringstream oss (std::ostringstream::out);
78     SENF_CHECK_NO_THROW( p.dump(oss) );
79
80     BOOST_REQUIRE( p.next(senf::nothrow) );
81     BOOST_CHECK( p.next().is<senf::LlcSnapPacket>() );
82 }
83
84
85 /* test parser with creating a data frame*/
86 BOOST_AUTO_UNIT_TEST(WLANPacket_dataFrame_create)
87 {
88     senf::WLANPacket_DataFrame p (senf::WLANPacket_DataFrame::create());
89
90     SENF_CHECK_NO_THROW( p->bssid() = senf::MACAddress::from_string("00:1a:4d:3e:c7:5c") );
91     BOOST_CHECK_EQUAL( p->type(), 2u );
92 }
93
94
95 /* test parser with a beacon frame */
96 BOOST_AUTO_UNIT_TEST(WLANPacket_beaconFrame_packet)
97 {
98     unsigned char data[] = {
99             0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
100             0xff, 0xff, 0x00, 0x1a, 0x4d, 0x3e, 0xc7, 0x5c,
101             0x00, 0x1a, 0x4d, 0x3e, 0xc7, 0x5c, 0xe0, 0x12,
102             0x38, 0xa0, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00,
103             0x64, 0x00, 0x01, 0x05, 0x00, 0x05, 0x62, 0x6f,
104             0x78, 0x43, 0x31, 0x01, 0x08, 0x8c, 0x12, 0x98,
105             0x24, 0xb0, 0x48, 0x60, 0x6c, 0x03, 0x01, 0x40,
106             0x05, 0x04, 0x00, 0x01, 0x00, 0x00, 0x07, 0x2a,
107             0x4e, 0x41, 0x49, 0x24, 0x01, 0x11, 0x28, 0x01,
108             0x11, 0x2c, 0x01, 0x11, 0x30, 0x01, 0x11, 0x34,
109             0x01, 0x17, 0x38, 0x01, 0x17, 0x3c, 0x01, 0x17,
110             0x40, 0x01, 0x17, 0x95, 0x01, 0x1e, 0x99, 0x01,
111             0x1e, 0x9d, 0x01, 0x1e, 0xa1, 0x01, 0x1e, 0xa5,
112             0x01, 0x1e, 0x20, 0x01, 0x00, 0xdd, 0x18, 0x00,
113             0x50, 0xf2, 0x02, 0x01, 0x01, 0x81, 0x00, 0x02,
114             0xa3, 0x40, 0x00, 0x27, 0xa4, 0x00, 0x00, 0x42,
115             0x43, 0x5e, 0x00, 0x62, 0x32, 0x2f, 0x00, 0xa0,
116             0x00, 0xdd, 0x09, 0x00, 0x03, 0x7f, 0x01, 0x01,
117             0x00, 0x24, 0xff, 0x7f, 
118     };
119
120     senf::WLANPacket_MgtFrame p (senf::WLANPacket_MgtFrame::create(data));
121
122     BOOST_CHECK_EQUAL( p->version(),        0u    );
123     BOOST_CHECK_EQUAL( p->type(),           0u    );
124     BOOST_CHECK_EQUAL( p->subtype(),        8u    );
125     BOOST_CHECK_EQUAL( p->toDS(),           false );
126     BOOST_CHECK_EQUAL( p->fromDS(),         false );
127     BOOST_CHECK_EQUAL( p->moreFrag(),       false );
128     BOOST_CHECK_EQUAL( p->retry(),          false );
129     BOOST_CHECK_EQUAL( p->pwrMgt(),         false );
130     BOOST_CHECK_EQUAL( p->moreData(),       false );
131     BOOST_CHECK_EQUAL( p->protectedFrame(), false );
132     BOOST_CHECK_EQUAL( p->order(),          false );
133     BOOST_CHECK_EQUAL( p->duration(),       0u    );
134
135     BOOST_CHECK_EQUAL( p->destinationAddress().value(),
136                        senf::MACAddress::from_string("ff:ff:ff:ff:ff:ff") );
137     BOOST_CHECK_EQUAL( p->sourceAddress().value(),
138                        senf::MACAddress::from_string("00:1a:4d:3e:c7:5c") );
139     BOOST_CHECK_EQUAL( p->bssid().value(),
140                        senf::MACAddress::from_string("00:1a:4d:3e:c7:5c") );
141
142     BOOST_CHECK_EQUAL( p->sequenceNumber(), 302u );
143     BOOST_CHECK_EQUAL( p->fragmentNumber(), 0u   );
144 }
145
146
147 /* test parser with creating a beacon frame*/
148 BOOST_AUTO_UNIT_TEST(WLANPacket_mgtFrame_create)
149 {
150     senf::WLANPacket_MgtFrame p (senf::WLANPacket_MgtFrame::create());
151
152     SENF_CHECK_NO_THROW(
153             p->destinationAddress() = senf::MACAddress::from_string("ff:ff:ff:ff:ff:ff")
154     );
155     SENF_CHECK_NO_THROW(
156             p->sourceAddress() = senf::MACAddress::from_string("00:1a:4d:3e:c7:5c")
157     );
158     SENF_CHECK_NO_THROW(
159             p->bssid() = senf::MACAddress::from_string("00:1a:4d:3e:c7:5c")
160     );
161
162     BOOST_CHECK_EQUAL( p->type(), 0u );
163 }
164
165
166 /* test parser with an ACK frame*/
167 BOOST_AUTO_UNIT_TEST(WLANPacket_ctrlFrame_packet)
168 {
169     unsigned char data[] = {
170             0xd4, 0x00, 0x00, 0x00, 
171             0x00, 0x0b, 0x6b, 0x57, 0x06, 0xb0, 
172             0x4f, 0xda, // What is this ?
173     };
174
175     senf::WLANPacket_CtrlFrame p (senf::WLANPacket_CtrlFrame::create(data));
176
177     BOOST_CHECK_EQUAL( p->version(),        0u    );
178     BOOST_CHECK_EQUAL( p->type(),           1u    );
179     BOOST_CHECK_EQUAL( p->subtype(),        13u   );
180     BOOST_CHECK_EQUAL( p->toDS(),           false );
181     BOOST_CHECK_EQUAL( p->fromDS(),         false );
182     BOOST_CHECK_EQUAL( p->moreFrag(),       false );
183     BOOST_CHECK_EQUAL( p->retry(),          false );
184     BOOST_CHECK_EQUAL( p->pwrMgt(),         false );
185     BOOST_CHECK_EQUAL( p->moreData(),       false );
186     BOOST_CHECK_EQUAL( p->protectedFrame(), false );
187     BOOST_CHECK_EQUAL( p->order(),          false );
188
189     BOOST_CHECK_EQUAL( p->duration(),       0u    );
190
191     BOOST_CHECK_EQUAL( p->receiverAddress().value(),
192                        senf::MACAddress::from_string("00:0b:6b:57:06:b0") );
193 }
194
195 /* test parser with creating an ACK frame*/
196 BOOST_AUTO_UNIT_TEST(WLANPacket_ctrlFrame_create)
197 {
198     senf::WLANPacket_CtrlFrame p (senf::WLANPacket_CtrlFrame::create()) ;
199     p->receiverAddress() = senf::MACAddress::from_string("00:1a:4d:3e:c7:5c");
200     p->set_ack();
201     BOOST_CHECK_EQUAL( p->type(), 1u);
202     BOOST_CHECK_EQUAL( p->subtype(), 13u);
203 }
204
205 \f
206 // Local Variables:
207 // mode: c++
208 // fill-column: 100
209 // c-file-style: "senf"
210 // indent-tabs-mode: nil
211 // ispell-local-dictionary: "american"
212 // compile-command: "scons -u test"
213 // comment-column: 40
214 // End: