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 |