summaryrefslogtreecommitdiff
path: root/chromium/fuchsia/base/inspect_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/fuchsia/base/inspect_unittest.cc')
-rw-r--r--chromium/fuchsia/base/inspect_unittest.cc95
1 files changed, 95 insertions, 0 deletions
diff --git a/chromium/fuchsia/base/inspect_unittest.cc b/chromium/fuchsia/base/inspect_unittest.cc
new file mode 100644
index 00000000000..7a2bff50c81
--- /dev/null
+++ b/chromium/fuchsia/base/inspect_unittest.cc
@@ -0,0 +1,95 @@
+// Copyright 2020 The Chromium 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/base/inspect.h"
+
+#include <lib/fdio/directory.h>
+#include <lib/inspect/cpp/hierarchy.h>
+#include <lib/inspect/cpp/reader.h>
+#include <lib/inspect/service/cpp/reader.h>
+#include <lib/sys/cpp/component_context.h>
+#include <lib/sys/inspect/cpp/component.h>
+#include <cstdint>
+#include <memory>
+
+#include "base/task/single_thread_task_executor.h"
+#include "base/test/task_environment.h"
+#include "components/version_info/version_info.h"
+#include "fuchsia/base/mem_buffer_util.h"
+#include "fuchsia/base/string_util.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace cr_fuchsia {
+
+namespace {
+
+const char kVersion[] = "version";
+const char kLastChange[] = "last_change_revision";
+
+class InspectTest : public ::testing::Test {
+ public:
+ InspectTest() {
+ fidl::InterfaceHandle<fuchsia::io::Directory> incoming_directory;
+ auto incoming_services =
+ std::make_shared<sys::ServiceDirectory>(std::move(incoming_directory));
+ context_ = std::make_unique<sys::ComponentContext>(
+ std::move(incoming_services),
+ published_root_directory_.NewRequest().TakeChannel());
+ inspector_ = std::make_unique<sys::ComponentInspector>(context_.get());
+ base::RunLoop().RunUntilIdle();
+ }
+
+ InspectTest(const InspectTest&) = delete;
+ InspectTest& operator=(const InspectTest&) = delete;
+
+ protected:
+ base::test::SingleThreadTaskEnvironment task_environment_{
+ base::test::SingleThreadTaskEnvironment::MainThreadType::IO};
+ std::unique_ptr<sys::ComponentContext> context_;
+ fidl::InterfaceHandle<fuchsia::io::Directory> published_root_directory_;
+ std::unique_ptr<sys::ComponentInspector> inspector_;
+};
+
+} // namespace
+
+TEST_F(InspectTest, PublishVersionInfoToInspect) {
+ cr_fuchsia::PublishVersionInfoToInspect(inspector_.get());
+ fidl::InterfaceHandle<fuchsia::io::Directory> directory;
+ zx_status_t status = fdio_service_connect_at(
+ published_root_directory_.channel().get(), "diagnostics",
+ directory.NewRequest().TakeChannel().release());
+ ASSERT_EQ(ZX_OK, status);
+ std::unique_ptr<sys::ServiceDirectory> diagnostics =
+ std::make_unique<sys::ServiceDirectory>(std::move(directory));
+
+ // Access the inspect::Tree where the data is served. |tree| is in the
+ // directory created for the test, not the diagnostics directory for the test
+ // component.
+ fuchsia::inspect::TreePtr tree;
+ diagnostics->Connect(tree.NewRequest());
+ fuchsia::inspect::TreeContent content;
+ base::RunLoop run_loop;
+ tree->GetContent([&content, &run_loop](fuchsia::inspect::TreeContent c) {
+ content = std::move(c);
+ run_loop.Quit();
+ });
+ run_loop.Run();
+
+ // Parse the data as an inspect::Hierarchy.
+ ASSERT_TRUE(content.has_buffer());
+ std::string buffer_data;
+ cr_fuchsia::StringFromMemBuffer(content.buffer(), &buffer_data);
+ inspect::Hierarchy hierarchy =
+ inspect::ReadFromBuffer(cr_fuchsia::StringToBytes(buffer_data))
+ .take_value();
+
+ auto* property =
+ hierarchy.node().get_property<inspect::StringPropertyValue>(kVersion);
+ EXPECT_EQ(property->value(), version_info::GetVersionNumber());
+ property =
+ hierarchy.node().get_property<inspect::StringPropertyValue>(kLastChange);
+ EXPECT_EQ(property->value(), version_info::GetLastChange());
+}
+
+} // namespace cr_fuchsia