Replace all relative includes with abolute ones
[senf.git] / senf / Packets / 80211Bundle / RadiotapPacket.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 RadiotapPacket unit tests */
25
26 // Custom includes
27 #include "RadiotapPacket.hh"
28 #include <senf/Packets/Packets.hh>
29
30 #include <senf/Utils/auto_unit_test.hh>
31 #include <boost/test/test_tools.hpp>
32
33 ///////////////////////////////cc.p////////////////////////////////////////
34 BOOST_AUTO_UNIT_TEST(RadiotapPacket_packet)
35 {
36     /* used madwifi 0.9.4 */
37     unsigned char data[] = {
38             0x00 ,0x00 ,0x1a ,0x00, 0x6f, 0x18, 0x00, 0x00,
39             0x02, 0xe6, 0x8a, 0xdf, 0x12, 0x00, 0x00, 0x00,
40             0x12, 0x0c, 0xc8, 0x14, 0x40, 0x01, 0xc3, 0xa0,
41             0x02, 0x23, 
42             0x00, 0x00, 0x00, 0x00,
43     };
44     senf::RadiotapPacket p (senf::RadiotapPacket::create(data));
45
46     /* mandatory fields*/
47     BOOST_CHECK_EQUAL( p->version(), 0u);
48     BOOST_CHECK_EQUAL( p->length(), 26u);
49
50     /* present flags */
51     BOOST_CHECK_EQUAL( p->tsftPresent(), true);
52     BOOST_CHECK_EQUAL( p->flagsPresent(), true);
53     BOOST_CHECK_EQUAL( p->extendedBitmaskPresent(), false);
54     BOOST_CHECK_EQUAL( p->ratePresent(), true);
55     BOOST_CHECK_EQUAL( p->channelOptionsPresent(), true);
56     BOOST_CHECK_EQUAL( p->fhssPresent(), false);
57     BOOST_CHECK_EQUAL( p->dbmAntennaSignalPresent(), true);
58     BOOST_CHECK_EQUAL( p->dbmAntennaNoisePresent(), true);
59     BOOST_CHECK_EQUAL( p->lockQualityPresent(), false);
60     BOOST_CHECK_EQUAL( p->txAttenuationPresent(), false);
61     BOOST_CHECK_EQUAL( p->dbmTxAttenuationPresent(), false);
62     BOOST_CHECK_EQUAL( p->dbTxAttenuationPresent(), false);
63     BOOST_CHECK_EQUAL( p->antennaPresent(), true);
64     BOOST_CHECK_EQUAL( p->dbAntennaSignalPresent(), true);
65     BOOST_CHECK_EQUAL( p->dbAntennaNoisePresent(), false);
66
67     /* data flieds */
68     BOOST_CHECK_EQUAL( p->tsft(), 81059833346uLL);
69     BOOST_CHECK_EQUAL( p->rate(), 12u);
70     BOOST_CHECK_EQUAL( p->channelOptions().freq(), 5320u);
71     BOOST_CHECK_EQUAL( p->dbmAntennaSignal(), -61);
72     BOOST_CHECK_EQUAL( p->dbmAntennaNoise(), -96);
73     BOOST_CHECK_EQUAL( p->antenna(), 2u);
74     BOOST_CHECK_EQUAL( p->dbAntennaSignal(), 35u);
75
76     /* flags */
77     BOOST_CHECK_EQUAL( p->flags().cfp(), false);
78     BOOST_CHECK_EQUAL( p->flags().shortPreamble(), true);
79     BOOST_CHECK_EQUAL( p->flags().wep(), false);
80     BOOST_CHECK_EQUAL( p->flags().fragmentation(), false);
81     BOOST_CHECK_EQUAL( p->flags().fcsAtEnd(), true);
82     BOOST_CHECK_EQUAL( p->flags().padding(), false);
83     BOOST_CHECK_EQUAL( p->flags().badFCS(), false);
84     BOOST_CHECK_EQUAL( p->flags().shortGI(), false);
85
86     /* channel flags */
87     BOOST_CHECK_EQUAL( p->channelOptions().ofdm(), true);
88     BOOST_CHECK_EQUAL( p->channelOptions().turbo(), false);
89     BOOST_CHECK_EQUAL( p->channelOptions().cck(), false);
90     BOOST_CHECK_EQUAL( p->channelOptions().flag5ghz(), true);
91     BOOST_CHECK_EQUAL( p->channelOptions().passive(), false);
92     BOOST_CHECK_EQUAL( p->channelOptions().cckOfdm(), false);
93     BOOST_CHECK_EQUAL( p->channelOptions().gfsk(), false);
94     BOOST_CHECK_EQUAL( p->channelOptions().gsm(), false);
95     BOOST_CHECK_EQUAL( p->channelOptions().staticTurbo(), false);
96     BOOST_CHECK_EQUAL( p->channelOptions().halfRateChannel(), false);
97     BOOST_CHECK_EQUAL( p->channelOptions().quarterRateChannel(), false);
98
99     std::ostringstream oss (std::ostringstream::out);
100     SENF_CHECK_NO_THROW( p.dump( oss));
101 }
102
103 BOOST_AUTO_UNIT_TEST(RadiotapPacket_create)
104 {
105     unsigned char data[] = {
106             0x00 ,0x00 ,0x1a ,0x00, 0x6f, 0x18, 0x00, 0x00,
107             0x02, 0xe6, 0x8a, 0xdf, 0x12, 0x00, 0x00, 0x00,
108             0x02, 0x0c, 0xc8, 0x14, 0x40, 0x01, 0xc3, 0xa0,
109             0x02, 0x23
110     };
111
112     senf::RadiotapPacket p (senf::RadiotapPacket::create());
113
114     SENF_CHECK_NO_THROW( p->init_tsft());
115     SENF_CHECK_NO_THROW( p->tsft()=81059833346uLL);
116
117     SENF_CHECK_NO_THROW( p->init_rate());
118     SENF_CHECK_NO_THROW( p->rate() = 12u);
119     SENF_CHECK_NO_THROW( p->init_dbmAntennaSignal());
120     SENF_CHECK_NO_THROW( p->dbmAntennaSignal() = -61);
121     SENF_CHECK_NO_THROW( p->init_dbmAntennaNoise());
122     SENF_CHECK_NO_THROW( p->dbmAntennaNoise() = -96);
123     SENF_CHECK_NO_THROW( p->init_antenna());
124     SENF_CHECK_NO_THROW( p->antenna() = 2u);
125     SENF_CHECK_NO_THROW( p->init_dbAntennaSignal());
126     SENF_CHECK_NO_THROW( p->dbAntennaSignal() = 35);
127
128     SENF_CHECK_NO_THROW( p->init_flags());
129     SENF_CHECK_NO_THROW( p->flags().cfp() = false);
130     SENF_CHECK_NO_THROW( p->flags().shortPreamble() = true);
131     SENF_CHECK_NO_THROW( p->flags().wep() = false);
132     SENF_CHECK_NO_THROW( p->flags().fragmentation() = false);
133     // SENF_CHECK_NO_THROW( p->flags().fcsAtEnd() = true);
134     SENF_CHECK_NO_THROW( p->flags().padding() = false);
135     SENF_CHECK_NO_THROW( p->flags().badFCS() = false);
136     SENF_CHECK_NO_THROW( p->flags().shortGI() = false);
137
138     SENF_CHECK_NO_THROW( p->init_channelOptions());
139     SENF_CHECK_NO_THROW( p->channelOptions().freq() = 5320u)
140     SENF_CHECK_NO_THROW( p->channelOptions().ofdm() = true);
141     SENF_CHECK_NO_THROW( p->channelOptions().turbo() = false);
142     SENF_CHECK_NO_THROW( p->channelOptions().cck() = false);
143     SENF_CHECK_NO_THROW( p->channelOptions().flag5ghz() = true);
144     SENF_CHECK_NO_THROW( p->channelOptions().passive() = false);
145     SENF_CHECK_NO_THROW( p->channelOptions().cckOfdm() = false);
146     SENF_CHECK_NO_THROW( p->channelOptions().gfsk() = false);
147     SENF_CHECK_NO_THROW( p->channelOptions().gsm() = false);
148     SENF_CHECK_NO_THROW( p->channelOptions().staticTurbo() = false);
149     SENF_CHECK_NO_THROW( p->channelOptions().halfRateChannel() = false);
150     SENF_CHECK_NO_THROW( p->channelOptions().quarterRateChannel() = false);
151
152     p.finalizeAll();
153
154     BOOST_CHECK_EQUAL( p->length(), 26u );
155     BOOST_CHECK_EQUAL_COLLECTIONS( p.data().begin(), p.data().end(),
156                                    data, data+sizeof(data)/sizeof(data[0]) );
157 }
158
159 BOOST_AUTO_UNIT_TEST(RadiotapPacket_packet_ath9k)
160 {
161     /* radiotap packet from ath9k with atheros card*/
162     unsigned char data[] = {
163             0x00, 0x00, 0x20, 0x00, 0x6f, 0x48, 0x00, 0x00, 
164             0x87, 0xbb, 0x91, 0x7c, 0x3b, 0x00, 0x00, 0x00,
165             0x00, 0x04, 0x85, 0x09, 0x80, 0x04, 0xb2, 0xa1,
166             0x00, 0x00, 0x00, 0x00, 0xd5, 0x1a, 0xf7, 0x94,
167             0x00, 0x00, 0x00, 0x00,
168     };
169     senf::RadiotapPacket p (senf::RadiotapPacket::create(data));
170
171     /* mandatory fields*/
172     BOOST_CHECK_EQUAL( p->version(), 0u);
173     BOOST_CHECK_EQUAL( p->length(), 32u);
174
175     BOOST_CHECK_EQUAL( p->dbmAntennaSignal(), -78);
176     BOOST_CHECK_EQUAL( p->dbmAntennaNoise(), -95);
177     BOOST_CHECK_EQUAL( p->headerFcs(), 0xd51af794);
178     BOOST_CHECK_EQUAL( p->antenna(), 0u);
179 }
180
181
182 \f
183 // Local Variables:
184 // mode: c++
185 // fill-column: 100
186 // c-file-style: "senf"
187 // indent-tabs-mode: nil
188 // ispell-local-dictionary: "american"
189 // compile-command: "scons -u test"
190 // comment-column: 40
191 // End: