/* * 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; }