1c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch# Copyright 2013 The Chromium Authors. All rights reserved.
2c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch# Use of this source code is governed by a BSD-style license that can be
3c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch# found in the LICENSE file.
4c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
5c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch"""Subclass of CloudBucket used for testing."""
6c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
7c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport os
8c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport sys
9c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
10c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochsys.path.append(os.path.join(os.path.dirname(__file__), os.pardir, os.pardir))
11c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport cloud_bucket
12c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
13c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
14c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass MockCloudBucket(cloud_bucket.BaseCloudBucket):
15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  """Subclass of CloudBucket used for testing."""
16c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
17c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  def __init__(self):
18c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    """Initializes the MockCloudBucket with its datastore.
19c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
20c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    Returns:
21c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      An instance of MockCloudBucket.
22c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    """
23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    self.datastore = {}
24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
25c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  def Reset(self):
26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    """Clears the MockCloudBucket's datastore."""
27c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    self.datastore = {}
28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  # override
30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  def UploadFile(self, path, contents, content_type):
31c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    self.datastore[path] = contents
32c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
33c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  # override
34c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  def DownloadFile(self, path):
35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    if self.datastore.has_key(path):
36c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      return self.datastore[path]
37c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    else:
38c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      raise cloud_bucket.FileNotFoundError
39c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
40c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  # override
41c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  def UpdateFile(self, path, contents):
42c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    if not self.FileExists(path):
43c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      raise cloud_bucket.FileNotFoundError
44c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    self.UploadFile(path, contents, '')
45c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
46c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  # override
47c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  def RemoveFile(self, path):
48c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    if self.datastore.has_key(path):
49c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      self.datastore.pop(path)
50c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
51c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  # override
52c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  def FileExists(self, path):
53c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    return self.datastore.has_key(path)
54c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
55c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  # override
56c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  def GetImageURL(self, path):
57c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    if self.datastore.has_key(path):
58c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      return path
59c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    else:
60c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      raise cloud_bucket.FileNotFoundError
61c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
62c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  # override
63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  def GetAllPaths(self, prefix):
64c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    return (item[0] for item in self.datastore.items()
65c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch            if item[0].startswith(prefix))
66