Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(873)

Side by Side Diff: base/directory_watcher_unittest.cc

Issue 92151: Add support for almost-recursive watches in Linux DirectoryWatcher... (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 11 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/directory_watcher_inotify.cc ('k') | base/file_util.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2008 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 #include "base/directory_watcher.h" 5 #include "base/directory_watcher.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/file_path.h" 10 #include "base/file_path.h"
11 #include "base/file_util.h" 11 #include "base/file_util.h"
12 #include "base/message_loop.h" 12 #include "base/message_loop.h"
13 #include "base/path_service.h" 13 #include "base/path_service.h"
14 #include "base/platform_thread.h" 14 #include "base/platform_thread.h"
15 #include "base/string_util.h" 15 #include "base/string_util.h"
16 #if defined(OS_WIN) 16 #if defined(OS_WIN)
17 #include "base/win_util.h" 17 #include "base/win_util.h"
18 #endif // defined(OS_WIN) 18 #endif // defined(OS_WIN)
19 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
20 20
21 namespace { 21 namespace {
22 22
23 // For tests where we wait a bit to verify nothing happened 23 // For tests where we wait a bit to verify nothing happened
24 const int kWaitForEventTime = 1000; 24 const int kWaitForEventTime = 1000;
25 25
26 } // namespace
27
26 class DirectoryWatcherTest : public testing::Test { 28 class DirectoryWatcherTest : public testing::Test {
27 public: 29 public:
28 // Implementation of DirectoryWatcher on Mac requires UI loop. 30 // Implementation of DirectoryWatcher on Mac requires UI loop.
29 DirectoryWatcherTest() : loop_(MessageLoop::TYPE_UI) { 31 DirectoryWatcherTest() : loop_(MessageLoop::TYPE_UI) {
30 } 32 }
31 33
32 void OnTestDelegateFirstNotification(const FilePath& path) { 34 void OnTestDelegateFirstNotification(const FilePath& path) {
33 notified_delegates_++; 35 notified_delegates_++;
34 if (notified_delegates_ >= expected_notified_delegates_) 36 if (notified_delegates_ >= expected_notified_delegates_)
35 MessageLoop::current()->Quit(); 37 MessageLoop::current()->Quit();
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 204
203 // Write a file to the test dir. 205 // Write a file to the test dir.
204 SetExpectedNumberOfNotifiedDelegates(0); 206 SetExpectedNumberOfNotifiedDelegates(0);
205 ASSERT_TRUE(WriteTestFile(test_dir_.AppendASCII("test_file"), "content")); 207 ASSERT_TRUE(WriteTestFile(test_dir_.AppendASCII("test_file"), "content"));
206 VerifyExpectedNumberOfNotifiedDelegates(); 208 VerifyExpectedNumberOfNotifiedDelegates();
207 } 209 }
208 210
209 TEST_F(DirectoryWatcherTest, SubDirRecursive) { 211 TEST_F(DirectoryWatcherTest, SubDirRecursive) {
210 FilePath subdir(CreateTestDirDirectoryASCII("SubDir", true)); 212 FilePath subdir(CreateTestDirDirectoryASCII("SubDir", true));
211 213
212 #if defined(OS_LINUX)
213 // TODO(port): Recursive watches are not implemented on Linux.
214 return;
215 #endif // !defined(OS_WIN)
216
217 // Verify that modifications to a subdirectory are noticed by recursive watch. 214 // Verify that modifications to a subdirectory are noticed by recursive watch.
218 TestDelegate delegate(this); 215 TestDelegate delegate(this);
219 DirectoryWatcher watcher; 216 DirectoryWatcher watcher;
220 ASSERT_TRUE(watcher.Watch(test_dir_, &delegate, true)); 217 ASSERT_TRUE(watcher.Watch(test_dir_, &delegate, true));
221 // Write a file to the subdir. 218 // Write a file to the subdir.
222 SetExpectedNumberOfNotifiedDelegates(1); 219 SetExpectedNumberOfNotifiedDelegates(1);
220 watcher.EnsureSetupFinished();
223 ASSERT_TRUE(WriteTestFile(subdir.AppendASCII("test_file"), "some content")); 221 ASSERT_TRUE(WriteTestFile(subdir.AppendASCII("test_file"), "some content"));
224 VerifyExpectedNumberOfNotifiedDelegates(); 222 VerifyExpectedNumberOfNotifiedDelegates();
225 } 223 }
226 224
227 TEST_F(DirectoryWatcherTest, SubDirNonRecursive) { 225 TEST_F(DirectoryWatcherTest, SubDirNonRecursive) {
228 #if defined(OS_WIN) 226 #if defined(OS_WIN)
229 // Disable this test for earlier version of Windows. It turned out to be 227 // Disable this test for earlier version of Windows. It turned out to be
230 // very difficult to create a reliable test for them. 228 // very difficult to create a reliable test for them.
231 if (win_util::GetWinVersion() < win_util::WINVERSION_VISTA) 229 if (win_util::GetWinVersion() < win_util::WINVERSION_VISTA)
232 return; 230 return;
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 VerifyExpectedNumberOfNotifiedDelegates(); 295 VerifyExpectedNumberOfNotifiedDelegates();
298 } 296 }
299 297
300 TEST_F(DirectoryWatcherTest, MultipleWatchersDifferentFiles) { 298 TEST_F(DirectoryWatcherTest, MultipleWatchersDifferentFiles) {
301 const int kNumberOfWatchers = 5; 299 const int kNumberOfWatchers = 5;
302 DirectoryWatcher watchers[kNumberOfWatchers]; 300 DirectoryWatcher watchers[kNumberOfWatchers];
303 TestDelegate delegates[kNumberOfWatchers] = {this, this, this, this, this}; 301 TestDelegate delegates[kNumberOfWatchers] = {this, this, this, this, this};
304 FilePath subdirs[kNumberOfWatchers]; 302 FilePath subdirs[kNumberOfWatchers];
305 for (int i = 0; i < kNumberOfWatchers; i++) { 303 for (int i = 0; i < kNumberOfWatchers; i++) {
306 subdirs[i] = CreateTestDirDirectoryASCII("Dir" + IntToString(i), false); 304 subdirs[i] = CreateTestDirDirectoryASCII("Dir" + IntToString(i), false);
307 ASSERT_TRUE(watchers[i].Watch(subdirs[i], &delegates[i], false)); 305 ASSERT_TRUE(watchers[i].Watch(subdirs[i], &delegates[i], ((i % 2) == 0)));
308 } 306 }
309 for (int i = 0; i < kNumberOfWatchers; i++) { 307 for (int i = 0; i < kNumberOfWatchers; i++) {
310 // Verify that we only get modifications from one watcher (each watcher has 308 // Verify that we only get modifications from one watcher (each watcher has
311 // different directory). 309 // different directory).
312 310
313 for (int j = 0; j < kNumberOfWatchers; j++) 311 for (int j = 0; j < kNumberOfWatchers; j++)
314 delegates[j].reset(); 312 delegates[j].reset();
315 313
316 // Write a file to the subdir. 314 // Write a file to the subdir.
317 SetExpectedNumberOfNotifiedDelegates(1); 315 SetExpectedNumberOfNotifiedDelegates(1);
(...skipping 18 matching lines...) Expand all
336 ASSERT_TRUE(WriteTestFile(subdir.AppendASCII("test_file"), "some content")); 334 ASSERT_TRUE(WriteTestFile(subdir.AppendASCII("test_file"), "some content"));
337 VerifyExpectedNumberOfNotifiedDelegates(); 335 VerifyExpectedNumberOfNotifiedDelegates();
338 336
339 delegate.reset(); 337 delegate.reset();
340 338
341 // Verify that changes inside the subdir are noticed. 339 // Verify that changes inside the subdir are noticed.
342 SetExpectedNumberOfNotifiedDelegates(1); 340 SetExpectedNumberOfNotifiedDelegates(1);
343 ASSERT_TRUE(WriteTestFile(subdir.AppendASCII("test_file"), "other content")); 341 ASSERT_TRUE(WriteTestFile(subdir.AppendASCII("test_file"), "other content"));
344 VerifyExpectedNumberOfNotifiedDelegates(); 342 VerifyExpectedNumberOfNotifiedDelegates();
345 } 343 }
344 #endif // defined(OS_WIN) || defined(OS_MACOSX)
346 345
347 TEST_F(DirectoryWatcherTest, RecursiveWatchDeletedSubdirectory) { 346 TEST_F(DirectoryWatcherTest, RecursiveWatchDeletedSubdirectory) {
348 FilePath subdir(CreateTestDirDirectoryASCII("SubDir", true)); 347 FilePath subdir(CreateTestDirDirectoryASCII("SubDir", true));
349 348
350 TestDelegate delegate(this); 349 TestDelegate delegate(this);
351 DirectoryWatcher watcher; 350 DirectoryWatcher watcher;
352 ASSERT_TRUE(watcher.Watch(test_dir_, &delegate, true)); 351 ASSERT_TRUE(watcher.Watch(test_dir_, &delegate, true));
353 352
354 // Write a file to the subdir. 353 // Write a file to the subdir.
355 SetExpectedNumberOfNotifiedDelegates(1); 354 SetExpectedNumberOfNotifiedDelegates(1);
355 watcher.EnsureSetupFinished();
356 ASSERT_TRUE(WriteTestFile(subdir.AppendASCII("test_file"), "some content")); 356 ASSERT_TRUE(WriteTestFile(subdir.AppendASCII("test_file"), "some content"));
357 VerifyExpectedNumberOfNotifiedDelegates(); 357 VerifyExpectedNumberOfNotifiedDelegates();
358 358
359 delegate.reset(); 359 delegate.reset();
360 360
361 SetExpectedNumberOfNotifiedDelegates(1); 361 SetExpectedNumberOfNotifiedDelegates(1);
362 ASSERT_TRUE(file_util::Delete(subdir, true)); 362 ASSERT_TRUE(file_util::Delete(subdir, true));
363 VerifyExpectedNumberOfNotifiedDelegates(); 363 VerifyExpectedNumberOfNotifiedDelegates();
364 } 364 }
365 365
(...skipping 19 matching lines...) Expand all
385 subdir2.AppendASCII("file"))); 385 subdir2.AppendASCII("file")));
386 VerifyExpectedNumberOfNotifiedDelegates(); 386 VerifyExpectedNumberOfNotifiedDelegates();
387 387
388 delegate1.reset(); 388 delegate1.reset();
389 delegate2.reset(); 389 delegate2.reset();
390 390
391 SetExpectedNumberOfNotifiedDelegates(1); 391 SetExpectedNumberOfNotifiedDelegates(1);
392 ASSERT_TRUE(WriteTestFile(subdir2.AppendASCII("file"), "other content")); 392 ASSERT_TRUE(WriteTestFile(subdir2.AppendASCII("file"), "other content"));
393 VerifyExpectedNumberOfNotifiedDelegates(); 393 VerifyExpectedNumberOfNotifiedDelegates();
394 } 394 }
395 #endif // defined(OS_WIN) || defined(OS_MACOSX)
Paweł Hajdan Jr. 2009/05/12 07:26:37 Let's not move this line at this point. I will fix
396 395
397 // Verify that watching a directory that doesn't exist fails, but doesn't 396 // Verify that watching a directory that doesn't exist fails, but doesn't
398 // asssert. 397 // asssert.
399 // Basic test: add a file and verify we notice it. 398 // Basic test: add a file and verify we notice it.
400 TEST_F(DirectoryWatcherTest, NonExistentDirectory) { 399 TEST_F(DirectoryWatcherTest, NonExistentDirectory) {
401 DirectoryWatcher watcher; 400 DirectoryWatcher watcher;
402 ASSERT_FALSE(watcher.Watch(test_dir_.AppendASCII("does-not-exist"), NULL, 401 ASSERT_FALSE(watcher.Watch(test_dir_.AppendASCII("does-not-exist"), NULL,
403 false)); 402 false));
404 } 403 }
405 404
406 } // namespace
OLDNEW
« no previous file with comments | « base/directory_watcher_inotify.cc ('k') | base/file_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698