// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHAPS_OBJECT_STORE_MOCK_H_
#define CHAPS_OBJECT_STORE_MOCK_H_

#include "chaps/object_store.h"

#include <map>
#include <string>

#include <gmock/gmock.h>

namespace chaps {

class ObjectStoreMock : public ObjectStore {
 public:
  ObjectStoreMock();
  virtual ~ObjectStoreMock();
  MOCK_METHOD2(GetInternalBlob,
      bool(int blob_id, std::string* blob));
  MOCK_METHOD2(SetInternalBlob,
      bool(int blob_id, const std::string& blob));
  MOCK_METHOD1(SetEncryptionKey,
      bool(const chromeos::SecureBlob& key));
  MOCK_METHOD2(InsertObjectBlob,
      bool(const ObjectBlob& blob, int* blob_id));
  MOCK_METHOD1(DeleteObjectBlob,
      bool(int blob_id));
  MOCK_METHOD0(DeleteAllObjectBlobs,
      bool());
  MOCK_METHOD2(UpdateObjectBlob,
      bool(int blob_id, const ObjectBlob& blob));
  MOCK_METHOD1(LoadPublicObjectBlobs,
      bool(std::map<int, ObjectBlob>* blobs));
  MOCK_METHOD1(LoadPrivateObjectBlobs,
      bool(std::map<int, ObjectBlob>* blobs));
};

}  // namespace chaps

#endif  // CHAPS_OBJECT_STORE_MOCK_H_
