blob: 803d4dc80d5db166d87d433b5567dbdd9f75b9f1 [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"));
23 EXPECT_EQ(Technology::kWifi, Technology::IdentifierFromName("wifi"));
24 EXPECT_EQ(Technology::kCellular, Technology::IdentifierFromName("cellular"));
Paul Stewartca876ee2012-04-21 08:55:58 -070025 EXPECT_EQ(Technology::kTunnel, Technology::IdentifierFromName("tunnel"));
26 EXPECT_EQ(Technology::kLoopback, Technology::IdentifierFromName("loopback"));
Ben Chanc12cf662012-04-05 14:47:18 -070027 EXPECT_EQ(Technology::kVPN, Technology::IdentifierFromName("vpn"));
Paul Stewartca876ee2012-04-21 08:55:58 -070028 EXPECT_EQ(Technology::kPPP, Technology::IdentifierFromName("ppp"));
Ben Chanc12cf662012-04-05 14:47:18 -070029 EXPECT_EQ(Technology::kUnknown, Technology::IdentifierFromName("bluetooth"));
30 EXPECT_EQ(Technology::kUnknown, Technology::IdentifierFromName("wimax"));
31 EXPECT_EQ(Technology::kUnknown, Technology::IdentifierFromName("foo"));
32 EXPECT_EQ(Technology::kUnknown, Technology::IdentifierFromName(""));
33}
34
35TEST_F(TechnologyTest, NameFromIdentifier) {
36 EXPECT_EQ("ethernet", Technology::NameFromIdentifier(Technology::kEthernet));
37 EXPECT_EQ("wifi", Technology::NameFromIdentifier(Technology::kWifi));
38 EXPECT_EQ("cellular", Technology::NameFromIdentifier(Technology::kCellular));
Paul Stewartca876ee2012-04-21 08:55:58 -070039 EXPECT_EQ("tunnel", Technology::NameFromIdentifier(Technology::kTunnel));
40 EXPECT_EQ("loopback", Technology::NameFromIdentifier(Technology::kLoopback));
Ben Chanc12cf662012-04-05 14:47:18 -070041 EXPECT_EQ("vpn", Technology::NameFromIdentifier(Technology::kVPN));
Paul Stewartca876ee2012-04-21 08:55:58 -070042 EXPECT_EQ("ppp", Technology::NameFromIdentifier(Technology::kPPP));
43 EXPECT_EQ("unknown", Technology::NameFromIdentifier(Technology::kUnknown));
Ben Chanc12cf662012-04-05 14:47:18 -070044}
45
46TEST_F(TechnologyTest, IdentifierFromStorageGroup) {
47 EXPECT_EQ(Technology::kVPN, Technology::IdentifierFromStorageGroup("vpn"));
48 EXPECT_EQ(Technology::kVPN, Technology::IdentifierFromStorageGroup("vpn_a"));
49 EXPECT_EQ(Technology::kVPN, Technology::IdentifierFromStorageGroup("vpn__a"));
50 EXPECT_EQ(Technology::kVPN,
51 Technology::IdentifierFromStorageGroup("vpn_a_1"));
52 EXPECT_EQ(Technology::kUnknown,
53 Technology::IdentifierFromStorageGroup("_vpn"));
54 EXPECT_EQ(Technology::kUnknown, Technology::IdentifierFromStorageGroup("_"));
55 EXPECT_EQ(Technology::kUnknown, Technology::IdentifierFromStorageGroup(""));
56}
57
58TEST_F(TechnologyTest, GetTechnologyVectorFromStringWithValidTechnologyNames) {
59 vector<Technology::Identifier> technologies;
60 Error error;
61
62 EXPECT_TRUE(Technology::GetTechnologyVectorFromString(
63 "", &technologies, &error));
64 EXPECT_THAT(technologies, ElementsAre());
65 EXPECT_TRUE(error.IsSuccess());
66
67 EXPECT_TRUE(Technology::GetTechnologyVectorFromString(
68 "ethernet", &technologies, &error));
69 EXPECT_THAT(technologies, ElementsAre(Technology::kEthernet));
70 EXPECT_TRUE(error.IsSuccess());
71
72 EXPECT_TRUE(Technology::GetTechnologyVectorFromString(
73 "ethernet,vpn", &technologies, &error));
74 EXPECT_THAT(technologies, ElementsAre(Technology::kEthernet,
75 Technology::kVPN));
76 EXPECT_TRUE(error.IsSuccess());
77
78 EXPECT_TRUE(Technology::GetTechnologyVectorFromString(
79 "wifi,ethernet,vpn", &technologies, &error));
80 EXPECT_THAT(technologies, ElementsAre(Technology::kWifi,
81 Technology::kEthernet,
82 Technology::kVPN));
83 EXPECT_TRUE(error.IsSuccess());
84}
85
86TEST_F(TechnologyTest,
87 GetTechnologyVectorFromStringWithInvalidTechnologyNames) {
88 vector<Technology::Identifier> technologies;
89 Error error;
90
91 EXPECT_FALSE(Technology::GetTechnologyVectorFromString(
92 "foo", &technologies, &error));
93 EXPECT_EQ(Error::kInvalidArguments, error.type());
94 EXPECT_EQ("foo is an unknown technology name", error.message());
95
96 EXPECT_FALSE(Technology::GetTechnologyVectorFromString(
97 "ethernet,bar", &technologies, &error));
98 EXPECT_EQ(Error::kInvalidArguments, error.type());
99 EXPECT_EQ("bar is an unknown technology name", error.message());
100
101 EXPECT_FALSE(Technology::GetTechnologyVectorFromString(
102 "ethernet,foo,vpn", &technologies, &error));
103 EXPECT_EQ(Error::kInvalidArguments, error.type());
104 EXPECT_EQ("foo is an unknown technology name", error.message());
105}
106
107TEST_F(TechnologyTest,
108 GetTechnologyVectorFromStringWithDuplicateTechnologyNames) {
109 vector<Technology::Identifier> technologies;
110 Error error;
111
112 EXPECT_FALSE(Technology::GetTechnologyVectorFromString(
113 "ethernet,vpn,ethernet", &technologies, &error));
114 EXPECT_EQ(Error::kInvalidArguments, error.type());
115 EXPECT_EQ("ethernet is duplicated in the list", error.message());
116}
117
118} // namespace shill