[FTF] FIDL changes for supporting disabled tests

Changes to fuchsia.test.{TestCase, RunOptions}.

Bug: 45852
Change-Id: I6d75450adb6fc96f430e8072cea029880d974f46
Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/404795
Reviewed-by: Ankur Mittal <anmittal@google.com>
Reviewed-by: Matthew Boetger <boetger@google.com>
Reviewed-by: Shai Barack <shayba@google.com>
Commit-Queue: Konstantin Pozin <kpozin@google.com>
API-Review: Shai Barack <shayba@google.com>
Testability-Review: Shai Barack <shayba@google.com>
diff --git a/examples/tests/rust/echo_test_client.rs b/examples/tests/rust/echo_test_client.rs
index 1370321..d413573 100644
--- a/examples/tests/rust/echo_test_client.rs
+++ b/examples/tests/rust/echo_test_client.rs
@@ -50,8 +50,10 @@
                 let mut stream = iterator.into_stream()?;
                 fasync::spawn(
                     async move {
+                        // TODO(fxb/45852): Support disabled tests.
                         let mut cases_iter =
-                            vec![ftest::Case { name: Some("EchoTest".to_string()) }].into_iter();
+                            vec![ftest::Case { name: Some("EchoTest".to_string()), enabled: None }]
+                                .into_iter();
                         while let Some(ftest::CaseIteratorRequest::GetNext { responder }) =
                             stream.try_next().await?
                         {
diff --git a/sdk/fidl/fuchsia.test/suite.fidl b/sdk/fidl/fuchsia.test/suite.fidl
index 4f08188..2831353 100644
--- a/sdk/fidl/fuchsia.test/suite.fidl
+++ b/sdk/fidl/fuchsia.test/suite.fidl
@@ -17,6 +17,9 @@
     /// Uniquely identifies a test case within a test suite.
     /// This member is required.
     1: Name name;
+    /// Whether the test is enabled or disabled (marked ignored/skipped) by the developer.
+    /// If the member is omitted, the test is assumed to be enabled.
+    2: bool enabled;
 };
 
 /// Represents success, failure, or other possible conditions following a test invocation.
@@ -50,6 +53,9 @@
 
 /// Optional additional instructions for running test cases.
 table RunOptions {
+    /// If set to true, test cases that have been disabled by the test author will nonetheless be
+    /// executed.
+    1: bool include_disabled_tests;
 };
 
 /// Result of invoking a single test case.
diff --git a/src/developer/ffx/plugins/test/src/lib.rs b/src/developer/ffx/plugins/test/src/lib.rs
index de76967..7f525c6 100644
--- a/src/developer/ffx/plugins/test/src/lib.rs
+++ b/src/developer/ffx/plugins/test/src/lib.rs
@@ -287,7 +287,7 @@
     }
 
     fn spawn_fake_iterator_server(values: Vec<String>, mut stream: CaseIteratorRequestStream) {
-        let mut iter = values.into_iter().map(|name| Case { name: Some(name) });
+        let mut iter = values.into_iter().map(|name| Case { name: Some(name), enabled: None });
         fuchsia_async::spawn(async move {
             while let Ok(Some(CaseIteratorRequest::GetNext { responder })) = stream.try_next().await
             {
diff --git a/src/lib/test_executor/rust/src/lib.rs b/src/lib/test_executor/rust/src/lib.rs
index 827c00c..bd0ccc9 100644
--- a/src/lib/test_executor/rust/src/lib.rs
+++ b/src/lib/test_executor/rust/src/lib.rs
@@ -289,7 +289,10 @@
             .context("creating request stream")?;
     suite.run(
         &mut invocations.into_iter().map(|i| i.into()),
-        fidl_fuchsia_test::RunOptions {},
+        fidl_fuchsia_test::RunOptions {
+            // TODO(fxb/45852): Support disabled tests.
+            include_disabled_tests: None,
+        },
         run_listener_client,
     )?;
 
diff --git a/src/sys/test_runners/rust/src/test_server.rs b/src/sys/test_runners/rust/src/test_server.rs
index b00fe62..8d932d2 100644
--- a/src/sys/test_runners/rust/src/test_server.rs
+++ b/src/sys/test_runners/rust/src/test_server.rs
@@ -462,8 +462,13 @@
                 .expect("Failed to run test suite")
         });
 
+        // TODO(fxb/45852): Support disabled tests.
         suite_proxy
-            .run(&mut invocations.into_iter().map(|i| i.into()), RunOptions {}, run_listener_client)
+            .run(
+                &mut invocations.into_iter().map(|i| i.into()),
+                RunOptions::empty(),
+                run_listener_client,
+            )
             .context("cannot call run")?;
 
         collect_listener_event(run_listener).await.context("Failed to collect results")
diff --git a/src/sys/test_runners/src/elf/server.rs b/src/sys/test_runners/src/elf/server.rs
index 0c33c19..7386dad 100644
--- a/src/sys/test_runners/src/elf/server.rs
+++ b/src/sys/test_runners/src/elf/server.rs
@@ -75,8 +75,9 @@
 
                     fasync::spawn(
                         async move {
-                            let mut iter = tests.iter().map(|TestCaseInfo { name }| ftest::Case {
-                                name: Some(name.clone()),
+                            let mut iter = tests.iter().map(|TestCaseInfo { name }| {
+                                // TODO(fxb/45852): Support disabled tests.
+                                ftest::Case { name: Some(name.clone()), enabled: None }
                             });
                             while let Some(ftest::CaseIteratorRequest::GetNext { responder }) =
                                 stream.try_next().await?