blob: 3ca2e840119da0ab55c66d8f85996ad4fb888455 [file] [log] [blame]
/*
* Copyright 2020 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
syntax = "proto3";
package stress_test;
option optimize_for = CODE_SIZE;
message LoggingEventConfig {
// The process name that this event can be found on, or LOGCAT to come from
// 'adb logcat'.
string source = 1;
// The name of the event to trigger.
string name = 2;
// A list of regexes that can be used to detect the specified event.
repeated string regex = 3;
}
message TimeStampConfig {
enum TimeStampType {
UNKNOWN = 0;
DATE = 1;
MONOTONIC = 2;
}
// If the type is DATE, then we assume it can be parsed by a python datetime.
// MONOTONIC sources are from the device's boot time.
TimeStampType type = 3;
// The regex to extract the string containing the timestamp.
string regex = 4;
// The format string to pass to the python datetime constructor for the
// matched regex.
string date_format = 5;
// The multiplier used on the parsed monotonic time to convert it to seconds.
double monotonic_to_seconds_multiplier = 6;
}
message FileConfig {
// The file that should be cat-ed on device to get information. Will be used
// by LoggingEventConfigs.
string source = 1;
// The filepath to save the output of this file on the local machine. If
// blank, will be discarded.
string destination = 2;
// The information needed to extract timestamps from the config.
TimeStampConfig time_stamp = 3;
// True if the file spits out a bit of the buffer that it did previously when
// reopened (like the logcat does).
bool repeats_output_on_open = 4;
}
message ProcessConfig {
// The command to run to produce logging output.
string command = 1;
// The name of the process to be used in LoggingEventConfigs.
string name = 2;
// The filepath to save the output of this process on the local machine. If
// blank, will be discarded.
string destination = 3;
// The information needed to extract timestamps from the config.
TimeStampConfig time_stamp = 4;
// Restart the process if it crashes randomly.
bool restart = 5;
// True if the file spits out a bit of the buffer that it did previously when
// reopened (like the logcat does).
bool repeats_output_on_open = 6;
}
message DeviceConfig {
// Commands to run once at the beginning of the test for the device.
repeated string setup_command = 1;
// Files that should have their contents monitored for events.
repeated FileConfig file_to_watch = 2;
// Files that should be moved to the local machine after every iteration of
// the stress test.
repeated FileConfig file_to_move = 3;
// All events that can be triggered by this device.
repeated LoggingEventConfig event = 5;
// Any processes that should be monitored for events.
repeated ProcessConfig daemon_process = 6;
// Include any other device definitions before processing the contents of this
// one. Note that if duplicate entries exist for the repeated elements (based
// on the name), only the "latest" in the include chain will be used.
repeated string include = 7;
// A list of tags that should be squelched from the logcat - useful for super
// spammy irrelevant logcat tags.
repeated string tag_to_suppress = 8;
// Either a TestEventConfig without a condition (but a name) that allows extra
// actions to take place when a specific test event occurs, or a standard test
// event that will be invoked regardless of which test is running.
repeated TestEventConfig test_event = 9;
}
message TestStep {
// Path to raw audio file to play during this test step.
string audio_file = 1;
// Sample rate of audio file.
int32 audio_file_sample_rate = 2;
// Number of channels in audio file.
int32 audio_file_num_channels = 3;
// The sox format of the audio file.
string audio_file_format = 4;
// Command to run on this test step.
string command = 5;
// How many seconds to wait before executing the command/playing the sound in
// this step.
float delay_before = 6;
// How many seconds to wait after executing the command/playing the sound in
// this step.
float delay_after = 7;
}
message ExpectedResult {
int32 aohd_hotword_detected = 1;
int32 assistant_started = 2;
int32 dsp_false_accept = 3;
int32 logcat_iteration = 4;
int32 software_hotword = 5;
int32 speaker_id_rejected = 6;
int32 vis_software_hotword = 7;
}
message TestEventConfig {
// The name of the event. (Used for readability/allowing devices to add custom
// actions when an event of a specific name occurs).
string name = 1;
// An eval condition that should only be true when the actions in this event
// should be executed.
string condition = 2;
// List of actions to take when the condition is satisfied. BUGREPORT, NOTIFY,
// REMOVE_DEVICE and ABORT are all special values that take a bugreport, send
// an email, remove the device from the test or stops stress testing
// respectively.
repeated string action = 3;
}
message StressTestConfig {
// Description of what the test does.
string description = 1;
// List of steps to take in sequence repeatedly to do the stress test.
repeated TestStep step = 2;
// Events that trigger special actions on the device when the condition is
// satisfied.
repeated TestEventConfig event = 3;
// Commands that should be run at the beginning of the test to setup the
// device.
repeated string setup_command = 4;
// Definition of Expected test result
repeated ExpectedResult expected_result = 5;
}
message EventLogDetails {
int32 iteration = 1;
string name = 2;
}
message EventLog {
repeated EventLogDetails event = 1;
}
message DeviceIdentifier {
string device_type = 1;
string serial_number = 2;
}
message StressTestInfo {
// Metadata info describing the devices involved in the stress test, and a bit
// about what test was actually run.
string test_name = 1;
string test_description = 2;
string uuid = 3;
repeated DeviceIdentifier device = 4;
}