Utils/Termlib: Extend the completion API
[senf.git] / 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 "../../Packets/Packets.hh"
29
30 #include "../../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     };
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().fcsPresent(), 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 BOOST_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             0x12, 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().fcsPresent() = 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( p.data().begin(), p.data().end(), data ));
155 }
156
157 BOOST_AUTO_UNIT_TEST(RadiotapPacket_packet_ath9k)
158 {
159     /* radiotap packet from ath9k with atheros card*/
160     unsigned char data[] = {
161             0x00, 0x00, 0x20, 0x00, 0x6f, 0x48, 0x00, 0x00, 0x87, 0xbb, 0x91, 0x7c, 0x3b, 0x00, 0x00, 0x00,
162             0x00, 0x04, 0x85, 0x09, 0x80, 0x04, 0xb2, 0xa1, 0x00, 0x00, 0x00, 0x00, 0xd5, 0x1a, 0xf7, 0x94
163     };
164     senf::RadiotapPacket p (senf::RadiotapPacket::create(data));
165
166     /* mandatory fields*/
167     BOOST_CHECK_EQUAL( p->version(), 0u);
168     BOOST_CHECK_EQUAL( p->length(), 32u);
169
170     BOOST_CHECK_EQUAL( p->dbmAntennaSignal(), -78);
171     BOOST_CHECK_EQUAL( p->dbmAntennaNoise(), -95);
172     BOOST_CHECK_EQUAL( p->fcs(), 0xd51af794);
173     BOOST_CHECK_EQUAL( p->antenna(), 0u);
174
175
176 }
177