// 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", FragileBase]
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.
    ///
    /// On success, |path| will be the filesystem path of the new device.
    CreateDevice(string:MAX_DEVICE_NAME_LEN name)
                -> (zx.status status, string:MAX_DEVICE_PATH_LEN? path);
};
