1/*
2 * Copyright 2020 Google LLC
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17syntax = "proto3";
18
19package stress_test;
20
21option optimize_for = CODE_SIZE;
22
23message LoggingEventConfig {
24  // The process name that this event can be found on, or LOGCAT to come from
25  // 'adb logcat'.
26  string source = 1;
27  // The name of the event to trigger.
28  string name = 2;
29  // A list of regexes that can be used to detect the specified event.
30  repeated string regex = 3;
31}
32
33message TimeStampConfig {
34  enum TimeStampType {
35    UNKNOWN = 0;
36    DATE = 1;
37    MONOTONIC = 2;
38  }
39  // If the type is DATE, then we assume it can be parsed by a python datetime.
40  // MONOTONIC sources are from the device's boot time.
41  TimeStampType type = 3;
42  // The regex to extract the string containing the timestamp.
43  string regex = 4;
44  // The format string to pass to the python datetime constructor for the
45  // matched regex.
46  string date_format = 5;
47  // The multiplier used on the parsed monotonic time to convert it to seconds.
48  double monotonic_to_seconds_multiplier = 6;
49}
50
51message FileConfig {
52  // The file that should be cat-ed on device to get information. Will be used
53  // by LoggingEventConfigs.
54  string source = 1;
55  // The filepath to save the output of this file on the local machine. If
56  // blank, will be discarded.
57  string destination = 2;
58  // The information needed to extract timestamps from the config.
59  TimeStampConfig time_stamp = 3;
60  // True if the file spits out a bit of the buffer that it did previously when
61  // reopened (like the logcat does).
62  bool repeats_output_on_open = 4;
63}
64
65message ProcessConfig {
66  // The command to run to produce logging output.
67  string command = 1;
68  // The name of the process to be used in LoggingEventConfigs.
69  string name = 2;
70  // The filepath to save the output of this process on the local machine. If
71  // blank, will be discarded.
72  string destination = 3;
73  // The information needed to extract timestamps from the config.
74  TimeStampConfig time_stamp = 4;
75  // Restart the process if it crashes randomly.
76  bool restart = 5;
77  // True if the file spits out a bit of the buffer that it did previously when
78  // reopened (like the logcat does).
79  bool repeats_output_on_open = 6;
80}
81
82message DeviceConfig {
83  // Commands to run once at the beginning of the test for the device.
84  repeated string setup_command = 1;
85  // Files that should have their contents monitored for events.
86  repeated FileConfig file_to_watch = 2;
87  // Files that should be moved to the local machine after every iteration of
88  // the stress test.
89  repeated FileConfig file_to_move = 3;
90  // All events that can be triggered by this device.
91  repeated LoggingEventConfig event = 5;
92  // Any processes that should be monitored for events.
93  repeated ProcessConfig daemon_process = 6;
94  // Include any other device definitions before processing the contents of this
95  // one. Note that if duplicate entries exist for the repeated elements (based
96  // on the name), only the "latest" in the include chain will be used.
97  repeated string include = 7;
98  // A list of tags that should be squelched from the logcat - useful for super
99  // spammy irrelevant logcat tags.
100  repeated string tag_to_suppress = 8;
101  // Either a TestEventConfig without a condition (but a name) that allows extra
102  // actions to take place when a specific test event occurs, or a standard test
103  // event that will be invoked regardless of which test is running.
104  repeated TestEventConfig test_event = 9;
105}
106
107message TestStep {
108  // Path to raw audio file to play during this test step.
109  string audio_file = 1;
110  // Sample rate of audio file.
111  int32 audio_file_sample_rate = 2;
112  // Number of channels in audio file.
113  int32 audio_file_num_channels = 3;
114  // The sox format of the audio file.
115  string audio_file_format = 4;
116  // Command to run on this test step.
117  string command = 5;
118  // How many seconds to wait before executing the command/playing the sound in
119  // this step.
120  float delay_before = 6;
121  // How many seconds to wait after executing the command/playing the sound in
122  // this step.
123  float delay_after = 7;
124}
125
126message ExpectedResult {
127  int32 aohd_hotword_detected = 1;
128  int32 assistant_started = 2;
129  int32 dsp_false_accept = 3;
130  int32 logcat_iteration = 4;
131  int32 software_hotword = 5;
132  int32 speaker_id_rejected = 6;
133  int32 vis_software_hotword = 7;
134}
135
136message TestEventConfig {
137  // The name of the event. (Used for readability/allowing devices to add custom
138  // actions when an event of a specific name occurs).
139  string name = 1;
140  // An eval condition that should only be true when the actions in this event
141  // should be executed.
142  string condition = 2;
143  // List of actions to take when the condition is satisfied. BUGREPORT, NOTIFY,
144  // REMOVE_DEVICE and ABORT are all special values that take a bugreport, send
145  // an email, remove the device from the test or stops stress testing
146  // respectively.
147  repeated string action = 3;
148}
149
150message StressTestConfig {
151  // Description of what the test does.
152  string description = 1;
153  // List of steps to take in sequence repeatedly to do the stress test.
154  repeated TestStep step = 2;
155  // Events that trigger special actions on the device when the condition is
156  // satisfied.
157  repeated TestEventConfig event = 3;
158  // Commands that should be run at the beginning of the test to setup the
159  // device.
160  repeated string setup_command = 4;
161  // Definition of Expected test result
162  repeated ExpectedResult expected_result = 5;
163}
164
165message EventLogDetails {
166  int32 iteration = 1;
167  string name = 2;
168}
169
170message EventLog {
171  repeated EventLogDetails event = 1;
172}
173
174message DeviceIdentifier {
175  string device_type = 1;
176  string serial_number = 2;
177}
178
179message StressTestInfo {
180  // Metadata info describing the devices involved in the stress test, and a bit
181  // about what test was actually run.
182  string test_name = 1;
183  string test_description = 2;
184  string uuid = 3;
185  repeated DeviceIdentifier device = 4;
186}
187