blob: 40224169000b04345f7cf35f42341d92e4c23f31 [file] [log] [blame]
Wade Guthriea60a11c2013-04-12 17:47:34 -07001// Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "shill/scan_session.h"
6
7#include <limits>
8#include <set>
9#include <vector>
10
Wade Guthriea60a11c2013-04-12 17:47:34 -070011#include <gmock/gmock.h>
12#include <gtest/gtest.h>
13
Wade Guthriea60a11c2013-04-12 17:47:34 -070014#include "shill/mock_netlink_manager.h"
15#include "shill/netlink_manager.h"
16
17using std::set;
18using std::vector;
19using testing::_;
20using testing::ContainerEq;
Wade Guthriea60a11c2013-04-12 17:47:34 -070021using testing::Test;
22
23namespace shill {
24
25static const uint16_t kExpectedFreq5640 = 5640;
26static const uint16_t kExpectedFreq5600 = 5600;
27static const uint16_t kExpectedFreq5580 = 5580;
28static const uint16_t kExpectedFreq5560 = 5560;
29static const uint16_t kExpectedFreq5620 = 5620;
30
31static WiFiProvider::FrequencyCount kConnectedFrequencies[] = {
32 WiFiProvider::FrequencyCount(kExpectedFreq5640, 40), // 40th percentile.
33 WiFiProvider::FrequencyCount(kExpectedFreq5600, 25), // 65th percentile.
34 WiFiProvider::FrequencyCount(kExpectedFreq5580, 20), // 85th percentile.
35 WiFiProvider::FrequencyCount(kExpectedFreq5560, 10), // 95th percentile.
36 WiFiProvider::FrequencyCount(kExpectedFreq5620, 5) // 100th percentile.
37};
38
39static const uint16_t kExpectedFreq2432 = 2432;
40static const uint16_t kExpectedFreq2427 = 2427;
41static const uint16_t kExpectedFreq2422 = 2422;
42static const uint16_t kExpectedFreq2417 = 2417;
43static const uint16_t kExpectedFreq2412 = 2412;
44
45static uint16_t kUnconnectedFrequencies[] = {
46 kExpectedFreq2432,
47 kExpectedFreq2427,
48 kExpectedFreq2422,
49 kExpectedFreq2417,
50 kExpectedFreq2412
51};
52
Wade Guthriea60a11c2013-04-12 17:47:34 -070053class ScanSessionTest : public Test {
54 public:
55 // Test set of "all the other frequencies this device can support" in
56 // sorted order.
Wade Guthrieb9c3feb2013-04-25 16:31:19 -070057 ScanSessionTest() {
58 WiFiProvider::FrequencyCountList connected_frequencies(
Wade Guthriea60a11c2013-04-12 17:47:34 -070059 kConnectedFrequencies,
60 kConnectedFrequencies + arraysize(kConnectedFrequencies));
Wade Guthrieb9c3feb2013-04-25 16:31:19 -070061
62 set<uint16_t> unconnected_frequencies(
63 kUnconnectedFrequencies,
64 kUnconnectedFrequencies + arraysize(kUnconnectedFrequencies));
65 const int kArbitraryMinimum = 1;
66 const int kArbitraryMaximum = std::numeric_limits<int>::max();
67 ScanSession::OnScanFailed null_error_handler;
68 scan_session_.reset(new ScanSession(&netlink_manager_,
69 NULL,
70 connected_frequencies,
71 unconnected_frequencies,
72 0,
73 ScanSession::FractionList(),
74 kArbitraryMinimum,
75 kArbitraryMaximum,
76 null_error_handler));
Wade Guthriea60a11c2013-04-12 17:47:34 -070077 }
78
Wade Guthrieb9c3feb2013-04-25 16:31:19 -070079 virtual std::vector<uint16_t> GetScanFrequencies(float scan_fraction,
80 size_t min_frequencies,
81 size_t max_frequencies) {
82 return scan_session_->GetScanFrequencies(scan_fraction, min_frequencies,
83 max_frequencies);
84 }
85 ScanSession *scan_session() { return scan_session_.get(); }
86
Wade Guthriea60a11c2013-04-12 17:47:34 -070087 private:
Wade Guthrieb9c3feb2013-04-25 16:31:19 -070088 scoped_ptr<ScanSession> scan_session_;
Wade Guthriea60a11c2013-04-12 17:47:34 -070089 MockNetlinkManager netlink_manager_;
90};
91
92// Test that we can get a bunch of frequencies up to a specified fraction.
93TEST_F(ScanSessionTest, FractionTest) {
Wade Guthriea60a11c2013-04-12 17:47:34 -070094 vector<uint16_t> result;
95
96 // Get the first 83% of the connected values.
97 {
98 vector<uint16_t> expected;
99 expected.push_back(kExpectedFreq5640);
100 expected.push_back(kExpectedFreq5600);
101 expected.push_back(kExpectedFreq5580);
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700102 result = GetScanFrequencies(.83, 1, std::numeric_limits<size_t>::max());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700103 EXPECT_THAT(result, ContainerEq(expected));
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700104 EXPECT_TRUE(scan_session()->HasMoreFrequencies());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700105 }
106
107 // Get the next 4 values.
108 {
109 vector<uint16_t> expected;
110 expected.push_back(kExpectedFreq5560);
111 expected.push_back(kExpectedFreq5620);
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700112 expected.push_back(kExpectedFreq2412);
113 expected.push_back(kExpectedFreq2417);
114 result = GetScanFrequencies(ScanSession::kAllFrequencies, 1, 4);
Wade Guthriea60a11c2013-04-12 17:47:34 -0700115 EXPECT_THAT(result, ContainerEq(expected));
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700116 EXPECT_TRUE(scan_session()->HasMoreFrequencies());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700117 }
118
119 // And, get the remaining list.
120 {
121 vector<uint16_t> expected;
122 expected.push_back(kExpectedFreq2422);
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700123 expected.push_back(kExpectedFreq2427);
124 expected.push_back(kExpectedFreq2432);
125 result = GetScanFrequencies(ScanSession::kAllFrequencies, 20,
126 std::numeric_limits<size_t>::max());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700127 EXPECT_THAT(result, ContainerEq(expected));
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700128 EXPECT_FALSE(scan_session()->HasMoreFrequencies());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700129 }
130}
131
132// Test that we can get a bunch of frequencies up to a specified fraction,
133// followed by another group up to a specified fraction.
134TEST_F(ScanSessionTest, TwoFractionsTest) {
Wade Guthriea60a11c2013-04-12 17:47:34 -0700135 vector<uint16_t> result;
136
137 // Get the first 60% of the connected values.
138 {
139 vector<uint16_t> expected;
140 expected.push_back(kExpectedFreq5640);
141 expected.push_back(kExpectedFreq5600);
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700142 result = GetScanFrequencies(.60, 0, std::numeric_limits<size_t>::max());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700143 EXPECT_THAT(result, ContainerEq(expected));
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700144 EXPECT_TRUE(scan_session()->HasMoreFrequencies());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700145 }
146
147 // Get the next 32% of the connected values.
148 {
149 vector<uint16_t> expected;
150 expected.push_back(kExpectedFreq5580);
151 expected.push_back(kExpectedFreq5560);
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700152 result = GetScanFrequencies(.32, 0, std::numeric_limits<size_t>::max());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700153 EXPECT_THAT(result, ContainerEq(expected));
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700154 EXPECT_TRUE(scan_session()->HasMoreFrequencies());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700155 }
156
157 // And, get the remaining list.
158 {
159 vector<uint16_t> expected;
160 expected.push_back(kExpectedFreq5620);
Wade Guthriea60a11c2013-04-12 17:47:34 -0700161 expected.push_back(kExpectedFreq2412);
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700162 expected.push_back(kExpectedFreq2417);
163 expected.push_back(kExpectedFreq2422);
164 expected.push_back(kExpectedFreq2427);
165 expected.push_back(kExpectedFreq2432);
166 result = GetScanFrequencies(ScanSession::kAllFrequencies,
167 std::numeric_limits<size_t>::max(),
168 std::numeric_limits<size_t>::max());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700169 EXPECT_THAT(result, ContainerEq(expected));
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700170 EXPECT_FALSE(scan_session()->HasMoreFrequencies());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700171 }
172}
173
174// Test that we can get a bunch of frequencies up to a minimum count, even
175// when the requested fraction has already been reached.
176TEST_F(ScanSessionTest, MinTest) {
Wade Guthriea60a11c2013-04-12 17:47:34 -0700177 vector<uint16_t> result;
178
179 // Get the first 3 previously seen values.
180 {
181 vector<uint16_t> expected;
182 expected.push_back(kExpectedFreq5640);
183 expected.push_back(kExpectedFreq5600);
184 expected.push_back(kExpectedFreq5580);
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700185 result = GetScanFrequencies(.30, 3, std::numeric_limits<size_t>::max());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700186 EXPECT_THAT(result, ContainerEq(expected));
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700187 EXPECT_TRUE(scan_session()->HasMoreFrequencies());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700188 }
189
190 // Get the next value by requensting a minimum of 1.
191 {
192 vector<uint16_t> expected;
193 expected.push_back(kExpectedFreq5560);
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700194 result = GetScanFrequencies(0.0, 1, std::numeric_limits<size_t>::max());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700195 EXPECT_THAT(result, ContainerEq(expected));
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700196 EXPECT_TRUE(scan_session()->HasMoreFrequencies());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700197 }
198
199 // And, get the remaining list.
200 {
201 vector<uint16_t> expected;
202 expected.push_back(kExpectedFreq5620);
Wade Guthriea60a11c2013-04-12 17:47:34 -0700203 expected.push_back(kExpectedFreq2412);
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700204 expected.push_back(kExpectedFreq2417);
205 expected.push_back(kExpectedFreq2422);
206 expected.push_back(kExpectedFreq2427);
207 expected.push_back(kExpectedFreq2432);
208 result = GetScanFrequencies(ScanSession::kAllFrequencies,
209 std::numeric_limits<size_t>::max(),
210 std::numeric_limits<size_t>::max());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700211 EXPECT_THAT(result, ContainerEq(expected));
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700212 EXPECT_FALSE(scan_session()->HasMoreFrequencies());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700213 }
214}
215
216// Test that we can get up to a specified maximum number of frequencies.
217TEST_F(ScanSessionTest, MaxTest) {
Wade Guthriea60a11c2013-04-12 17:47:34 -0700218 vector<uint16_t> result;
219
220 // Get the first 7 values (crosses seen/unseen boundary).
221 {
222 vector<uint16_t> expected;
223 expected.push_back(kExpectedFreq5640);
224 expected.push_back(kExpectedFreq5600);
225 expected.push_back(kExpectedFreq5580);
226 expected.push_back(kExpectedFreq5560);
227 expected.push_back(kExpectedFreq5620);
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700228 expected.push_back(kExpectedFreq2412);
229 expected.push_back(kExpectedFreq2417);
230 result = GetScanFrequencies(ScanSession::kAllFrequencies, 1, 7);
Wade Guthriea60a11c2013-04-12 17:47:34 -0700231 EXPECT_THAT(result, ContainerEq(expected));
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700232 EXPECT_TRUE(scan_session()->HasMoreFrequencies());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700233 }
234
235 // And, get the remaining list.
236 {
237 vector<uint16_t> expected;
238 expected.push_back(kExpectedFreq2422);
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700239 expected.push_back(kExpectedFreq2427);
240 expected.push_back(kExpectedFreq2432);
241 result = GetScanFrequencies(ScanSession::kAllFrequencies, 20,
242 std::numeric_limits<size_t>::max());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700243 EXPECT_THAT(result, ContainerEq(expected));
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700244 EXPECT_FALSE(scan_session()->HasMoreFrequencies());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700245 }
246}
247
248// Test that we can get exactly the seen frequencies and exactly the unseen
249// ones.
250TEST_F(ScanSessionTest, ExactTest) {
Wade Guthriea60a11c2013-04-12 17:47:34 -0700251 vector<uint16_t> result;
252
253 // Get the first 5 values -- exectly on the seen/unseen border.
254 {
255 vector<uint16_t> expected;
256 expected.push_back(kExpectedFreq5640);
257 expected.push_back(kExpectedFreq5600);
258 expected.push_back(kExpectedFreq5580);
259 expected.push_back(kExpectedFreq5560);
260 expected.push_back(kExpectedFreq5620);
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700261 result = GetScanFrequencies(ScanSession::kAllFrequencies, 5, 5);
Wade Guthriea60a11c2013-04-12 17:47:34 -0700262 EXPECT_THAT(result, ContainerEq(expected));
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700263 EXPECT_TRUE(scan_session()->HasMoreFrequencies());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700264 }
265
266 // And, get the last 5.
267 {
268 vector<uint16_t> expected;
Wade Guthriea60a11c2013-04-12 17:47:34 -0700269 expected.push_back(kExpectedFreq2412);
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700270 expected.push_back(kExpectedFreq2417);
271 expected.push_back(kExpectedFreq2422);
272 expected.push_back(kExpectedFreq2427);
273 expected.push_back(kExpectedFreq2432);
274 result = GetScanFrequencies(ScanSession::kAllFrequencies, 5, 5);
Wade Guthriea60a11c2013-04-12 17:47:34 -0700275 EXPECT_THAT(result, ContainerEq(expected));
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700276 EXPECT_FALSE(scan_session()->HasMoreFrequencies());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700277 }
278}
279
280// Test that we can get everything in one read.
281TEST_F(ScanSessionTest, AllOneReadTest) {
Wade Guthriea60a11c2013-04-12 17:47:34 -0700282
283 vector<uint16_t> expected;
284 expected.push_back(kExpectedFreq5640);
285 expected.push_back(kExpectedFreq5600);
286 expected.push_back(kExpectedFreq5580);
287 expected.push_back(kExpectedFreq5560);
288 expected.push_back(kExpectedFreq5620);
Wade Guthriea60a11c2013-04-12 17:47:34 -0700289 expected.push_back(kExpectedFreq2412);
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700290 expected.push_back(kExpectedFreq2417);
291 expected.push_back(kExpectedFreq2422);
292 expected.push_back(kExpectedFreq2427);
293 expected.push_back(kExpectedFreq2432);
Wade Guthriea60a11c2013-04-12 17:47:34 -0700294 vector<uint16_t> result;
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700295 result = GetScanFrequencies(ScanSession::kAllFrequencies,
296 std::numeric_limits<size_t>::max(),
297 std::numeric_limits<size_t>::max());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700298 EXPECT_THAT(result, ContainerEq(expected));
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700299 EXPECT_FALSE(scan_session()->HasMoreFrequencies());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700300}
301
302// Test that we can get all the previously seen frequencies (and only the
303// previously seen frequencies) via the requested fraction.
304TEST_F(ScanSessionTest, EverythingFractionTest) {
Wade Guthriea60a11c2013-04-12 17:47:34 -0700305 vector<uint16_t> result;
306
307 // Get the first 100% of the connected values.
308 {
309 vector<uint16_t> expected;
310 expected.push_back(kExpectedFreq5640);
311 expected.push_back(kExpectedFreq5600);
312 expected.push_back(kExpectedFreq5580);
313 expected.push_back(kExpectedFreq5560);
314 expected.push_back(kExpectedFreq5620);
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700315 result = GetScanFrequencies(1.0, 0, std::numeric_limits<size_t>::max());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700316 EXPECT_THAT(result, ContainerEq(expected));
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700317 EXPECT_TRUE(scan_session()->HasMoreFrequencies());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700318 }
319
320 // And, get the remaining list.
321 {
322 vector<uint16_t> expected;
Wade Guthriea60a11c2013-04-12 17:47:34 -0700323 expected.push_back(kExpectedFreq2412);
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700324 expected.push_back(kExpectedFreq2417);
325 expected.push_back(kExpectedFreq2422);
326 expected.push_back(kExpectedFreq2427);
327 expected.push_back(kExpectedFreq2432);
328 result = GetScanFrequencies(ScanSession::kAllFrequencies,
329 std::numeric_limits<size_t>::max(),
330 std::numeric_limits<size_t>::max());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700331 EXPECT_THAT(result, ContainerEq(expected));
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700332 EXPECT_FALSE(scan_session()->HasMoreFrequencies());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700333 }
334}
335
336// Test that we can get each value individually.
337TEST_F(ScanSessionTest, IndividualReadsTest) {
Wade Guthriea60a11c2013-04-12 17:47:34 -0700338 vector<uint16_t> result;
339 static const float kArbitraryFraction = 0.83;
340
341 {
342 vector<uint16_t> expected;
343 expected.push_back(kExpectedFreq5640);
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700344 result = GetScanFrequencies(kArbitraryFraction, 1, 1);
Wade Guthriea60a11c2013-04-12 17:47:34 -0700345 EXPECT_THAT(result, ContainerEq(expected));
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700346 EXPECT_TRUE(scan_session()->HasMoreFrequencies());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700347 }
348 {
349 vector<uint16_t> expected;
350 expected.push_back(kExpectedFreq5600);
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700351 result = GetScanFrequencies(kArbitraryFraction, 1, 1);
Wade Guthriea60a11c2013-04-12 17:47:34 -0700352 EXPECT_THAT(result, ContainerEq(expected));
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700353 EXPECT_TRUE(scan_session()->HasMoreFrequencies());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700354 }
355 {
356 vector<uint16_t> expected;
357 expected.push_back(kExpectedFreq5580);
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700358 result = GetScanFrequencies(kArbitraryFraction, 1, 1);
Wade Guthriea60a11c2013-04-12 17:47:34 -0700359 EXPECT_THAT(result, ContainerEq(expected));
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700360 EXPECT_TRUE(scan_session()->HasMoreFrequencies());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700361 }
362 {
363 vector<uint16_t> expected;
364 expected.push_back(kExpectedFreq5560);
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700365 result = GetScanFrequencies(kArbitraryFraction, 1, 1);
Wade Guthriea60a11c2013-04-12 17:47:34 -0700366 EXPECT_THAT(result, ContainerEq(expected));
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700367 EXPECT_TRUE(scan_session()->HasMoreFrequencies());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700368 }
369 {
370 vector<uint16_t> expected;
371 expected.push_back(kExpectedFreq5620);
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700372 result = GetScanFrequencies(kArbitraryFraction, 1, 1);
Wade Guthriea60a11c2013-04-12 17:47:34 -0700373 EXPECT_THAT(result, ContainerEq(expected));
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700374 EXPECT_TRUE(scan_session()->HasMoreFrequencies());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700375 }
376 {
377 vector<uint16_t> expected;
378 expected.push_back(kExpectedFreq2412);
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700379 result = GetScanFrequencies(kArbitraryFraction, 1, 1);
Wade Guthriea60a11c2013-04-12 17:47:34 -0700380 EXPECT_THAT(result, ContainerEq(expected));
Wade Guthrieb9c3feb2013-04-25 16:31:19 -0700381 EXPECT_TRUE(scan_session()->HasMoreFrequencies());
382 }
383 {
384 vector<uint16_t> expected;
385 expected.push_back(kExpectedFreq2417);
386 result = GetScanFrequencies(kArbitraryFraction, 1, 1);
387 EXPECT_THAT(result, ContainerEq(expected));
388 EXPECT_TRUE(scan_session()->HasMoreFrequencies());
389 }
390 {
391 vector<uint16_t> expected;
392 expected.push_back(kExpectedFreq2422);
393 result = GetScanFrequencies(kArbitraryFraction, 1, 1);
394 EXPECT_THAT(result, ContainerEq(expected));
395 EXPECT_TRUE(scan_session()->HasMoreFrequencies());
396 }
397 {
398 vector<uint16_t> expected;
399 expected.push_back(kExpectedFreq2427);
400 result = GetScanFrequencies(kArbitraryFraction, 1, 1);
401 EXPECT_THAT(result, ContainerEq(expected));
402 EXPECT_TRUE(scan_session()->HasMoreFrequencies());
403 }
404 {
405 vector<uint16_t> expected;
406 expected.push_back(kExpectedFreq2432);
407 result = GetScanFrequencies(kArbitraryFraction, 1, 1);
408 EXPECT_THAT(result, ContainerEq(expected));
409 EXPECT_FALSE(scan_session()->HasMoreFrequencies());
Wade Guthriea60a11c2013-04-12 17:47:34 -0700410 }
411}
412
413} // namespace shill