<link rel="stylesheet" href="../style.css" />

[TOC]
# fuchsia.driver.test

<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: 7</span></div>


## **PROTOCOLS**

## Realm {#Realm}
*Defined in [fuchsia.driver.test/realm.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.driver.test/realm.fidl;l=107)*
<p>This protocol is for the DriverTestRealm. It is an integration test
framework for drivers.</p>


### Start {#Realm.Start}

<p>Start the realm. Calling this will cause DriverTestRealm to start
servicing other protocols (like /dev/). <code>args</code> is used to configure
the DriverTestRealm.</p>
<ul>
<li>error <code>ZX_ERR_ALREADY_EXISTS</code> the realm has already had <code>Start</code> called.</li>
</ul>



#### Request {#Realm.Start_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>args</code></td>
            <td>
                <code><a class='link' href='#RealmArgs'>RealmArgs</a></code>
            </td>
        </tr>
</table>


#### Response {#Realm.Start_Response}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>result</code></td>
            <td>
                <code><a class='link' href='#Realm_Start_Result'>Realm_Start_Result</a></code>
            </td>
        </tr>
</table>


## **STRUCTS**

### DriverLog  {#DriverLog data-text="DriverLog"}
*Defined in [fuchsia.driver.test/realm.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.driver.test/realm.fidl;l=15)*

<table>
    <tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
        <tr id="DriverLog.name">
            <td><code>name</code></td>
            <td>
                <code><a class='link' href='#DriverName'>DriverName</a></code>
            </td>
            <td></td>
            <td>No default</td>
        </tr>
        <tr id="DriverLog.log_level">
            <td><code>log_level</code></td>
            <td>
                <code><a class='link' href='../fuchsia.diagnostics/'>fuchsia.diagnostics</a>/<a class='link' href='../fuchsia.diagnostics/#Severity'>Severity</a></code>
            </td>
            <td></td>
            <td>No default</td>
        </tr>
</table>

### Expose  {#Expose data-text="Expose"}
*Defined in [fuchsia.driver.test/realm.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.driver.test/realm.fidl;l=34)*
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: HEAD</span></div>

<table>
    <tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
        <tr id="Expose.service_name">
            <td><code>service_name</code></td>
            <td>
                <code>string</code>
            </td>
            <td></td>
            <td>No default</td>
        </tr>
        <tr id="Expose.collection">
            <td><code>collection</code></td>
            <td>
                <code><a class='link' href='#Collection'>Collection</a></code>
            </td>
            <td></td>
            <td>No default</td>
        </tr>
</table>

### Offer  {#Offer data-text="Offer"}
*Defined in [fuchsia.driver.test/realm.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.driver.test/realm.fidl;l=28)*
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: HEAD</span></div>

<table>
    <tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
        <tr id="Offer.protocol_name">
            <td><code>protocol_name</code></td>
            <td>
                <code>string</code>
            </td>
            <td></td>
            <td>No default</td>
        </tr>
        <tr id="Offer.collection">
            <td><code>collection</code></td>
            <td>
                <code><a class='link' href='#Collection'>Collection</a></code>
            </td>
            <td></td>
            <td>No default</td>
        </tr>
</table>

### Realm_Start_Response  {#Realm_Start_Response data-text="Realm_Start_Response"}
*Defined in [fuchsia.driver.test/realm.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.driver.test/realm.fidl;l=115)*

&lt;EMPTY&gt;


## **ENUMS**

### Collection [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#Collection data-text="Collection"}
Type: <code>uint32</code>

*Defined in [fuchsia.driver.test/realm.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.driver.test/realm.fidl;l=21)*
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: HEAD</span></div>

<table>
    <tr><th>Name</th><th>Value</th><th>Description</th></tr>
        <tr id="Collection.UNKNOWN">
<td><h3 id="Collection.UNKNOWN" class="add-link hide-from-toc">UNKNOWN</h3></td>
            <td><code>0</code></td>
            <td></td>
        </tr>
        <tr id="Collection.BOOT_DRIVERS">
<td><h3 id="Collection.BOOT_DRIVERS" class="add-link hide-from-toc">BOOT_DRIVERS</h3></td>
            <td><code>1</code></td>
            <td></td>
        </tr>
        <tr id="Collection.PACKAGE_DRIVERS">
<td><h3 id="Collection.PACKAGE_DRIVERS" class="add-link hide-from-toc">PACKAGE_DRIVERS</h3></td>
            <td><code>2</code></td>
            <td></td>
        </tr>
</table>


## **TABLES**

### RealmArgs [resource](/fuchsia-src/reference/fidl/language/language.md#value-vs-resource){:.fidl-attribute} {#RealmArgs data-text="RealmArgs"}


*Defined in [fuchsia.driver.test/realm.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.driver.test/realm.fidl;l=40)*
<p>A list of arguments that can be used to configure DriverTestRealm.</p>

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="RealmArgs.boot">
<td><h3 id="RealmArgs.boot" class="add-link hide-from-toc">1</h3></td>
            <td><code>boot</code></td>
            <td>
                <code><a class='link' href='../fuchsia.io/'>fuchsia.io</a>/<a class='link' href='../fuchsia.io/#Directory'>Directory</a></code>
            </td>
            <td><p>This is what DriverManager will see as its boot directory.
Default: DriverTestRealm's package directory</p>
</td>
        </tr>
        <tr id="RealmArgs.root_driver">
<td><h3 id="RealmArgs.root_driver" class="add-link hide-from-toc">2</h3></td>
            <td><code>root_driver</code></td>
            <td>
                <code>string</code>
            </td>
            <td><p>The URL for the driver that will be bound to root.
Default: fuchsia-boot:///#meta/test-parent-sys.cm
NOTE: The test parent driver is not included by default. This must
be included in your package to work correctly.</p>
</td>
        </tr>
        <tr id="RealmArgs.use_driver_framework_v2">
<td><h3 id="RealmArgs.use_driver_framework_v2" class="add-link hide-from-toc">3</h3></td>
            <td><code>use_driver_framework_v2</code></td>
            <td>
                <code>bool</code>
            </td>
            <td><p>If this is true, then DriverManager will load DFv2 drivers.
Default: false</p>
</td>
        </tr>
        <tr id="RealmArgs.driver_tests_enable_all">
<td><h3 id="RealmArgs.driver_tests_enable_all" class="add-link hide-from-toc">4</h3></td>
            <td><code>driver_tests_enable_all</code></td>
            <td>
                <code>bool</code>
            </td>
            <td><p>If this is true, then DriverManager will enable the unit tests
for each driver that is loaded.
Default: false</p>
</td>
        </tr>
        <tr id="RealmArgs.driver_tests_enable">
<td><h3 id="RealmArgs.driver_tests_enable" class="add-link hide-from-toc">5</h3></td>
            <td><code>driver_tests_enable</code></td>
            <td>
                <code>vector&lt;string&gt;</code>
            </td>
            <td><p>If this is true, then DriverManager will enable the unit tests
for each driver in this vector.
Default: empty</p>
</td>
        </tr>
        <tr id="RealmArgs.driver_tests_disable">
<td><h3 id="RealmArgs.driver_tests_disable" class="add-link hide-from-toc">6</h3></td>
            <td><code>driver_tests_disable</code></td>
            <td>
                <code>vector&lt;string&gt;</code>
            </td>
            <td><p>If this is true, then DriverManager will disable the unit tests
for each driver in this vector. This overrides both a specific
request for enabling a test and the 'driver_tests_enable_all'
parameter.
Default: empty</p>
</td>
        </tr>
        <tr id="RealmArgs.driver_log_level">
<td><h3 id="RealmArgs.driver_log_level" class="add-link hide-from-toc">7</h3></td>
            <td><code>driver_log_level</code></td>
            <td>
                <code>vector&lt;<a class='link' href='#DriverLog'>DriverLog</a>&gt;</code>
            </td>
            <td><p>Set a log level for the specific driver.
Default: Log levels are set to INFO</p>
</td>
        </tr>
        <tr id="RealmArgs.driver_disable">
<td><h3 id="RealmArgs.driver_disable" class="add-link hide-from-toc">8</h3></td>
            <td><code>driver_disable</code></td>
            <td>
                <code>vector&lt;string&gt;</code>
            </td>
            <td><p>Disable specific drivers. These drivers will not be bound or loaded.
Default: empty</p>
</td>
        </tr>
        <tr id="RealmArgs.driver_bind_eager">
<td><h3 id="RealmArgs.driver_bind_eager" class="add-link hide-from-toc">9</h3></td>
            <td><code>driver_bind_eager</code></td>
            <td>
                <code>vector&lt;string&gt;</code>
            </td>
            <td><p>Specify drivers to bind 'eagerly'. This turns a driver that normally
binds as a fallback driver into a driver that will be bound normally.
Default: empty</p>
</td>
        </tr>
        <tr id="RealmArgs.board_name">
<td><h3 id="RealmArgs.board_name" class="add-link hide-from-toc">10</h3></td>
            <td><code>board_name</code></td>
            <td>
                <code>string</code>
            </td>
            <td><p>Specify the board name that drivers are aware of.
Default: driver-integration-test</p>
</td>
        </tr>
        <tr id="RealmArgs.offers">
<td><h3 id="RealmArgs.offers" class="add-link hide-from-toc">11</h3></td>
            <td><code>offers</code></td>
            <td>
                <code>vector&lt;<a class='link' href='#Offer'>Offer</a>&gt;</code>
            </td>
            <td><p>Specify additional offers from the test to a driver collection
Default: empty</p>
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: HEAD</span></div>
</td>
        </tr>
        <tr id="RealmArgs.exposes">
<td><h3 id="RealmArgs.exposes" class="add-link hide-from-toc">12</h3></td>
            <td><code>exposes</code></td>
            <td>
                <code>vector&lt;<a class='link' href='#Expose'>Expose</a>&gt;</code>
            </td>
            <td><p>Specify services to expose from the test to a driver collection
Default: empty</p>
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: HEAD</span></div>
</td>
        </tr>
</table>


## **UNIONS**

### Realm_Start_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute}  {#Realm_Start_Result data-text="Realm_Start_Result"}
*Defined in [fuchsia.driver.test/realm.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.driver.test/realm.fidl;l=115)*
<table>
    <tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
        <tr id="Realm_Start_Result.response">
<td><h3 id="Realm_Start_Result.response" class="add-link hide-from-toc">1</h3></td>
            <td><code>response</code></td>
            <td>
                <code><a class='link' href='#Realm_Start_Response'>Realm_Start_Response</a></code>
            </td>
            <td></td>
        </tr>
        <tr id="Realm_Start_Result.err">
<td><h3 id="Realm_Start_Result.err" class="add-link hide-from-toc">2</h3></td>
            <td><code>err</code></td>
            <td>
                <code><a class='link' href='../zx/'>zx</a>/<a class='link' href='../zx/#status'>status</a></code>
            </td>
            <td></td>
        </tr>
</table>




## **ALIASES**

<table>
    <tr><th>Name</th><th>Value</th><th>Description</th></tr>
        <tr id="DriverName">
            <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.driver.test/realm.fidl;l=13">DriverName</a></td>
            <td>
                <code>string</code>[<code><a class='link' href='../fidl/'>fidl</a>/<a class='link' href='../fidl/#MAX'>MAX</a></code>]</td>
            <td><p>A driver name is the name defined in ZIRCON_DRIVER_BEGIN begin macro
for a specific driver.</p>
</td>
        </tr>
</table>
