test_util.h revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_DRIVE_TEST_UTIL_H_ 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_DRIVE_TEST_UTIL_H_ 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/google_apis/test_util.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/base/completion_callback.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/base/io_buffer.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/base/test_completion_callback.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace net { 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class IOBuffer; 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace net 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace drive { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class FileCacheEntry; 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ChangeListLoader; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace test_util { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// This is a bitmask of cache states in FileCacheEntry. Used only in tests. 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)enum TestFileCacheState { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_CACHE_STATE_NONE = 0, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_CACHE_STATE_PINNED = 1 << 0, 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_CACHE_STATE_PRESENT = 1 << 1, 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_CACHE_STATE_DIRTY = 1 << 2, 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_CACHE_STATE_MOUNTED = 1 << 3, 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TEST_CACHE_STATE_PERSISTENT = 1 << 4, 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Converts |cache_state| which is a bit mask of TestFileCacheState, to a 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// FileCacheEntry. 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)FileCacheEntry ToCacheEntry(int cache_state); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns true if the cache state of the given two cache entries are equal. 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool CacheStatesEqual(const FileCacheEntry& a, const FileCacheEntry& b); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Loads a test json file as root ("/drive") element from a test file stored 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// under chrome/test/data/chromeos. Returns true on success. 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool LoadChangeFeed(const std::string& relative_path, 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ChangeListLoader* change_list_loader, 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_delta_feed, 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& root_resource_id, 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 root_feed_changestamp); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Helper to destroy objects which needs Destroy() to be called on destruction. 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Note: When using this helper, you should destruct objects before 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// BrowserThread. 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct DestroyHelperForTests { 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) template<typename T> 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void operator()(T* object) const { 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (object) { 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) object->Destroy(); 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) google_apis::test_util::RunBlockingPoolTask(); // Finish destruction. 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Reads all the data from |reader| and copies to |content|. Returns net::Error 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// code. 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)template<typename Reader> 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)int ReadAllData(Reader* reader, std::string* content) { 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const int kBufferSize = 10; 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kBufferSize)); 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) while (true) { 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::TestCompletionCallback callback; 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int result = reader->Read(buffer.get(), kBufferSize, callback.callback()); 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result = callback.GetResult(result); 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (result <= 0) { 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Found an error or EOF. Return it. Note: net::OK is 0. 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return result; 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content->append(buffer->data(), result); 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace test_util 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace drive 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif // CHROME_BROWSER_CHROMEOS_DRIVE_TEST_UTIL_H_ 86