Index: chrome/browser/extensions/api/system_info_storage/storage_info_provider_unittest.cc |
diff --git a/chrome/browser/extensions/api/system_info_storage/storage_info_provider_unittest.cc b/chrome/browser/extensions/api/system_info_storage/storage_info_provider_unittest.cc |
deleted file mode 100644 |
index 9f628a21f9271df5bb267a7ee5e6962f3aa15901..0000000000000000000000000000000000000000 |
--- a/chrome/browser/extensions/api/system_info_storage/storage_info_provider_unittest.cc |
+++ /dev/null |
@@ -1,272 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-// StorageInfoProvider unit tests. |
- |
-#include "base/message_loop/message_loop.h" |
-#include "base/stl_util.h" |
-#include "chrome/browser/extensions/api/system_info_storage/storage_info_provider.h" |
-#include "chrome/browser/extensions/api/system_info_storage/test_storage_info_provider.h" |
-#include "chrome/browser/storage_monitor/test_storage_monitor.h" |
-#include "content/public/test/test_browser_thread.h" |
-#include "content/public/test/test_utils.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-namespace extensions { |
- |
-using api::experimental_system_info_storage::ParseStorageUnitType; |
-using api::experimental_system_info_storage::StorageUnitInfo; |
-using api::experimental_system_info_storage::StorageUnitType; |
-using base::MessageLoop; |
-using chrome::test::TestStorageMonitor; |
-using content::BrowserThread; |
-using content::RunAllPendingInMessageLoop; |
-using content::RunMessageLoop; |
-using testing::Return; |
-using testing::_; |
- |
-const struct TestStorageUnitInfo kTestingData[] = { |
- {"device:001", "transient:01", "C:", systeminfo::kStorageTypeUnknown, |
- 1000, 10, 0}, |
- {"device:002", "transient:02", "d:", systeminfo::kStorageTypeRemovable, |
- 2000, 10, 1}, |
- {"device:003", "transient:03", "/home", systeminfo::kStorageTypeFixed, |
- 3000, 10, 2}, |
- {"device:004", "transient:04", "/", systeminfo::kStorageTypeRemovable, |
- 4000, 10, 3} |
-}; |
- |
-// The watching interval for unit test is 1 milliseconds. |
-const size_t kWatchingIntervalMs = 1u; |
-// The number of times of checking watched storages. |
-const int kCheckTimes = 10; |
- |
-class MockStorageObserver : public StorageFreeSpaceObserver { |
- public: |
- MockStorageObserver() {} |
- virtual ~MockStorageObserver() {} |
- |
- MOCK_METHOD3(OnFreeSpaceChanged, void(const std::string&, |
- double, double)); |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(MockStorageObserver); |
-}; |
- |
-const int kMaxCheckWatchStorageTimes = 10; |
- |
-// A testing observer used to provide the statistics of how many times |
-// that the storage free space has been changed and check the change against |
-// our expectation. |
-class TestStorageObserver : public StorageFreeSpaceObserver { |
- public: |
- TestStorageObserver() : change_times_(0) { |
- for (size_t i = 0; i < arraysize(kTestingData); ++i) |
- testing_data_.push_back(kTestingData[i]); |
- } |
- |
- virtual ~TestStorageObserver() {} |
- |
- virtual void OnFreeSpaceChanged(const std::string& transient_id, |
- double old_value, |
- double new_value) OVERRIDE { |
- // The observer is added on UI thread, so the callback should be also |
- // called on UI thread. |
- ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- size_t i = 0; |
- for (; i < testing_data_.size(); ++i) { |
- if (testing_data_[i].transient_id == transient_id) { |
- EXPECT_DOUBLE_EQ(new_value-old_value, testing_data_[i].change_step); |
- ++change_times_; |
- break; |
- } |
- } |
- |
- ASSERT_TRUE(i != testing_data_.size()); |
- } |
- |
- private: |
- // A copy of |kTestingData|. |
- std::vector<TestStorageUnitInfo> testing_data_; |
- int change_times_; |
-}; |
- |
-class UnitTestStorageInfoProvider : public TestStorageInfoProvider { |
- public : |
- UnitTestStorageInfoProvider(const struct TestStorageUnitInfo* testing_data, |
- size_t n) |
- : TestStorageInfoProvider(testing_data, n), |
- check_watch_storage_times_(0) {} |
- |
- protected: |
- virtual ~UnitTestStorageInfoProvider() {} |
- |
- private: |
- virtual int64 GetStorageFreeSpaceFromTransientId( |
- const std::string& transient_id) OVERRIDE { |
- int64 available_capacity = -1; |
- for (size_t i = 0; i < testing_data_.size(); ++i) { |
- if (testing_data_[i].transient_id == transient_id) { |
- available_capacity = testing_data_[i].available_capacity; |
- // We simulate free space change by increasing the |available_capacity| |
- // with a fixed change step. |
- testing_data_[i].available_capacity += testing_data_[i].change_step; |
- |
- // Add up the counting variable. |
- ++check_watch_storage_times_; |
- |
- // Post a quit task to UI thread for test result verification |
- // if |check_watch_storage_times_| is greater than the threshold value |
- // |kMaxCheckWatchStorageTimes|. |
- if (check_watch_storage_times_ > kMaxCheckWatchStorageTimes) { |
- BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
- MessageLoop::QuitClosure()); |
- check_watch_storage_times_ = 0; |
- } |
- |
- break; |
- } |
- } |
- return available_capacity; |
- } |
- |
- int check_watch_storage_times_; |
-}; |
- |
-class StorageInfoProviderTest : public testing::Test { |
- public: |
- StorageInfoProviderTest(); |
- virtual ~StorageInfoProviderTest(); |
- |
- protected: |
- virtual void SetUp() OVERRIDE; |
- virtual void TearDown() OVERRIDE; |
- |
- // Run message loop and flush blocking pool to make sure there is no pending |
- // tasks on blocking pool. |
- static void RunLoopAndFlushBlockingPool(); |
- static void RunAllPendingAndFlushBlockingPool(); |
- |
- base::MessageLoop message_loop_; |
- content::TestBrowserThread ui_thread_; |
- scoped_refptr<UnitTestStorageInfoProvider> storage_info_provider_; |
- scoped_ptr<TestStorageMonitor> storage_test_notifications_; |
-}; |
- |
-StorageInfoProviderTest::StorageInfoProviderTest() |
- : message_loop_(base::MessageLoop::TYPE_UI), |
- ui_thread_(BrowserThread::UI, &message_loop_) { |
-} |
- |
-StorageInfoProviderTest::~StorageInfoProviderTest() { |
-} |
- |
-void StorageInfoProviderTest::SetUp() { |
- ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- storage_test_notifications_.reset(new TestStorageMonitor); |
- storage_info_provider_ = new UnitTestStorageInfoProvider( |
- kTestingData, arraysize(kTestingData)); |
-} |
- |
-void StorageInfoProviderTest::TearDown() { |
- RunAllPendingAndFlushBlockingPool(); |
-} |
- |
-void StorageInfoProviderTest::RunLoopAndFlushBlockingPool() { |
- RunMessageLoop(); |
- content::BrowserThread::GetBlockingPool()->FlushForTesting(); |
-} |
- |
-void StorageInfoProviderTest::RunAllPendingAndFlushBlockingPool() { |
- RunAllPendingInMessageLoop(); |
- content::BrowserThread::GetBlockingPool()->FlushForTesting(); |
-} |
- |
-TEST_F(StorageInfoProviderTest, WatchingNoChangedStorage) { |
- // Case 1: watching a storage that the free space is not changed. |
- MockStorageObserver observer; |
- storage_info_provider_->AddObserver(&observer); |
- storage_info_provider_->StartWatching(kTestingData[0].transient_id); |
- EXPECT_CALL(observer, OnFreeSpaceChanged(kTestingData[0].transient_id, _, _)) |
- .Times(0); |
- |
- RunLoopAndFlushBlockingPool(); |
- |
- storage_info_provider_->RemoveObserver(&observer); |
- storage_info_provider_->StopWatching(kTestingData[0].device_id); |
- RunAllPendingAndFlushBlockingPool(); |
-} |
- |
-TEST_F(StorageInfoProviderTest, WatchingOneStorage) { |
- // Case 2: only watching one storage. |
- TestStorageObserver observer; |
- storage_info_provider_->AddObserver(&observer); |
- storage_info_provider_->StartWatching(kTestingData[1].transient_id); |
- RunLoopAndFlushBlockingPool(); |
- |
- storage_info_provider_->StopWatching(kTestingData[1].transient_id); |
- // Give a chance to run StopWatching task on the blocking pool. |
- RunAllPendingAndFlushBlockingPool(); |
- |
- MockStorageObserver mock_observer; |
- storage_info_provider_->AddObserver(&mock_observer); |
- // The watched storage won't get free space change notification. |
- EXPECT_CALL(mock_observer, |
- OnFreeSpaceChanged(kTestingData[1].transient_id, _, _)).Times(0); |
- RunAllPendingAndFlushBlockingPool(); |
- |
- storage_info_provider_->RemoveObserver(&observer); |
- storage_info_provider_->RemoveObserver(&mock_observer); |
-} |
- |
-TEST_F(StorageInfoProviderTest, WatchingMultipleStorages) { |
- // Case 2: watching multiple storages. We ignore the first entry in |
- // |kTestingData| since its change_step is zero. |
- TestStorageObserver observer; |
- storage_info_provider_->AddObserver(&observer); |
- |
- for (size_t k = 1; k < arraysize(kTestingData); ++k) { |
- storage_info_provider_->StartWatching(kTestingData[k].transient_id); |
- } |
- RunLoopAndFlushBlockingPool(); |
- |
- // Stop watching the first storage. |
- storage_info_provider_->StopWatching(kTestingData[1].transient_id); |
- RunAllPendingAndFlushBlockingPool(); |
- |
- MockStorageObserver mock_observer; |
- storage_info_provider_->AddObserver(&mock_observer); |
- for (size_t k = 2; k < arraysize(kTestingData); ++k) { |
- EXPECT_CALL(mock_observer, |
- OnFreeSpaceChanged(kTestingData[k].transient_id, _, _)) |
- .WillRepeatedly(Return()); |
- } |
- |
- // After stopping watching, the observer won't get change notification. |
- EXPECT_CALL(mock_observer, |
- OnFreeSpaceChanged(kTestingData[1].transient_id, _, _)).Times(0); |
- RunLoopAndFlushBlockingPool(); |
- |
- for (size_t k = 1; k < arraysize(kTestingData); ++k) { |
- storage_info_provider_->StopWatching(kTestingData[k].transient_id); |
- } |
- RunAllPendingAndFlushBlockingPool(); |
- storage_info_provider_->RemoveObserver(&observer); |
- storage_info_provider_->RemoveObserver(&mock_observer); |
-} |
- |
-TEST_F(StorageInfoProviderTest, WatchingInvalidStorage) { |
- // Case 3: watching an invalid storage. |
- std::string invalid_id("invalid_id"); |
- MockStorageObserver mock_observer; |
- storage_info_provider_->AddObserver(&mock_observer); |
- storage_info_provider_->StartWatching(invalid_id); |
- EXPECT_CALL(mock_observer, |
- OnFreeSpaceChanged(invalid_id, _, _)).Times(0); |
- RunAllPendingAndFlushBlockingPool(); |
- storage_info_provider_->RemoveObserver(&mock_observer); |
-} |
- |
-} // namespace extensions |