blob: 44f062a95d4684b14d3cb15e43c91aba60029099 [file] [log] [blame]
// Copyright 2021 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.fuzzer;
using fuchsia.url;
using zx;
/// Entry point for the `fuzz_test_runner`. It uses this protocol to transfer
/// one end of a channel it creates to the `fuzz_manager`. The other end is
/// passed as a startup handle to the fuzzer component itself, which is used to
/// provide `Controller`s on request.
@discoverable
closed protocol Registrar {
/// Adds a `ControllerProvider`. This should be called by the fuzzer itself,
/// using the channel provided by the `fuzz_test_runner`, and in response to
/// being started by the `fuzz_manager`.
///
/// The registry will close the channel to the fuzzer on error, on a
/// corresponding call to `Registry.Disconnect`, or on exit. The fuzzer
/// should exit when the channel closes.
///
/// + request `fuzzer_url` the package URL for the fuzzer.
/// + request `provider` the connection to a `ControllerProvider`.
strict Register(resource struct {
fuzzer_url fuchsia.url.Url;
provider client_end:ControllerProvider;
}) -> ();
};
/// Entry point for the `fuzz_manager`. It uses this protocol to wait for fuzz
/// tests started within the test runner framework to register a
/// `ControllerProvider`, and to stop those fuzzers upon request.
@discoverable
closed protocol Registry {
/// Connects the `Controller` to a registered fuzzer.
///
/// Uses a `ControllerProvider` that has been `Register`ed with the given
/// URL to connect. If the associated provider is not available, it assumes
/// it is starting and blocks until the fuzzer calls `Registrar.Register`,
/// or the given `timeout` elapses. At most one call to `Connect` will block
/// in this manner at a time.
///
/// + request `fuzzer_url` the package URL for the fuzzer.
/// + request `provider` the connection to a `Controller` client.
/// + request `tiemout` maximum duration to wait for a connection.
/// * error one of the following:
/// * `ZX_ERR_TIMED_OUT` if the `timeout` elapses without the provider
/// becoming available.
/// * `ZX_ERR_SHOULD_WAIT` if already waiting for a fuzzer to start.
strict Connect(resource struct {
fuzzer_url fuchsia.url.Url;
controller server_end:Controller;
timeout zx.Duration;
}) -> () error zx.Status;
/// Removes the provider associated with the given URL from the registry and
/// closes its channel. The associated fuzzer should exit upon channel
/// closure.
///
/// + request `fuzzer_url` the package URL for the fuzzer.
/// * error `ZX_ERR_NOT_FOUND` if no such provider exists in the registry.
strict Disconnect(struct {
fuzzer_url fuchsia.url.Url;
}) -> () error zx.Status;
};