blob: 4a9cee23fcf08671bf58b20bc8e6b4ed54450899 [file] [log] [blame]
// Copyright 2017 The Fuchsia 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 PERIDOT_LIB_TESTING_LEDGER_REPOSITORY_FOR_TESTING_H_
#define PERIDOT_LIB_TESTING_LEDGER_REPOSITORY_FOR_TESTING_H_
#include <string>
#include <fuchsia/cpp/ledger.h>
#include <fuchsia/cpp/ledger_internal.h>
#include "lib/app/cpp/application_context.h"
#include "lib/fidl/cpp/binding.h"
#include "lib/fxl/files/scoped_temp_dir.h"
#include "lib/fxl/macros.h"
#include "lib/fxl/tasks/task_runner.h"
#include "peridot/lib/fidl/app_client.h"
namespace modular {
namespace testing {
// LedgerRepoistoryForTesting spins up a ledger instance and acquires a ledger
// repository meant to be used for testing, particularly in gtest unittests.
class LedgerRepositoryForTesting {
public:
explicit LedgerRepositoryForTesting(const std::string& repository_name);
~LedgerRepositoryForTesting();
ledger_internal::LedgerRepository* ledger_repository();
// Terminates the ledger repository app.
void Terminate(std::function<void()> done);
private:
std::unique_ptr<component::ApplicationContext> application_context_;
files::ScopedTempDir tmp_dir_;
std::unique_ptr<AppClient<ledger_internal::LedgerController>>
ledger_app_client_;
ledger_internal::LedgerRepositoryFactoryPtr ledger_repo_factory_;
ledger_internal::LedgerRepositoryPtr ledger_repo_;
FXL_DISALLOW_COPY_AND_ASSIGN(LedgerRepositoryForTesting);
};
} // namespace testing
} // namespace modular
#endif // PERIDOT_LIB_TESTING_LEDGER_REPOSITORY_FOR_TESTING_H_