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

library fuchsia.device.test;

using zx;

/// The path which can be used to open the control device
const string CONTROL_DEVICE = "/dev/test/test";

/// Returns the result summary of a test run
struct TestReport {
    /// Total number of tests
    uint32 test_count;
    /// Number of successful tests
    uint32 success_count;
    /// Number of failed tests
    uint32 failure_count;
};

[Layout = "Simple"]
protocol Test {
    /// Execute the tests for this device. Returns the status from the test. If
    /// used as part of the Device protocol then Test output will be streamed to
    /// the socket set by SetOutputSocket().
    RunTests() -> (zx.status status, TestReport report);
};

/// Interface for controlling a device created via RootDevice.CreateDevice
[Layout = "Simple"]
protocol Device {
    compose Test;

    /// Set a socket to stream test output to.
    SetOutputSocket(handle<socket> sock);

    /// Set a channel for the test to use in a test-specific manner.
    SetChannel(handle<channel> chan);

    /// Unload this device.
    Destroy();
};

/// Maximum device name len.  This value must match `ZX_DEVICE_NAME_MAX`.
const uint32 MAX_DEVICE_NAME_LEN = 31;

/// Maximum device path len
const uint32 MAX_DEVICE_PATH_LEN = 1024;

/// Interface for creating devices within a devhost.
[Layout = "Simple"]
protocol RootDevice {
    /// Create a device with the given `name` that is a child of this device.
    /// If `name` contains a trailing ".so", it will be removed.
    ///
    /// If `device_request` is given, it is connected to the newly created device.
    ///
    /// On success, `path` will be the filesystem path of the new device.
    CreateDevice(string:MAX_DEVICE_NAME_LEN name, handle<channel>? device_request)
        -> (zx.status status, string:MAX_DEVICE_PATH_LEN? path);
};
