blob: cb0282480eb6a17da8f50a558d175602501f581d [file] [log] [blame]
mukesh agrawal6e277772011-09-29 15:04:23 -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_endpoint.h"
6
7#include <map>
8#include <set>
9#include <string>
10#include <vector>
11
12#include <base/stl_util-inl.h>
13#include <chromeos/dbus/service_constants.h>
14#include <gtest/gtest.h>
15
16#include "shill/wpa_supplicant.h"
17
18using std::map;
19using std::set;
20using std::string;
21using std::vector;
22
23using ::testing::Test;
24
25namespace shill {
26
27class WiFiEndpointTest : public Test {
28 public:
29 WiFiEndpointTest() {}
30 virtual ~WiFiEndpointTest() {}
31
32 protected:
33 vector<string> make_string_vector1(const string &str1) {
34 vector<string> strvec;
35 strvec.push_back(str1);
36 return strvec;
37 }
38
39 vector<string> make_string_vector2(const string &str1, const string &str2) {
40 vector<string> strvec;
41 strvec.push_back(str1);
42 strvec.push_back(str2);
43 return strvec;
44 }
45
46 map<string, ::DBus::Variant> make_key_management_args(
47 vector<string> key_management_method_strings) {
48 map<string, ::DBus::Variant> args;
49 ::DBus::MessageIter writer;
50 writer =
51 args[wpa_supplicant::kSecurityMethodPropertyKeyManagement].writer();
52 writer << key_management_method_strings;
53 return args;
54 }
55
56 map<string, ::DBus::Variant> make_security_args(
57 const string &security_protocol,
58 const string &key_management_method) {
59 map<string, ::DBus::Variant> args;
60 ::DBus::MessageIter writer;
61 writer = args[security_protocol].writer();
62 writer <<
63 make_key_management_args(make_string_vector1(key_management_method));
64 return args;
65 }
66
67 const char *ParseSecurity(
68 const map<string, ::DBus::Variant> &properties) {
69 return WiFiEndpoint::ParseSecurity(properties);
70 }
71};
72
73TEST_F(WiFiEndpointTest, ParseKeyManagementMethodsEAP) {
74 set<WiFiEndpoint::KeyManagement> parsed_methods;
75 WiFiEndpoint::ParseKeyManagementMethods(
76 make_key_management_args(make_string_vector1("something-eap")),
77 &parsed_methods);
78 EXPECT_TRUE(
79 ContainsKey(parsed_methods, WiFiEndpoint::kKeyManagement802_1x));
80 EXPECT_FALSE(
81 ContainsKey(parsed_methods, WiFiEndpoint::kKeyManagementPSK));
82}
83
84TEST_F(WiFiEndpointTest, ParseKeyManagementMethodsPSK) {
85 set<WiFiEndpoint::KeyManagement> parsed_methods;
86 WiFiEndpoint::ParseKeyManagementMethods(
87 make_key_management_args(make_string_vector1("something-psk")),
88 &parsed_methods);
89 EXPECT_TRUE(
90 ContainsKey(parsed_methods, WiFiEndpoint::kKeyManagementPSK));
91 EXPECT_FALSE(
92 ContainsKey(parsed_methods, WiFiEndpoint::kKeyManagement802_1x));
93}
94
95TEST_F(WiFiEndpointTest, ParseKeyManagementMethodsEAPAndPSK) {
96 set<WiFiEndpoint::KeyManagement> parsed_methods;
97 WiFiEndpoint::ParseKeyManagementMethods(
98 make_key_management_args(
99 make_string_vector2("something-eap", "something-psk")),
100 &parsed_methods);
101 EXPECT_TRUE(
102 ContainsKey(parsed_methods, WiFiEndpoint::kKeyManagement802_1x));
103 EXPECT_TRUE(
104 ContainsKey(parsed_methods, WiFiEndpoint::kKeyManagementPSK));
105}
106
107TEST_F(WiFiEndpointTest, ParseSecurityRSN802_1x) {
108 EXPECT_STREQ(flimflam::kSecurity8021x,
109 ParseSecurity(make_security_args("RSN", "something-eap")));
110}
111
112TEST_F(WiFiEndpointTest, ParseSecurityWPA802_1x) {
113 EXPECT_STREQ(flimflam::kSecurity8021x,
114 ParseSecurity(make_security_args("WPA", "something-eap")));
115}
116
117TEST_F(WiFiEndpointTest, ParseSecurityRSNPSK) {
118 EXPECT_STREQ(flimflam::kSecurityRsn,
119 ParseSecurity(make_security_args("RSN", "something-psk")));
120}
121
122TEST_F(WiFiEndpointTest, ParseSecurityWPAPSK) {
123 EXPECT_STREQ(flimflam::kSecurityWpa,
124 ParseSecurity(make_security_args("WPA", "something-psk")));
125}
126
127TEST_F(WiFiEndpointTest, ParseSecurityWEP) {
128 map<string, ::DBus::Variant> top_params;
129 top_params[wpa_supplicant::kPropertyPrivacy].writer().append_bool(true);
130 EXPECT_STREQ(flimflam::kSecurityWep, ParseSecurity(top_params));
131}
132
133TEST_F(WiFiEndpointTest, ParseSecurityNone) {
134 map<string, ::DBus::Variant> top_params;
135 EXPECT_STREQ(flimflam::kSecurityNone, ParseSecurity(top_params));
136}
137
138} // namespace shill