// 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.

library fuchsia.test.hub;

using fuchsia.io;

/// The maximum number of entries to report within a directory in tests.
/// This capacity is currently set somewhat arbitrarily.
const uint64 MAX_NUM_ENTRIES = 100;

/// A protocol used in testing by a component instance to propagate its view of
/// hub directory to the integration test.
[Discoverable]
protocol HubReport {
    /// Returns a list of the entiries within the directories specified by the
    /// provided path.
    ListDirectory(string:fuchsia.io.MAX_PATH path,
                  vector<string:fuchsia.io.MAX_FILENAME>:MAX_NUM_ENTRIES entries) -> ();

    /// Returns the content of the file specified by the provided path.
    ReportFileContent(string:fuchsia.io.MAX_PATH path,
                      string:fuchsia.io.MAX_BUF content) -> ();
};
