This is an adapter component that combines a test using the basic ELF test runner with a configuration file listing tests. This can be useful with test frameworks that do not support dynamically enumerating tests or for frameworks that enumerate tests in a format that we do not support.
This adapter works as a component that implements fuchsia.test.Suite
and instantiates instances of a test component or components in a provided container. The expected component topology looks something like this:
Test realm root: children: [ enumeration-test-adapter ] collection: <A> offer [ { [ capabilities needed by test instances ], to: #<A> } { // Provide access to collection <A> protocol: fuchsia.component.Realm to: #enumeration-test-adapter } ] expose [ { protocol: fuchsia.test.Suite from: #enumeration-test-adapter } ]
When using the expectations comparer, instead of exposing fuchsia.test.Suite from #enumeration-test-adapter instead offer that to the expectation comparer component and then expose fuchsia.test.Suite from it like so:
offer: [ ... { protocol: "fuchsia.test.Suite", from: "#enumeration-test-adapter", to: "#expectation-comparer", }, ], expose: [ { protocol: "fuchsia.test.Suite", // #expectation-comparer is added by // src/lib/testing/expectation/meta/common.shard.cml from: "#expectation-comparer", }, ],
The root test realm can contain multiple collections for containing tests. This is useful if different test cases need different capabilities from each other.
The adapter also requires a configuration file specifying the test cases and invocation details for each case including the component URL, arguments, and collection to instantiate the components within. This configuration file must be provided at the path test_config.json5
in a directory capability named config
offered to the enumeration component. This can be included directly in the package containing the test root realm as a resource and offered from the framework provided pkg directory like so:
{ directory: "pkg", subdir: "enumeration_test_adapter_config/config", as: "config", from: "framework", to: "#enumeration-test-adapter", }
For example, if my_test_component.cm
is a test with cases “1” and 2" selected by the command line argument --test-case=
then the following config file:
{ cases: [ { name: "test1", url: "#meta/my_test_component.cm", args: [ "--test-case=1" ], collection: <A>, }, { name: "test2", url: "#meta/my_test_component.cm", args: [ "--test-case=2" ] collection: <A>, }, ], }
Will tell the list_config runner to expose those as “test1” and “test2” to the fuchsia.test.Suite protocol.