WLANPacket: some more renaming
[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.test unit tests */
25
26 // Custom includes
27
28 #include "../../Packets/Packets.hh"
29 #include "../../Utils/auto_unit_test.hh"
30 #include <boost/test/test_tools.hpp>
31 #include "WLANPacket.hh"
32
33 /* test parser with a data frame */
34 BOOST_AUTO_UNIT_TEST(WLANPacket_dataFrame_packet)
35 {
36     unsigned char data[] = {
37             0x88, 0x01, 0x00, 0x00, 0x00, 0x1a,             //header
38             0x4d, 0x3e, 0xc7, 0x5c, 0x00, 0x0b, 0x6b, 0x57,
39             0x06, 0xb0, 0x00, 0x18, 0x4d, 0x6e, 0x78, 0x48,
40             0x30, 0x00, 0x01, 0x00,
41             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //dummy data
42             0x38, 0x39, 0x30, 0x31                          //trailer
43     };
44
45     senf::WLANPacket p (senf::WLANPacket::create(data));
46
47     BOOST_CHECK_EQUAL( p->version(),        0u    );
48     BOOST_CHECK_EQUAL( p->type(),           2u    );
49     BOOST_CHECK_EQUAL( p->subtype(),        8u    );
50     BOOST_CHECK_EQUAL( p->toDS(),           true  );
51     BOOST_CHECK_EQUAL( p->fromDS(),         false );
52     BOOST_CHECK_EQUAL( p->moreFrag(),       false );
53     BOOST_CHECK_EQUAL( p->retry(),          false );
54     BOOST_CHECK_EQUAL( p->pwrMgt(),         false );
55     BOOST_CHECK_EQUAL( p->moreData(),       false );
56     BOOST_CHECK_EQUAL( p->protectedFrame(), false );
57     BOOST_CHECK_EQUAL( p->order(),          false );
58
59     BOOST_CHECK_EQUAL( p->duration(),       0u    );
60
61     BOOST_CHECK_EQUAL( 
62             p->dataFrame().destinationAddress().value(),
63             senf::MACAddress::from_string("00:18:4d:6e:78:48") );
64     BOOST_CHECK_EQUAL( 
65             p->dataFrame().sourceAddress().value(),
66             senf::MACAddress::from_string("00:0b:6b:57:06:b0") );
67     BOOST_CHECK_EQUAL( 
68             p->dataFrame().bssid().value(),
69             senf::MACAddress::from_string("00:1a:4d:3e:c7:5c") );
70
71     BOOST_CHECK_EQUAL( 
72             p->dataFrame().bssid().value(), 
73             p->dataFrame().receiverAddress().value() );
74     BOOST_CHECK_EQUAL( 
75             p->dataFrame().transmitterAddress().value(), 
76             p->dataFrame().sourceAddress().value() );
77
78     BOOST_CHECK_EQUAL( p->dataFrame().sequenceNumber(), 3u );
79     BOOST_CHECK_EQUAL( p->dataFrame().fragmentNumber(), 0u );
80 }
81
82
83 /* test parser with creating a data frame*/
84 BOOST_AUTO_UNIT_TEST(WLANPacket_dataFrame_create)
85 {
86     senf::WLANPacket p (senf::WLANPacket::create());
87
88     SENF_CHECK_NO_THROW( p->init_dataFrame() );
89     SENF_CHECK_NO_THROW( p->dataFrame().bssid() = senf::MACAddress::from_string("00:1a:4d:3e:c7:5c") );
90     BOOST_CHECK_EQUAL( p->type(), 2u );
91 }
92
93
94 /* test parser with a beacon frame */
95 BOOST_AUTO_UNIT_TEST(WLANPacket_beaconFrame_packet)
96 {
97     unsigned char data[] = {
98             0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
99             0xff, 0xff, 0x00, 0x1a, 0x4d, 0x3e, 0xc7, 0x5c,
100             0x00, 0x1a, 0x4d, 0x3e, 0xc7, 0x5c, 0xe0, 0x12,
101             0x38, 0xa0, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00,
102             0x64, 0x00, 0x01, 0x05, 0x00, 0x05, 0x62, 0x6f,
103             0x78, 0x43, 0x31, 0x01, 0x08, 0x8c, 0x12, 0x98,
104             0x24, 0xb0, 0x48, 0x60, 0x6c, 0x03, 0x01, 0x40,
105             0x05, 0x04, 0x00, 0x01, 0x00, 0x00, 0x07, 0x2a,
106             0x4e, 0x41, 0x49, 0x24, 0x01, 0x11, 0x28, 0x01,
107             0x11, 0x2c, 0x01, 0x11, 0x30, 0x01, 0x11, 0x34,
108             0x01, 0x17, 0x38, 0x01, 0x17, 0x3c, 0x01, 0x17,
109             0x40, 0x01, 0x17, 0x95, 0x01, 0x1e, 0x99, 0x01,
110             0x1e, 0x9d, 0x01, 0x1e, 0xa1, 0x01, 0x1e, 0xa5,
111             0x01, 0x1e, 0x20, 0x01, 0x00, 0xdd, 0x18, 0x00,
112             0x50, 0xf2, 0x02, 0x01, 0x01, 0x81, 0x00, 0x02,
113             0xa3, 0x40, 0x00, 0x27, 0xa4, 0x00, 0x00, 0x42,
114             0x43, 0x5e, 0x00, 0x62, 0x32, 0x2f, 0x00, 0xa0,
115             0x00, 0xdd, 0x09, 0x00, 0x03, 0x7f, 0x01, 0x01,
116             0x00, 0x24, 0xff, 0x7f, 0x87, 0x07, 0x1f, 0xf5,
117     };
118
119     senf::WLANPacket p (senf::WLANPacket::create(data));
120
121     BOOST_CHECK_EQUAL( p->version(),        0u    );
122     BOOST_CHECK_EQUAL( p->type(),           0u    );
123     BOOST_CHECK_EQUAL( p->subtype(),        8u    );
124     BOOST_CHECK_EQUAL( p->toDS(),           false );
125     BOOST_CHECK_EQUAL( p->fromDS(),         false );
126     BOOST_CHECK_EQUAL( p->moreFrag(),       false );
127     BOOST_CHECK_EQUAL( p->retry(),          false );
128     BOOST_CHECK_EQUAL( p->pwrMgt(),         false );
129     BOOST_CHECK_EQUAL( p->moreData(),       false );
130     BOOST_CHECK_EQUAL( p->protectedFrame(), false );
131     BOOST_CHECK_EQUAL( p->order(),          false );
132     BOOST_CHECK_EQUAL( p->duration(),       0u    );
133
134     BOOST_CHECK_EQUAL( p->is_mgtFrame(),    true  );
135
136     BOOST_CHECK_EQUAL( 
137             p->mgtFrame().destinationAddress().value(),
138             senf::MACAddress::from_string("ff:ff:ff:ff:ff:ff") );
139     BOOST_CHECK_EQUAL( 
140             p->mgtFrame().sourceAddress().value(),
141             senf::MACAddress::from_string("00:1a:4d:3e:c7:5c") );
142     BOOST_CHECK_EQUAL( 
143             p->mgtFrame().bssid().value(),
144             senf::MACAddress::from_string("00:1a:4d:3e:c7:5c") );
145     
146     BOOST_CHECK_EQUAL( p->mgtFrame().sequenceNumber(), 302u );
147     BOOST_CHECK_EQUAL( p->mgtFrame().fragmentNumber(), 0u   );
148
149     BOOST_CHECK_EQUAL( p->fcs(), 0x87071ff5 );
150 }
151
152
153 /* test parser with creating a beacon frame*/
154 BOOST_AUTO_UNIT_TEST(WLANPacket_mgtFrame_create)
155 {
156     senf::WLANPacket p (senf::WLANPacket::create());
157
158     SENF_CHECK_NO_THROW( p->init_mgtFrame() );
159     SENF_CHECK_NO_THROW(
160             p->mgtFrame().destinationAddress() = senf::MACAddress::from_string("ff:ff:ff:ff:ff:ff")
161     );
162     SENF_CHECK_NO_THROW(
163             p->mgtFrame().sourceAddress() = senf::MACAddress::from_string("00:1a:4d:3e:c7:5c")
164     );
165     SENF_CHECK_NO_THROW(
166             p->mgtFrame().bssid() = senf::MACAddress::from_string("00:1a:4d:3e:c7:5c")
167     );
168
169     BOOST_CHECK_EQUAL( p->type(), 0u );
170 }
171
172
173 /* test parser with an ACK frame*/
174 BOOST_AUTO_UNIT_TEST(WLANPacket_ctrlFrame_packet)
175 {
176     unsigned char data[] = {
177             0xd4, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x6b, 0x57,
178             0x06, 0xb0, 0x4f, 0xda
179     };
180
181     senf::WLANPacket p (senf::WLANPacket::create(data));
182
183     BOOST_CHECK_EQUAL( p->version(),        0u    );
184     BOOST_CHECK_EQUAL( p->type(),           1u    );
185     BOOST_CHECK_EQUAL( p->subtype(),        13u   );
186     BOOST_CHECK_EQUAL( p->toDS(),           false );
187     BOOST_CHECK_EQUAL( p->fromDS(),         false );
188     BOOST_CHECK_EQUAL( p->moreFrag(),       false );
189     BOOST_CHECK_EQUAL( p->retry(),          false );
190     BOOST_CHECK_EQUAL( p->pwrMgt(),         false );
191     BOOST_CHECK_EQUAL( p->moreData(),       false );
192     BOOST_CHECK_EQUAL( p->protectedFrame(), false );
193     BOOST_CHECK_EQUAL( p->order(),          false );
194
195     BOOST_CHECK_EQUAL( p->duration(),       0u    );
196
197     BOOST_CHECK_EQUAL( 
198             p->ctrlFrame().receiverAddress().value(),
199             senf::MACAddress::from_string("00:0b:6b:57:06:b0") );
200 }
201
202
203 /* test parser with creating an ACK frame*/
204 BOOST_AUTO_UNIT_TEST(WLANPacket_ctrlFrame_create)
205 {
206     senf::WLANPacket p (senf::WLANPacket::create()) ;
207 //    std::cout << unsigned( senf::init_bytes<senf::WLANPacketParser_CtrlFrameParser>::value ) << "\n";
208     SENF_CHECK_NO_THROW(p->init_ctrlFrame());
209 //    std::cout << unsigned( senf::init_bytes<senf::WLANPacketParser_CtrlFrameParser>::value ) << "\n";
210     p->ctrlFrame().receiverAddress() = senf::MACAddress::from_string("00:1a:4d:3e:c7:5c");
211     p->ctrlFrame().set_ack();
212     BOOST_CHECK_EQUAL( p->type(), 1u);
213     BOOST_CHECK_EQUAL( p->subtype(), 13u);
214 }
215