blob: df1ea38edf5724156d3172a71f08317058bac8ed [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"
#include "src/lib/testing/loop_fixture/real_loop_fixture.h"
// [START test_imports]
#include <lib/inspect/cpp/inspect.h>
#include <lib/inspect/testing/cpp/inspect.h>
#include <gtest/gtest.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_),
echo_(),
binding_(&connection_, echo_.NewRequest().TakeChannel()) {}
protected:
inspect::Inspector inspector_;
std::shared_ptr<EchoConnectionStats> stats_;
EchoConnection connection_;
fidl::examples::routing::echo::EchoPtr echo_;
fidl::Binding<EchoConnection> binding_;
};
TEST_F(EchoConnectionTest, EchoServerWritesStats) {
// Invoke the echo server
::fidl::StringPtr message;
echo_->EchoString("Hello World!", [&](::fidl::StringPtr retval) { message = retval; });
echo_->EchoString("Hello World!", [&](::fidl::StringPtr retval) { message = retval; });
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