blob: 6ff063d5c885e5e2c500c613dc349292b68f6377 [file] [log] [blame] [view]
# Failed routing Example
This directory contains an example of failed
[capability routing](/docs/concepts/components/component_manifests#capability-routing)
in [Component Framework](/docs/concepts/components/introduction.md).
## Building
If these components are not present in your build, they can be added by
appending `--with //examples` to your `fx set` command. For example:
```bash
$ fx set core.x64 --with //examples
$ fx build
```
## Running
Use `ffx component create` to create the component instances inside a restricted
realm for development purposes:
- **C++**
```bash
$ ffx component run /core/ffx-laboratory:echo_realm fuchsia-pkg://fuchsia.com/components-routing-failed-example-cpp#meta/default.cm
```
- **Rust**
```bash
$ ffx component run /core/ffx-laboratory:echo_realm fuchsia-pkg://fuchsia.com/components-routing-failed-example-rust#meta/default.cm
```
Start the client component instance by passing its moniker to
`ffx component start`:
```bash
$ ffx component start /core/ffx-laboratory:echo_realm/echo_client
```
When the above command is run, you can see the component framework error messages
with `fx log`. The `Echo` protocol request fails due to a routing error:
```
[echo_client] WARNING: Required protocol `fidl.examples.routing.echo.Echo` was not available for target component `/core/ffx-laboratory:echo_realm/echo_client`:
`/core/ffx-laboratory:echo_realm/echo_client` tried to use `fidl.examples.routing.echo.Echo` from its parent, but the parent does not offer that capability. Note, use clauses in CML default to using from parent.
```
The `Echo2` protocol request fails due to an issue starting the component:
```
[component_manager] WARN: Failed to start component `echo_server_bad#meta/default.cm`:
unable to load component with url "echo_server_bad#meta/default.cm":
error loading executable: "reading object at \"bin/routing_failed_echo_server_oops\" failed: A FIDL client's channel to the service fuchsia.io.File was closed: NOT_FOUND
```
After running the example, you can remove the example realm using
`ffx component destroy`:
```bash
$ ffx component destroy /core/ffx-laboratory:echo_realm
```