| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_TEST_SYNC_ENGINE_SYNCER_COMMAND_TEST_H_ | 5 #ifndef CHROME_TEST_SYNC_ENGINE_SYNCER_COMMAND_TEST_H_ |
| 6 #define CHROME_TEST_SYNC_ENGINE_SYNCER_COMMAND_TEST_H_ | 6 #define CHROME_TEST_SYNC_ENGINE_SYNCER_COMMAND_TEST_H_ |
| 7 | 7 |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "chrome/browser/sync/engine/model_safe_worker.h" | 10 #include "chrome/browser/sync/engine/model_safe_worker.h" |
| 11 #include "chrome/browser/sync/sessions/sync_session.h" | 11 #include "chrome/browser/sync/sessions/sync_session.h" |
| 12 #include "chrome/browser/sync/sessions/sync_session_context.h" | 12 #include "chrome/browser/sync/sessions/sync_session_context.h" |
| 13 #include "chrome/test/sync/engine/mock_connection_manager.h" | 13 #include "chrome/test/sync/engine/mock_connection_manager.h" |
| 14 #include "chrome/test/sync/engine/test_directory_setter_upper.h" | 14 #include "chrome/test/sync/engine/test_directory_setter_upper.h" |
| 15 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
| 16 | 16 |
| 17 namespace browser_sync { | 17 namespace browser_sync { |
| 18 | 18 |
| 19 // A test fixture that simplifies writing unit tests for individual | 19 // A test fixture that simplifies writing unit tests for individual |
| 20 // SyncerCommands, providing convenient access to a test directory | 20 // SyncerCommands, providing convenient access to a test directory |
| 21 // and a syncer session. | 21 // and a syncer session. |
| 22 template<typename T> | 22 template<typename T> |
| 23 class SyncerCommandTestWithParam : public testing::TestWithParam<T>, | 23 class SyncerCommandTestWithParam : public testing::TestWithParam<T>, |
| 24 public sessions::SyncSession::Delegate, | 24 public sessions::SyncSession::Delegate, |
| 25 public ModelSafeWorkerRegistrar { | 25 public ModelSafeWorkerRegistrar { |
| 26 public: | 26 public: |
| 27 enum UseMockDirectory { |
| 28 USE_MOCK_DIRECTORY |
| 29 }; |
| 30 |
| 27 // SyncSession::Delegate implementation. | 31 // SyncSession::Delegate implementation. |
| 28 virtual void OnSilencedUntil(const base::TimeTicks& silenced_until) { | 32 virtual void OnSilencedUntil(const base::TimeTicks& silenced_until) { |
| 29 FAIL() << "Should not get silenced."; | 33 FAIL() << "Should not get silenced."; |
| 30 } | 34 } |
| 31 virtual bool IsSyncingCurrentlySilenced() { | 35 virtual bool IsSyncingCurrentlySilenced() { |
| 32 ADD_FAILURE() << "No requests for silenced state should be made."; | 36 ADD_FAILURE() << "No requests for silenced state should be made."; |
| 33 return false; | 37 return false; |
| 34 } | 38 } |
| 35 virtual void OnReceivedLongPollIntervalUpdate( | 39 virtual void OnReceivedLongPollIntervalUpdate( |
| 36 const base::TimeDelta& new_interval) { | 40 const base::TimeDelta& new_interval) { |
| 37 FAIL() << "Should not get poll interval update."; | 41 FAIL() << "Should not get poll interval update."; |
| 38 } | 42 } |
| 39 virtual void OnReceivedShortPollIntervalUpdate( | 43 virtual void OnReceivedShortPollIntervalUpdate( |
| 40 const base::TimeDelta& new_interval) { | 44 const base::TimeDelta& new_interval) { |
| 41 FAIL() << "Should not get poll interval update."; | 45 FAIL() << "Should not get poll interval update."; |
| 42 } | 46 } |
| 43 | 47 |
| 44 // ModelSafeWorkerRegistrar implementation. | 48 // ModelSafeWorkerRegistrar implementation. |
| 45 virtual void GetWorkers(std::vector<ModelSafeWorker*>* out) { | 49 virtual void GetWorkers(std::vector<ModelSafeWorker*>* out) { |
| 46 std::vector<scoped_refptr<ModelSafeWorker> >::iterator it; | 50 std::vector<scoped_refptr<ModelSafeWorker> >::iterator it; |
| 47 for (it = workers_.begin(); it != workers_.end(); ++it) | 51 for (it = workers_.begin(); it != workers_.end(); ++it) |
| 48 out->push_back(*it); | 52 out->push_back(*it); |
| 49 } | 53 } |
| 50 virtual void GetModelSafeRoutingInfo(ModelSafeRoutingInfo* out) { | 54 virtual void GetModelSafeRoutingInfo(ModelSafeRoutingInfo* out) { |
| 51 ModelSafeRoutingInfo copy(routing_info_); | 55 ModelSafeRoutingInfo copy(routing_info_); |
| 52 out->swap(copy); | 56 out->swap(copy); |
| 53 } | 57 } |
| 54 | 58 |
| 55 protected: | 59 protected: |
| 56 SyncerCommandTestWithParam() {} | 60 SyncerCommandTestWithParam() : syncdb_(new TestDirectorySetterUpper()) {} |
| 61 |
| 62 explicit SyncerCommandTestWithParam(UseMockDirectory use_mock) |
| 63 : syncdb_(new MockDirectorySetterUpper()) {} |
| 64 |
| 57 virtual ~SyncerCommandTestWithParam() {} | 65 virtual ~SyncerCommandTestWithParam() {} |
| 58 virtual void SetUp() { | 66 virtual void SetUp() { |
| 59 syncdb_.SetUp(); | 67 syncdb_->SetUp(); |
| 60 ResetContext(); | 68 ResetContext(); |
| 61 } | 69 } |
| 62 virtual void TearDown() { | 70 virtual void TearDown() { |
| 63 syncdb_.TearDown(); | 71 syncdb_->TearDown(); |
| 64 } | 72 } |
| 65 | 73 |
| 66 const TestDirectorySetterUpper& syncdb() const { return syncdb_; } | 74 TestDirectorySetterUpper* syncdb() { return syncdb_.get(); } |
| 67 sessions::SyncSessionContext* context() const { return context_.get(); } | 75 sessions::SyncSessionContext* context() const { return context_.get(); } |
| 68 sessions::SyncSession::Delegate* delegate() { return this; } | 76 sessions::SyncSession::Delegate* delegate() { return this; } |
| 69 ModelSafeWorkerRegistrar* registrar() { return this; } | 77 ModelSafeWorkerRegistrar* registrar() { return this; } |
| 70 // Lazily create a session. | 78 // Lazily create a session. |
| 71 sessions::SyncSession* session() { | 79 sessions::SyncSession* session() { |
| 72 if (!session_.get()) | 80 if (!session_.get()) |
| 73 session_.reset(new sessions::SyncSession(context(), delegate())); | 81 session_.reset(new sessions::SyncSession(context(), delegate())); |
| 74 return session_.get(); | 82 return session_.get(); |
| 75 } | 83 } |
| 76 void ClearSession() { | 84 void ClearSession() { |
| 77 session_.reset(); | 85 session_.reset(); |
| 78 } | 86 } |
| 79 | 87 |
| 80 void ResetContext() { | 88 void ResetContext() { |
| 81 context_.reset(new sessions::SyncSessionContext( | 89 context_.reset(new sessions::SyncSessionContext( |
| 82 mock_server_.get(), NULL, syncdb_.manager(), registrar())); | 90 mock_server_.get(), NULL, syncdb_->manager(), registrar())); |
| 83 context_->set_account_name(syncdb_.name()); | 91 context_->set_account_name(syncdb_->name()); |
| 84 ClearSession(); | 92 ClearSession(); |
| 85 } | 93 } |
| 86 | 94 |
| 87 // Install a MockServerConnection. Resets the context. By default, | 95 // Install a MockServerConnection. Resets the context. By default, |
| 88 // the context does not have a MockServerConnection attached. | 96 // the context does not have a MockServerConnection attached. |
| 89 void ConfigureMockServerConnection() { | 97 void ConfigureMockServerConnection() { |
| 90 mock_server_.reset( | 98 mock_server_.reset( |
| 91 new MockConnectionManager(syncdb_.manager(), syncdb_.name())); | 99 new MockConnectionManager(syncdb_->manager(), syncdb_->name())); |
| 92 ResetContext(); | 100 ResetContext(); |
| 93 } | 101 } |
| 94 | 102 |
| 95 std::vector<scoped_refptr<ModelSafeWorker> >* workers() { | 103 std::vector<scoped_refptr<ModelSafeWorker> >* workers() { |
| 96 return &workers_; | 104 return &workers_; |
| 97 } | 105 } |
| 98 | 106 |
| 99 const ModelSafeRoutingInfo& routing_info() { return routing_info_; } | 107 const ModelSafeRoutingInfo& routing_info() { return routing_info_; } |
| 100 ModelSafeRoutingInfo* mutable_routing_info() { return &routing_info_; } | 108 ModelSafeRoutingInfo* mutable_routing_info() { return &routing_info_; } |
| 101 | 109 |
| 102 MockConnectionManager* mock_server() { | 110 MockConnectionManager* mock_server() { |
| 103 return mock_server_.get(); | 111 return mock_server_.get(); |
| 104 } | 112 } |
| 105 | 113 |
| 106 private: | 114 private: |
| 107 TestDirectorySetterUpper syncdb_; | 115 scoped_ptr<TestDirectorySetterUpper> syncdb_; |
| 108 scoped_ptr<sessions::SyncSessionContext> context_; | 116 scoped_ptr<sessions::SyncSessionContext> context_; |
| 109 scoped_ptr<MockConnectionManager> mock_server_; | 117 scoped_ptr<MockConnectionManager> mock_server_; |
| 110 scoped_ptr<sessions::SyncSession> session_; | 118 scoped_ptr<sessions::SyncSession> session_; |
| 111 std::vector<scoped_refptr<ModelSafeWorker> > workers_; | 119 std::vector<scoped_refptr<ModelSafeWorker> > workers_; |
| 112 ModelSafeRoutingInfo routing_info_; | 120 ModelSafeRoutingInfo routing_info_; |
| 113 DISALLOW_COPY_AND_ASSIGN(SyncerCommandTestWithParam); | 121 DISALLOW_COPY_AND_ASSIGN(SyncerCommandTestWithParam); |
| 114 }; | 122 }; |
| 115 | 123 |
| 116 class SyncerCommandTest : public SyncerCommandTestWithParam<void*> {}; | 124 class SyncerCommandTest : public SyncerCommandTestWithParam<void*> {}; |
| 117 | 125 |
| 126 class MockDirectorySyncerCommandTest |
| 127 : public SyncerCommandTestWithParam<void*> { |
| 128 public: |
| 129 MockDirectorySyncerCommandTest() |
| 130 : SyncerCommandTestWithParam<void*>( |
| 131 SyncerCommandTestWithParam<void*>::USE_MOCK_DIRECTORY) {} |
| 132 MockDirectorySetterUpper::MockDirectory* mock_directory() { |
| 133 return static_cast<MockDirectorySetterUpper*>(syncdb())->directory(); |
| 134 } |
| 135 }; |
| 136 |
| 118 } // namespace browser_sync | 137 } // namespace browser_sync |
| 119 | 138 |
| 120 #endif // CHROME_TEST_SYNC_ENGINE_SYNCER_COMMAND_TEST_H_ | 139 #endif // CHROME_TEST_SYNC_ENGINE_SYNCER_COMMAND_TEST_H_ |
| OLD | NEW |