1// Copyright (c) 2012 The Chromium 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 "chrome/browser/chromeos/drive/drive_integration_service.h"
6
7#include "chrome/browser/chromeos/drive/dummy_file_system.h"
8#include "chrome/browser/drive/dummy_drive_service.h"
9#include "chrome/test/base/testing_browser_process.h"
10#include "chrome/test/base/testing_profile.h"
11#include "chrome/test/base/testing_profile_manager.h"
12#include "content/public/test/test_browser_thread_bundle.h"
13#include "content/public/test/test_utils.h"
14#include "testing/gtest/include/gtest/gtest.h"
15
16namespace drive {
17
18namespace{
19const char kTestProfileName[] = "test-profile";
20}
21
22class DriveIntegrationServiceTest : public testing::Test {
23 public:
24  DriveIntegrationServiceTest()
25      : profile_manager_(TestingBrowserProcess::GetGlobal()) {}
26
27  virtual void SetUp() OVERRIDE {
28    ASSERT_TRUE(profile_manager_.SetUp());
29  }
30
31 protected:
32  content::TestBrowserThreadBundle thread_bundle_;
33  // DriveIntegrationService depends on DriveNotificationManager which depends
34  // on InvalidationService. On Chrome OS, the InvalidationServiceFactory
35  // uses chromeos::ProfileHelper, which needs the ProfileManager or a
36  // TestProfileManager to be running.
37  TestingProfileManager profile_manager_;
38};
39
40TEST_F(DriveIntegrationServiceTest, InitializeAndShutdown) {
41  scoped_ptr<DriveIntegrationService> integration_service(
42      new DriveIntegrationService(
43          profile_manager_.CreateTestingProfile(kTestProfileName),
44          NULL,
45          new DummyDriveService,
46          std::string(),
47          base::FilePath(),
48          new DummyFileSystem));
49  integration_service->SetEnabled(true);
50  content::RunAllBlockingPoolTasksUntilIdle();
51  integration_service->Shutdown();
52}
53
54TEST_F(DriveIntegrationServiceTest, ServiceInstanceIdentity) {
55  TestingProfile* user1 = profile_manager_.CreateTestingProfile("user1");
56
57  // Integration Service is created as a profile keyed service.
58  EXPECT_TRUE(DriveIntegrationServiceFactory::GetForProfile(user1));
59
60  // Shares the same instance with the incognito mode profile.
61  Profile* user1_incognito = user1->GetOffTheRecordProfile();
62  EXPECT_EQ(DriveIntegrationServiceFactory::GetForProfile(user1),
63            DriveIntegrationServiceFactory::GetForProfile(user1_incognito));
64
65  // For different profiles, different services are running.
66  TestingProfile* user2 = profile_manager_.CreateTestingProfile("user2");
67  EXPECT_NE(DriveIntegrationServiceFactory::GetForProfile(user1),
68            DriveIntegrationServiceFactory::GetForProfile(user2));
69}
70
71}  // namespace drive
72