| // Copyright 2022 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.blackout.test; |
| |
| using zx; |
| |
| const MAX_DEVICE_PATH uint64 = 100; |
| |
| /// Protocol to control the target-side component of power failure tests for the filesystems. |
| @discoverable |
| closed protocol Controller { |
| /// Run the setup step for this test. Often, this involves formatting the filesystem of choice |
| /// onto the block device, and perhaps setting up a base of files to work with. |
| strict Setup(struct { |
| device_label string:MAX_DEVICE_PATH; |
| device_path string:<MAX_DEVICE_PATH, optional>; |
| seed uint64; |
| }) -> () error zx.Status; |
| |
| /// Run the test step for this test. This kicks off the load generation algorithm for this |
| /// test, which will run indefinitely. It's expected that this load will be interrupted by a |
| /// power cycle. If the provided duration is non-zero, this protocol will return after |
| /// approximately that amount of time, but the load will continue to run. If the duration |
| /// provided is zero, then the test will return when it's done, which for a lot of normal |
| /// blackout tests might be never. |
| strict Test(struct { |
| device_label string:MAX_DEVICE_PATH; |
| device_path string:<MAX_DEVICE_PATH, optional>; |
| seed uint64; |
| duration uint64; |
| }) -> () error zx.Status; |
| |
| /// Run the verify step for this test. Most of the time it involves running fsck on the block |
| /// device and returning the result. |
| strict Verify(struct { |
| device_label string:MAX_DEVICE_PATH; |
| device_path string:<MAX_DEVICE_PATH, optional>; |
| seed uint64; |
| }) -> () error zx.Status; |
| }; |