blob: 7736b73536602d828967252bf3a8cb567745594a [file] [log] [blame]
// Copyright 2018 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 LIB_COMPONENT_CPP_TESTING_FAKE_LAUNCHER_H_
#define LIB_COMPONENT_CPP_TESTING_FAKE_LAUNCHER_H_
#include <fs/service.h>
#include <fuchsia/sys/cpp/fidl.h>
#include <lib/fit/function.h>
#include "lib/fidl/cpp/binding.h"
namespace component {
namespace testing {
// A fake |StartupContext| for testing.
// Does not allow publishing or accessing services outside of the test
// environment.
class FakeLauncher : public fuchsia::sys::Launcher {
public:
FakeLauncher();
~FakeLauncher() override;
FakeLauncher(const FakeLauncher&) = delete;
FakeLauncher& operator=(const FakeLauncher&) = delete;
using ComponentConnector = fit::function<void(
fuchsia::sys::LaunchInfo,
fidl::InterfaceRequest<fuchsia::sys::ComponentController>)>;
// Registers a component located at "url" with a connector. When someone
// tries to CreateComponent() with this |url|, the supplied |connector| is
// called with the the LaunchInfo and associated ComponentController request.
// The connector may implement the |LaunchInfo.services| and
// |ComponentController| interfaces to communicate with its connector and
// listen for component signals.
void RegisterComponent(std::string url, ComponentConnector connector);
// Forwards this |CreateComponent| request to a registered connector, if an
// associated one exists. If one is not registered for |launch_info.url|, then
// this call is dropped.
// TODO(CP-57): this needs to be idempotent.
void CreateComponent(fuchsia::sys::LaunchInfo launch_info,
fidl::InterfaceRequest<fuchsia::sys::ComponentController>
controller) override;
private:
std::map<std::string, ComponentConnector> connectors_;
fidl::Binding<Launcher> binding_;
friend class StartupContextForTest;
void Bind(fidl::InterfaceRequest<Launcher> request);
};
} // namespace testing
} // namespace component
#endif // LIB_COMPONENT_CPP_TESTING_FAKE_LAUNCHER_H_