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