blob: 3ca2e840119da0ab55c66d8f85996ad4fb888455 [file] [log] [blame]
jschung25850f02020-06-17 14:38:11 +09001/*
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}