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