blob: 32bde1e3030ff3eadbba5f2533a692e49f2be06f [file] [log] [blame]
// Copyright 2021 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 <lib/fidl/cpp/binding.h>
#include "echo_connection.h"
// [START test_imports]
#include <fidl/fidl.examples.routing.echo/cpp/fidl.h>
#include <lib/async-loop/cpp/loop.h>
#include <lib/async-loop/default.h>
#include <lib/inspect/cpp/inspect.h>
#include <lib/inspect/testing/cpp/inspect.h>
#include <gtest/gtest.h>
#include <src/lib/testing/loop_fixture/real_loop_fixture.h>
using namespace inspect::testing;
// [END test_imports]
namespace example {
class EchoConnectionTest : public gtest::RealLoopFixture {
public:
EchoConnectionTest()
: inspector_(),
stats_{std::make_shared<EchoConnectionStats>(EchoConnectionStats{
inspector_.GetRoot().CreateUint("bytes_processed", 0),
inspector_.GetRoot().CreateUint("total_requests", 0),
})},
connection_(stats_) {}
void SetUp() override {
auto [client_end, server_end] =
fidl::CreateEndpoints<fidl_examples_routing_echo::Echo>().value();
fidl::BindServer(dispatcher(), std::move(server_end), &connection_);
echo_client_.emplace(
fidl::Client<fidl_examples_routing_echo::Echo>(std::move(client_end), dispatcher()));
}
protected:
inspect::Inspector inspector_;
std::shared_ptr<EchoConnectionStats> stats_;
EchoConnection connection_;
std::optional<fidl::Client<fidl_examples_routing_echo::Echo>> echo_client_;
};
TEST_F(EchoConnectionTest, EchoServerWritesStats) {
auto on_response = [&](fidl::Result<fidl_examples_routing_echo::Echo::EchoString>& result) {
ASSERT_TRUE(result.is_ok());
};
// Invoke the echo server
echo_client_.value()->EchoString({"Hello World!"}).ThenExactlyOnce(on_response);
echo_client_.value()->EchoString({"Hello World!"}).ThenExactlyOnce(on_response);
RunLoopUntilIdle();
// [START inspect_test]
// Validate the contents of the tree match
auto hierarchy_result = inspect::ReadFromVmo(inspector_.DuplicateVmo());
ASSERT_TRUE(hierarchy_result.is_ok());
EXPECT_THAT(hierarchy_result.take_value(),
NodeMatches(AllOf(PropertyList(::testing::UnorderedElementsAre(
UintIs("bytes_processed", 24), UintIs("total_requests", 2))))));
// [END inspect_test]
}
} // namespace example