blob: 87e721c3631a3587e438fdab780a920d5caaaf47 [file] [log] [blame]
Darin Petkova4766822011-07-07 10:42:22 -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
Chris Masone7aa5f902011-07-11 11:13:35 -07005#include "shill/profile.h"
6
Chris Masone6791a432011-07-12 13:23:19 -07007#include <string>
8#include <vector>
9
Darin Petkova4766822011-07-07 10:42:22 -070010#include <base/string_util.h>
11#include <gtest/gtest.h>
12
Chris Masone6791a432011-07-12 13:23:19 -070013#include "shill/mock_profile.h"
14#include "shill/mock_service.h"
15#include "shill/property_store_unittest.h"
16
17using std::set;
Darin Petkova4766822011-07-07 10:42:22 -070018using std::string;
Chris Masone6791a432011-07-12 13:23:19 -070019using std::vector;
20using testing::Return;
21using testing::StrictMock;
Darin Petkova4766822011-07-07 10:42:22 -070022
23namespace shill {
24
Chris Masone6791a432011-07-12 13:23:19 -070025class ProfileTest : public PropertyStoreTest {
26 public:
27 ProfileTest()
Chris Masone7df0c672011-07-15 10:24:54 -070028 : profile_(new MockProfile(&control_interface_, &glib_, &manager_, "")) {
Chris Masone6791a432011-07-12 13:23:19 -070029 }
30
31 protected:
32 ProfileRefPtr profile_;
Darin Petkova4766822011-07-07 10:42:22 -070033};
34
35TEST_F(ProfileTest, IsValidIdentifierToken) {
36 EXPECT_FALSE(Profile::IsValidIdentifierToken(""));
37 EXPECT_FALSE(Profile::IsValidIdentifierToken(" "));
38 EXPECT_FALSE(Profile::IsValidIdentifierToken("-"));
39 EXPECT_FALSE(Profile::IsValidIdentifierToken("~"));
40 EXPECT_FALSE(Profile::IsValidIdentifierToken("_"));
41 EXPECT_TRUE(Profile::IsValidIdentifierToken("a"));
42 EXPECT_TRUE(Profile::IsValidIdentifierToken("ABCDEFGHIJKLMNOPQRSTUVWXYZ"));
43 EXPECT_TRUE(Profile::IsValidIdentifierToken("abcdefghijklmnopqrstuvwxyz"));
44 EXPECT_TRUE(Profile::IsValidIdentifierToken("0123456789"));
45}
46
47TEST_F(ProfileTest, ParseIdentifier) {
48 Profile::Identifier identifier;
49 EXPECT_FALSE(Profile::ParseIdentifier("", &identifier));
50 EXPECT_FALSE(Profile::ParseIdentifier("~", &identifier));
51 EXPECT_FALSE(Profile::ParseIdentifier("~foo", &identifier));
52 EXPECT_FALSE(Profile::ParseIdentifier("~/", &identifier));
53 EXPECT_FALSE(Profile::ParseIdentifier("~bar/", &identifier));
54 EXPECT_FALSE(Profile::ParseIdentifier("~/zoo", &identifier));
55 EXPECT_FALSE(Profile::ParseIdentifier("~./moo", &identifier));
56 EXPECT_FALSE(Profile::ParseIdentifier("~valid/?", &identifier));
57 EXPECT_FALSE(Profile::ParseIdentifier("~no//no", &identifier));
58 EXPECT_FALSE(Profile::ParseIdentifier("~no~no", &identifier));
59
60 static const char kUser[] = "user";
61 static const char kIdentifier[] = "identifier";
62 EXPECT_TRUE(Profile::ParseIdentifier(
63 base::StringPrintf("~%s/%s", kUser, kIdentifier),
64 &identifier));
65 EXPECT_EQ(kUser, identifier.user);
66 EXPECT_EQ(kIdentifier, identifier.identifier);
67
68 EXPECT_FALSE(Profile::ParseIdentifier("!", &identifier));
69 EXPECT_FALSE(Profile::ParseIdentifier("/nope", &identifier));
70
71 static const char kIdentifier2[] = "something";
72 EXPECT_TRUE(Profile::ParseIdentifier(kIdentifier2, &identifier));
73 EXPECT_EQ("", identifier.user);
74 EXPECT_EQ(kIdentifier2, identifier.identifier);
75}
76
Chris Masone7df0c672011-07-15 10:24:54 -070077TEST_F(ProfileTest, GetFriendlyName) {
Darin Petkova4766822011-07-07 10:42:22 -070078 static const char kUser[] = "theUser";
79 static const char kIdentifier[] = "theIdentifier";
Chris Masone7df0c672011-07-15 10:24:54 -070080 Profile::Identifier id;
81 id.identifier = kIdentifier;
82 ProfileRefPtr profile(
83 new Profile(&control_interface_, &glib_, &manager_, id, false));
84 EXPECT_EQ(kIdentifier, profile->GetFriendlyName());
85 id.user = kUser;
86 profile = new Profile(&control_interface_, &glib_, &manager_, id, false);
87 EXPECT_EQ(string(kUser) + "/" + kIdentifier, profile->GetFriendlyName());
Darin Petkova4766822011-07-07 10:42:22 -070088}
89
90TEST_F(ProfileTest, GetStoragePath) {
91 static const char kUser[] = "chronos";
92 static const char kIdentifier[] = "someprofile";
93 FilePath path;
94 Profile::Identifier identifier;
95 identifier.identifier = kIdentifier;
96 EXPECT_TRUE(Profile::GetStoragePath(identifier, &path));
97 EXPECT_EQ("/var/cache/flimflam/someprofile.profile", path.value());
98 identifier.user = kUser;
99 EXPECT_TRUE(Profile::GetStoragePath(identifier, &path));
100 EXPECT_EQ("/home/chronos/user/flimflam/someprofile.profile", path.value());
101}
102
Chris Masone6791a432011-07-12 13:23:19 -0700103TEST_F(ProfileTest, ServiceManagement) {
104 const char kService1[] = "service1";
105 const char kService2[] = "wifi_service2";
106 {
107 ServiceRefPtr service1(
108 new StrictMock<MockService>(&control_interface_,
109 &dispatcher_,
110 &manager_,
111 kService1));
112 ServiceRefPtr service2(
113 new StrictMock<MockService>(&control_interface_,
114 &dispatcher_,
115 &manager_,
116 kService2));
117 ASSERT_TRUE(profile_->AdoptService(service1));
118 ASSERT_TRUE(profile_->AdoptService(service2));
119 ASSERT_FALSE(profile_->AdoptService(service1));
120 }
121 ASSERT_TRUE(profile_->FindService(kService1).get() != NULL);
122 ASSERT_TRUE(profile_->FindService(kService2).get() != NULL);
123
124 ASSERT_TRUE(profile_->AbandonService(kService1));
125 ASSERT_TRUE(profile_->FindService(kService1).get() == NULL);
126 ASSERT_TRUE(profile_->FindService(kService2).get() != NULL);
127
128 ASSERT_FALSE(profile_->AbandonService(kService1));
129 ASSERT_TRUE(profile_->AbandonService(kService2));
130 ASSERT_TRUE(profile_->FindService(kService1).get() == NULL);
131 ASSERT_TRUE(profile_->FindService(kService2).get() == NULL);
132}
133
134TEST_F(ProfileTest, EntryEnumeration) {
135 const char *kServices[] = { "service1",
136 "wifi_service2" };
137 scoped_refptr<MockService> service1(
138 new StrictMock<MockService>(&control_interface_,
139 &dispatcher_,
140 &manager_,
141 kServices[0]));
142 EXPECT_CALL(*service1.get(), GetRpcIdentifier())
143 .WillRepeatedly(Return(kServices[0]));
144 scoped_refptr<MockService> service2(
145 new StrictMock<MockService>(&control_interface_,
146 &dispatcher_,
147 &manager_,
148 kServices[1]));
149 EXPECT_CALL(*service2.get(), GetRpcIdentifier())
150 .WillRepeatedly(Return(kServices[1]));
151 ASSERT_TRUE(profile_->AdoptService(service1));
152 ASSERT_TRUE(profile_->AdoptService(service2));
153
154 ASSERT_EQ(profile_->EnumerateEntries().size(), 2);
155
156 ASSERT_TRUE(profile_->AbandonService(kServices[0]));
157 ASSERT_EQ(profile_->EnumerateEntries()[0], kServices[1]);
158
159 ASSERT_FALSE(profile_->AbandonService(kServices[0]));
160 ASSERT_EQ(profile_->EnumerateEntries()[0], kServices[1]);
161
162 ASSERT_TRUE(profile_->AbandonService(kServices[1]));
163 ASSERT_EQ(profile_->EnumerateEntries().size(), 0);
164}
165
Darin Petkova4766822011-07-07 10:42:22 -0700166} // namespace shill