blob: b488e834d40754ca1052fbccc1ec53412739b45c [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.
#include <lib/inspect/cpp/inspect.h>
#include <lib/inspect/cpp/reader.h>
#include <zircon/types.h>
#include <gtest/gtest.h>
#include "src/lib/inspect_deprecated/reader.h"
#include "src/lib/inspect_deprecated/testing/inspect.h"
using inspect::Inspector;
using testing::UnorderedElementsAre;
using namespace inspect_deprecated::testing;
namespace {
TEST(VmoReader, CreateAndReadObjectHierarchy) {
auto inspector = std::make_unique<inspect::Inspector>();
ASSERT_TRUE(inspector);
auto& object = inspector->GetRoot();
auto req = object.CreateChild("requests");
auto network = req.CreateUint("network", 10);
auto wifi = req.CreateUint("wifi", 5);
auto volume = object.CreateDouble("volume", 0.75);
auto assets = object.CreateInt("assets", -100);
auto version = object.CreateString("version", "1.0beta2");
char dump[4000];
memset(dump, 'a', 5);
memset(dump + 5, 'b', 4000 - 5);
auto dump_prop = req.CreateByteVector("dump", std::vector<uint8_t>());
dump_prop.Set(std::vector<uint8_t>(dump, dump + 4000));
inspect::Snapshot snapshot;
ASSERT_EQ(ZX_OK, inspect::Snapshot::Create(inspector->DuplicateVmo(), &snapshot));
std::vector<fit::result<inspect_deprecated::ObjectHierarchy>> hierarchies;
hierarchies.emplace_back(inspect_deprecated::ReadFromSnapshot(std::move(snapshot)));
hierarchies.emplace_back(inspect_deprecated::ReadFromVmo(inspector->DuplicateVmo()));
for (auto& root : hierarchies) {
ASSERT_TRUE(root.is_ok());
EXPECT_THAT(
root.value(),
AllOf(NodeMatches(
AllOf(NameMatches("root"),
PropertyList(UnorderedElementsAre(StringPropertyIs("version", "1.0beta2"))),
MetricList(UnorderedElementsAre(DoubleMetricIs("volume", 0.75),
IntMetricIs("assets", -100))))),
ChildrenMatch(UnorderedElementsAre(NodeMatches(
AllOf(NameMatches("requests"),
PropertyList(UnorderedElementsAre(ByteVectorPropertyIs(
"dump", std::vector((uint8_t*)dump, (uint8_t*)dump + 4000)))),
MetricList(UnorderedElementsAre(UIntMetricIs("network", 10),
UIntMetricIs("wifi", 5)))))))));
}
}
} // namespace