blob: 3ae55b4e1691f4a3e3e81eb1872b1a1371cea954 [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(
Chris Masone2ae797d2011-08-23 20:41:00 -070083 new Profile(&control_interface_, &glib_, &manager_, id, "", false));
Chris Masone7df0c672011-07-15 10:24:54 -070084 EXPECT_EQ(kIdentifier, profile->GetFriendlyName());
85 id.user = kUser;
Chris Masone2ae797d2011-08-23 20:41:00 -070086 profile = new Profile(&control_interface_, &glib_, &manager_, id, "", false);
Chris Masone7df0c672011-07-15 10:24:54 -070087 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";
Chris Masone2ae797d2011-08-23 20:41:00 -070093 static const char kFormat[] = "/a/place/for/%s";
Darin Petkova4766822011-07-07 10:42:22 -070094 FilePath path;
Chris Masone2ae797d2011-08-23 20:41:00 -070095 Profile::Identifier id;
96 id.identifier = kIdentifier;
97 ProfileRefPtr profile(
98 new Profile(&control_interface_, &glib_, &manager_, id, "", false));
99 EXPECT_FALSE(profile->GetStoragePath(&path));
100 id.user = kUser;
101 profile =
102 new Profile(&control_interface_, &glib_, &manager_, id, kFormat, false);
103 EXPECT_TRUE(profile->GetStoragePath(&path));
104 string suffix = base::StringPrintf("/%s.profile", kIdentifier);
105 EXPECT_EQ(base::StringPrintf(kFormat, kUser) + suffix, path.value());
Darin Petkova4766822011-07-07 10:42:22 -0700106}
107
Chris Masone6791a432011-07-12 13:23:19 -0700108TEST_F(ProfileTest, ServiceManagement) {
mukesh agrawal51a7e932011-07-27 16:18:26 -0700109 string service1_name;
110 string service2_name;
Chris Masone6791a432011-07-12 13:23:19 -0700111 {
112 ServiceRefPtr service1(
113 new StrictMock<MockService>(&control_interface_,
114 &dispatcher_,
mukesh agrawal51a7e932011-07-27 16:18:26 -0700115 &manager_));
Chris Masone6791a432011-07-12 13:23:19 -0700116 ServiceRefPtr service2(
117 new StrictMock<MockService>(&control_interface_,
118 &dispatcher_,
mukesh agrawal51a7e932011-07-27 16:18:26 -0700119 &manager_));
120 service1_name = service1->UniqueName();
121 service2_name = service2->UniqueName();
Chris Masone6791a432011-07-12 13:23:19 -0700122 ASSERT_TRUE(profile_->AdoptService(service1));
123 ASSERT_TRUE(profile_->AdoptService(service2));
124 ASSERT_FALSE(profile_->AdoptService(service1));
125 }
mukesh agrawal51a7e932011-07-27 16:18:26 -0700126 ASSERT_TRUE(profile_->FindService(service1_name).get() != NULL);
127 ASSERT_TRUE(profile_->FindService(service2_name).get() != NULL);
Chris Masone6791a432011-07-12 13:23:19 -0700128
mukesh agrawal51a7e932011-07-27 16:18:26 -0700129 ASSERT_TRUE(profile_->AbandonService(service1_name));
130 ASSERT_TRUE(profile_->FindService(service1_name).get() == NULL);
131 ASSERT_TRUE(profile_->FindService(service2_name).get() != NULL);
Chris Masone6791a432011-07-12 13:23:19 -0700132
mukesh agrawal51a7e932011-07-27 16:18:26 -0700133 ASSERT_FALSE(profile_->AbandonService(service1_name));
134 ASSERT_TRUE(profile_->AbandonService(service2_name));
135 ASSERT_TRUE(profile_->FindService(service1_name).get() == NULL);
136 ASSERT_TRUE(profile_->FindService(service2_name).get() == NULL);
Chris Masone6791a432011-07-12 13:23:19 -0700137}
138
139TEST_F(ProfileTest, EntryEnumeration) {
Chris Masone6791a432011-07-12 13:23:19 -0700140 scoped_refptr<MockService> service1(
141 new StrictMock<MockService>(&control_interface_,
142 &dispatcher_,
mukesh agrawal51a7e932011-07-27 16:18:26 -0700143 &manager_));
Chris Masone6791a432011-07-12 13:23:19 -0700144 scoped_refptr<MockService> service2(
145 new StrictMock<MockService>(&control_interface_,
146 &dispatcher_,
mukesh agrawal51a7e932011-07-27 16:18:26 -0700147 &manager_));
148 string service1_name(service1->UniqueName());
149 string service2_name(service2->UniqueName());
150
151 EXPECT_CALL(*service1.get(), GetRpcIdentifier())
152 .WillRepeatedly(Return(service1_name));
Chris Masone6791a432011-07-12 13:23:19 -0700153 EXPECT_CALL(*service2.get(), GetRpcIdentifier())
mukesh agrawal51a7e932011-07-27 16:18:26 -0700154 .WillRepeatedly(Return(service2_name));
Chris Masone6791a432011-07-12 13:23:19 -0700155 ASSERT_TRUE(profile_->AdoptService(service1));
156 ASSERT_TRUE(profile_->AdoptService(service2));
157
158 ASSERT_EQ(profile_->EnumerateEntries().size(), 2);
159
mukesh agrawal51a7e932011-07-27 16:18:26 -0700160 ASSERT_TRUE(profile_->AbandonService(service1_name));
161 ASSERT_EQ(profile_->EnumerateEntries()[0], service2_name);
Chris Masone6791a432011-07-12 13:23:19 -0700162
mukesh agrawal51a7e932011-07-27 16:18:26 -0700163 ASSERT_FALSE(profile_->AbandonService(service1_name));
164 ASSERT_EQ(profile_->EnumerateEntries()[0], service2_name);
Chris Masone6791a432011-07-12 13:23:19 -0700165
mukesh agrawal51a7e932011-07-27 16:18:26 -0700166 ASSERT_TRUE(profile_->AbandonService(service2_name));
Chris Masone6791a432011-07-12 13:23:19 -0700167 ASSERT_EQ(profile_->EnumerateEntries().size(), 0);
168}
169
Darin Petkova4766822011-07-07 10:42:22 -0700170} // namespace shill