blob: 709e46b22d9dad89787a123b1ceccc151e07374e [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) {
mukesh agrawal51a7e932011-07-27 16:18:26 -0700104 string service1_name;
105 string service2_name;
Chris Masone6791a432011-07-12 13:23:19 -0700106 {
107 ServiceRefPtr service1(
108 new StrictMock<MockService>(&control_interface_,
109 &dispatcher_,
mukesh agrawal51a7e932011-07-27 16:18:26 -0700110 &manager_));
Chris Masone6791a432011-07-12 13:23:19 -0700111 ServiceRefPtr service2(
112 new StrictMock<MockService>(&control_interface_,
113 &dispatcher_,
mukesh agrawal51a7e932011-07-27 16:18:26 -0700114 &manager_));
115 service1_name = service1->UniqueName();
116 service2_name = service2->UniqueName();
Chris Masone6791a432011-07-12 13:23:19 -0700117 ASSERT_TRUE(profile_->AdoptService(service1));
118 ASSERT_TRUE(profile_->AdoptService(service2));
119 ASSERT_FALSE(profile_->AdoptService(service1));
120 }
mukesh agrawal51a7e932011-07-27 16:18:26 -0700121 ASSERT_TRUE(profile_->FindService(service1_name).get() != NULL);
122 ASSERT_TRUE(profile_->FindService(service2_name).get() != NULL);
Chris Masone6791a432011-07-12 13:23:19 -0700123
mukesh agrawal51a7e932011-07-27 16:18:26 -0700124 ASSERT_TRUE(profile_->AbandonService(service1_name));
125 ASSERT_TRUE(profile_->FindService(service1_name).get() == NULL);
126 ASSERT_TRUE(profile_->FindService(service2_name).get() != NULL);
Chris Masone6791a432011-07-12 13:23:19 -0700127
mukesh agrawal51a7e932011-07-27 16:18:26 -0700128 ASSERT_FALSE(profile_->AbandonService(service1_name));
129 ASSERT_TRUE(profile_->AbandonService(service2_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}
133
134TEST_F(ProfileTest, EntryEnumeration) {
Chris Masone6791a432011-07-12 13:23:19 -0700135 scoped_refptr<MockService> service1(
136 new StrictMock<MockService>(&control_interface_,
137 &dispatcher_,
mukesh agrawal51a7e932011-07-27 16:18:26 -0700138 &manager_));
Chris Masone6791a432011-07-12 13:23:19 -0700139 scoped_refptr<MockService> service2(
140 new StrictMock<MockService>(&control_interface_,
141 &dispatcher_,
mukesh agrawal51a7e932011-07-27 16:18:26 -0700142 &manager_));
143 string service1_name(service1->UniqueName());
144 string service2_name(service2->UniqueName());
145
146 EXPECT_CALL(*service1.get(), GetRpcIdentifier())
147 .WillRepeatedly(Return(service1_name));
Chris Masone6791a432011-07-12 13:23:19 -0700148 EXPECT_CALL(*service2.get(), GetRpcIdentifier())
mukesh agrawal51a7e932011-07-27 16:18:26 -0700149 .WillRepeatedly(Return(service2_name));
Chris Masone6791a432011-07-12 13:23:19 -0700150 ASSERT_TRUE(profile_->AdoptService(service1));
151 ASSERT_TRUE(profile_->AdoptService(service2));
152
153 ASSERT_EQ(profile_->EnumerateEntries().size(), 2);
154
mukesh agrawal51a7e932011-07-27 16:18:26 -0700155 ASSERT_TRUE(profile_->AbandonService(service1_name));
156 ASSERT_EQ(profile_->EnumerateEntries()[0], service2_name);
Chris Masone6791a432011-07-12 13:23:19 -0700157
mukesh agrawal51a7e932011-07-27 16:18:26 -0700158 ASSERT_FALSE(profile_->AbandonService(service1_name));
159 ASSERT_EQ(profile_->EnumerateEntries()[0], service2_name);
Chris Masone6791a432011-07-12 13:23:19 -0700160
mukesh agrawal51a7e932011-07-27 16:18:26 -0700161 ASSERT_TRUE(profile_->AbandonService(service2_name));
Chris Masone6791a432011-07-12 13:23:19 -0700162 ASSERT_EQ(profile_->EnumerateEntries().size(), 0);
163}
164
Darin Petkova4766822011-07-07 10:42:22 -0700165} // namespace shill