blob: e6ec16584987cec33903dc905c04a9521a75d8da [file] [log] [blame]
Chris Masone34af2182011-08-22 11:59:36 -07001// Copyright (c) 2011 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/wifi_service.h"
6
7#include <string>
8#include <vector>
9
10#include <base/string_util.h>
11#include <chromeos/dbus/service_constants.h>
12#include <gmock/gmock.h>
13#include <gtest/gtest.h>
14
15#include "shill/manager.h"
16#include "shill/mock_adaptors.h"
17#include "shill/mock_control.h"
18#include "shill/mock_service.h"
19#include "shill/mock_store.h"
mukesh agrawal6e277772011-09-29 15:04:23 -070020#include "shill/mock_wifi.h"
Chris Masone34af2182011-08-22 11:59:36 -070021#include "shill/property_store_unittest.h"
22#include "shill/shill_event.h"
mukesh agrawal6e277772011-09-29 15:04:23 -070023#include "shill/wpa_supplicant.h"
Chris Masone34af2182011-08-22 11:59:36 -070024
25using std::string;
26using std::vector;
27
28namespace shill {
mukesh agrawal6e277772011-09-29 15:04:23 -070029using ::testing::NiceMock;
Chris Masone34af2182011-08-22 11:59:36 -070030
31class WiFiServiceTest : public PropertyStoreTest {
32 public:
mukesh agrawal6e277772011-09-29 15:04:23 -070033 WiFiServiceTest() : wifi_(
34 new NiceMock<MockWiFi>(
35 control_interface(),
36 dispatcher(),
37 manager(),
38 "wifi",
39 fake_mac,
40 0)) {}
Chris Masone34af2182011-08-22 11:59:36 -070041 virtual ~WiFiServiceTest() {}
mukesh agrawal6e277772011-09-29 15:04:23 -070042
43 protected:
44 static const char fake_mac[];
45 scoped_refptr<MockWiFi> wifi() { return wifi_; }
46
47 private:
48 scoped_refptr<MockWiFi> wifi_;
Chris Masone34af2182011-08-22 11:59:36 -070049};
50
mukesh agrawal6e277772011-09-29 15:04:23 -070051// static
52const char WiFiServiceTest::fake_mac[] = "AaBBcCDDeeFF";
53
54MATCHER(WPASecurityArgs, "") {
55 return ContainsKey(arg, wpa_supplicant::kPropertySecurityProtocol) &&
56 ContainsKey(arg, wpa_supplicant::kPropertyPreSharedKey);
57}
58
Chris Masone34af2182011-08-22 11:59:36 -070059TEST_F(WiFiServiceTest, StorageId) {
60 vector<uint8_t> ssid(5, 0);
61 ssid.push_back(0xff);
Chris Masone9d779932011-08-25 16:33:41 -070062
Chris Masone2176a882011-09-14 22:29:15 -070063 WiFiServiceRefPtr wifi_service = new WiFiService(control_interface(),
64 dispatcher(),
Chris Masone9d779932011-08-25 16:33:41 -070065 manager(),
mukesh agrawal6e277772011-09-29 15:04:23 -070066 wifi(),
Chris Masone9d779932011-08-25 16:33:41 -070067 ssid,
68 flimflam::kModeManaged,
69 "none");
70 string id = wifi_service->GetStorageIdentifier();
Chris Masone34af2182011-08-22 11:59:36 -070071 for (uint i = 0; i < id.length(); ++i) {
72 EXPECT_TRUE(id[i] == '_' ||
73 isxdigit(id[i]) ||
74 (isalpha(id[i]) && islower(id[i])));
75 }
Paul Stewart22aa71b2011-09-16 12:15:11 -070076 EXPECT_TRUE(wifi_service->TechnologyIs(Technology::kWifi));
Chris Masone34af2182011-08-22 11:59:36 -070077 size_t mac_pos = id.find(StringToLowerASCII(string(fake_mac)));
78 EXPECT_NE(mac_pos, string::npos);
79 EXPECT_NE(id.find(string(flimflam::kModeManaged), mac_pos), string::npos);
80}
81
mukesh agrawalf2fd7452011-10-03 16:38:47 -070082TEST_F(WiFiServiceTest, ConnectTaskWPA) {
mukesh agrawal6e277772011-09-29 15:04:23 -070083 vector<uint8_t> ssid(5, 0);
84 WiFiServiceRefPtr wifi_service = new WiFiService(control_interface(),
85 dispatcher(),
86 manager(),
87 wifi(),
88 ssid,
89 flimflam::kModeManaged,
90 flimflam::kSecurityWpa);
91 EXPECT_CALL(*wifi(),
92 ConnectTo(wifi_service.get(), WPASecurityArgs()));
93 wifi_service->ConnectTask();
94}
95
mukesh agrawalf2fd7452011-10-03 16:38:47 -070096TEST_F(WiFiServiceTest, ConnectTaskRSN) {
97 vector<uint8_t> ssid(5, 0);
98 WiFiServiceRefPtr wifi_service = new WiFiService(control_interface(),
99 dispatcher(),
100 manager(),
101 wifi(),
102 ssid,
103 flimflam::kModeManaged,
104 flimflam::kSecurityRsn);
105 EXPECT_CALL(*wifi(),
106 ConnectTo(wifi_service.get(), WPASecurityArgs()));
107 wifi_service->ConnectTask();
108}
109
Chris Masone34af2182011-08-22 11:59:36 -0700110} // namespace shill