blob: 55d38b998c21b8d610251e0eae0d30272f8a23ec [file] [log] [blame]
Ben Chanc12cf662012-04-05 14:47:18 -07001// Copyright (c) 2012 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/technology.h"
6
7#include <gmock/gmock.h>
8#include <gtest/gtest.h>
9
10#include "shill/error.h"
11
12using std::string;
13using std::vector;
14using testing::ElementsAre;
15using testing::Test;
16
17namespace shill {
18
19class TechnologyTest : public Test {};
20
21TEST_F(TechnologyTest, IdentifierFromName) {
22 EXPECT_EQ(Technology::kEthernet, Technology::IdentifierFromName("ethernet"));
Paul Stewart44dba7b2013-04-16 09:43:42 -070023 EXPECT_EQ(Technology::kEthernetEap,
24 Technology::IdentifierFromName("etherneteap"));
Ben Chanc12cf662012-04-05 14:47:18 -070025 EXPECT_EQ(Technology::kWifi, Technology::IdentifierFromName("wifi"));
Ben Chan46af1272012-05-01 10:34:00 -070026 EXPECT_EQ(Technology::kWiMax, Technology::IdentifierFromName("wimax"));
Ben Chanc12cf662012-04-05 14:47:18 -070027 EXPECT_EQ(Technology::kCellular, Technology::IdentifierFromName("cellular"));
Paul Stewartca876ee2012-04-21 08:55:58 -070028 EXPECT_EQ(Technology::kTunnel, Technology::IdentifierFromName("tunnel"));
29 EXPECT_EQ(Technology::kLoopback, Technology::IdentifierFromName("loopback"));
Ben Chanc12cf662012-04-05 14:47:18 -070030 EXPECT_EQ(Technology::kVPN, Technology::IdentifierFromName("vpn"));
Paul Stewartca876ee2012-04-21 08:55:58 -070031 EXPECT_EQ(Technology::kPPP, Technology::IdentifierFromName("ppp"));
Ben Chanc12cf662012-04-05 14:47:18 -070032 EXPECT_EQ(Technology::kUnknown, Technology::IdentifierFromName("bluetooth"));
Ben Chanc12cf662012-04-05 14:47:18 -070033 EXPECT_EQ(Technology::kUnknown, Technology::IdentifierFromName("foo"));
34 EXPECT_EQ(Technology::kUnknown, Technology::IdentifierFromName(""));
35}
36
37TEST_F(TechnologyTest, NameFromIdentifier) {
38 EXPECT_EQ("ethernet", Technology::NameFromIdentifier(Technology::kEthernet));
Paul Stewart44dba7b2013-04-16 09:43:42 -070039 EXPECT_EQ("etherneteap",
40 Technology::NameFromIdentifier(Technology::kEthernetEap));
Ben Chanc12cf662012-04-05 14:47:18 -070041 EXPECT_EQ("wifi", Technology::NameFromIdentifier(Technology::kWifi));
Ben Chan46af1272012-05-01 10:34:00 -070042 EXPECT_EQ("wimax", Technology::NameFromIdentifier(Technology::kWiMax));
Ben Chanc12cf662012-04-05 14:47:18 -070043 EXPECT_EQ("cellular", Technology::NameFromIdentifier(Technology::kCellular));
Paul Stewartca876ee2012-04-21 08:55:58 -070044 EXPECT_EQ("tunnel", Technology::NameFromIdentifier(Technology::kTunnel));
45 EXPECT_EQ("loopback", Technology::NameFromIdentifier(Technology::kLoopback));
Ben Chanc12cf662012-04-05 14:47:18 -070046 EXPECT_EQ("vpn", Technology::NameFromIdentifier(Technology::kVPN));
Paul Stewartca876ee2012-04-21 08:55:58 -070047 EXPECT_EQ("ppp", Technology::NameFromIdentifier(Technology::kPPP));
Garret Kelly2dc218e2015-01-30 11:16:34 -050048 EXPECT_EQ("pppoe", Technology::NameFromIdentifier(Technology::kPPPoE));
Paul Stewartca876ee2012-04-21 08:55:58 -070049 EXPECT_EQ("unknown", Technology::NameFromIdentifier(Technology::kUnknown));
Ben Chanc12cf662012-04-05 14:47:18 -070050}
51
52TEST_F(TechnologyTest, IdentifierFromStorageGroup) {
53 EXPECT_EQ(Technology::kVPN, Technology::IdentifierFromStorageGroup("vpn"));
54 EXPECT_EQ(Technology::kVPN, Technology::IdentifierFromStorageGroup("vpn_a"));
55 EXPECT_EQ(Technology::kVPN, Technology::IdentifierFromStorageGroup("vpn__a"));
56 EXPECT_EQ(Technology::kVPN,
57 Technology::IdentifierFromStorageGroup("vpn_a_1"));
58 EXPECT_EQ(Technology::kUnknown,
59 Technology::IdentifierFromStorageGroup("_vpn"));
60 EXPECT_EQ(Technology::kUnknown, Technology::IdentifierFromStorageGroup("_"));
61 EXPECT_EQ(Technology::kUnknown, Technology::IdentifierFromStorageGroup(""));
62}
63
64TEST_F(TechnologyTest, GetTechnologyVectorFromStringWithValidTechnologyNames) {
65 vector<Technology::Identifier> technologies;
66 Error error;
67
68 EXPECT_TRUE(Technology::GetTechnologyVectorFromString(
69 "", &technologies, &error));
70 EXPECT_THAT(technologies, ElementsAre());
71 EXPECT_TRUE(error.IsSuccess());
72
73 EXPECT_TRUE(Technology::GetTechnologyVectorFromString(
74 "ethernet", &technologies, &error));
75 EXPECT_THAT(technologies, ElementsAre(Technology::kEthernet));
76 EXPECT_TRUE(error.IsSuccess());
77
78 EXPECT_TRUE(Technology::GetTechnologyVectorFromString(
79 "ethernet,vpn", &technologies, &error));
80 EXPECT_THAT(technologies, ElementsAre(Technology::kEthernet,
81 Technology::kVPN));
82 EXPECT_TRUE(error.IsSuccess());
83
84 EXPECT_TRUE(Technology::GetTechnologyVectorFromString(
85 "wifi,ethernet,vpn", &technologies, &error));
86 EXPECT_THAT(technologies, ElementsAre(Technology::kWifi,
87 Technology::kEthernet,
88 Technology::kVPN));
89 EXPECT_TRUE(error.IsSuccess());
90}
91
92TEST_F(TechnologyTest,
93 GetTechnologyVectorFromStringWithInvalidTechnologyNames) {
94 vector<Technology::Identifier> technologies;
95 Error error;
96
97 EXPECT_FALSE(Technology::GetTechnologyVectorFromString(
98 "foo", &technologies, &error));
99 EXPECT_EQ(Error::kInvalidArguments, error.type());
100 EXPECT_EQ("foo is an unknown technology name", error.message());
101
102 EXPECT_FALSE(Technology::GetTechnologyVectorFromString(
103 "ethernet,bar", &technologies, &error));
104 EXPECT_EQ(Error::kInvalidArguments, error.type());
105 EXPECT_EQ("bar is an unknown technology name", error.message());
106
107 EXPECT_FALSE(Technology::GetTechnologyVectorFromString(
108 "ethernet,foo,vpn", &technologies, &error));
109 EXPECT_EQ(Error::kInvalidArguments, error.type());
110 EXPECT_EQ("foo is an unknown technology name", error.message());
111}
112
113TEST_F(TechnologyTest,
114 GetTechnologyVectorFromStringWithDuplicateTechnologyNames) {
115 vector<Technology::Identifier> technologies;
116 Error error;
117
118 EXPECT_FALSE(Technology::GetTechnologyVectorFromString(
119 "ethernet,vpn,ethernet", &technologies, &error));
120 EXPECT_EQ(Error::kInvalidArguments, error.type());
121 EXPECT_EQ("ethernet is duplicated in the list", error.message());
122}
123
124} // namespace shill