blob: e1f7c2321928a8b707adfe152618418c67d22d95 [file] [log] [blame]
// Copyright 2019 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.
#include <fuchsia/modular/test/harness/cpp/fidl.h>
#include <fuchsia/modular/testing/cpp/fidl.h>
#include <lib/modular/testing/cpp/fake_agent.h>
#include "src/modular/lib/modular_test_harness/cpp/test_harness_fixture.h"
class FakeAgentTest : public modular_testing::TestHarnessFixture,
public fuchsia::modular::test::harness::Pinger {
protected:
bool pinged() const { return pinged_; }
private:
// |fuchsia::modular::test::harness::Pinger|
void Ping() override { pinged_ = true; }
bool pinged_ = false;
};
// Test that we can call AddAgentService() even before the test harness is run, and that the service
// can be acquired once the agent is launched.
TEST_F(FakeAgentTest, AddAgentService) {
fidl::BindingSet<fuchsia::modular::test::harness::Pinger> pinger_bindings;
auto fake_agent = modular_testing::FakeAgent::CreateWithDefaultOptions();
fake_agent->AddAgentService<fuchsia::modular::test::harness::Pinger>(
pinger_bindings.GetHandler(this));
modular_testing::TestHarnessBuilder builder;
builder.InterceptComponent(fake_agent->BuildInterceptOptions());
builder.BuildAndRun(test_harness());
fuchsia::modular::ComponentContextPtr component_context;
test_harness()->ConnectToModularService(
std::move(fuchsia::modular::testing::ModularService().set_component_context(
component_context.NewRequest())));
fuchsia::modular::AgentControllerPtr agent_controller;
fuchsia::modular::test::harness::PingerPtr pinger;
fuchsia::modular::AgentServiceRequest req;
req.set_service_name(fuchsia::modular::test::harness::Pinger::Name_);
req.set_channel(pinger.NewRequest().TakeChannel());
req.set_handler(fake_agent->url());
req.set_agent_controller(agent_controller.NewRequest());
component_context->ConnectToAgentService(std::move(req));
EXPECT_FALSE(pinged());
pinger->Ping();
RunLoopUntil([this] { return pinged(); });
}