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