google-apis-devicerun_v1alpha 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2539 @@
1
+ # Copyright 2020 Google LLC
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'date'
16
+ require 'google/apis/core/base_service'
17
+ require 'google/apis/core/json_representation'
18
+ require 'google/apis/core/hashable'
19
+ require 'google/apis/errors'
20
+
21
+ module Google
22
+ module Apis
23
+ module DevicerunV1alpha
24
+
25
+ # Allocation config.
26
+ class AllocationConfig
27
+ include Google::Apis::Core::Hashable
28
+
29
+ # Required. At least one device config is required. If more than one device
30
+ # config is required, the multiple devices are allocated to each shard of the
31
+ # OmniLab job to run multi-device-interaction tests.
32
+ # Corresponds to the JSON property `deviceConfigs`
33
+ # @return [Array<Google::Apis::DevicerunV1alpha::DeviceConfig>]
34
+ attr_accessor :device_configs
35
+
36
+ def initialize(**args)
37
+ update!(**args)
38
+ end
39
+
40
+ # Update properties of this object
41
+ def update!(**args)
42
+ @device_configs = args[:device_configs] if args.key?(:device_configs)
43
+ end
44
+ end
45
+
46
+ # Captures a bugreport from the device. The output will be written to a file
47
+ # named `bugreport.zip` in the execution output directory.
48
+ class AndroidBugreportDeviceAction
49
+ include Google::Apis::Core::Hashable
50
+
51
+ # Optional. Whether to deliver the bugreport when the test passes. If false, the
52
+ # bugreport is skipped on pass to save time (default behavior). If true, the
53
+ # bugreport is always delivered.
54
+ # Corresponds to the JSON property `collectOnPass`
55
+ # @return [Boolean]
56
+ attr_accessor :collect_on_pass
57
+ alias_method :collect_on_pass?, :collect_on_pass
58
+
59
+ def initialize(**args)
60
+ update!(**args)
61
+ end
62
+
63
+ # Update properties of this object
64
+ def update!(**args)
65
+ @collect_on_pass = args[:collect_on_pass] if args.key?(:collect_on_pass)
66
+ end
67
+ end
68
+
69
+ # Captures dumpsys output from the device. The output will be written to a file
70
+ # named `dumpsys.log` in the execution output directory.
71
+ class AndroidDumpsysDeviceAction
72
+ include Google::Apis::Core::Hashable
73
+
74
+ # Optional. Whether to deliver the dumpsys when the test passes. If false, the
75
+ # dumpsys is skipped on pass to save time (default behavior). If true, the
76
+ # dumpsys is always delivered.
77
+ # Corresponds to the JSON property `collectOnPass`
78
+ # @return [Boolean]
79
+ attr_accessor :collect_on_pass
80
+ alias_method :collect_on_pass?, :collect_on_pass
81
+
82
+ def initialize(**args)
83
+ update!(**args)
84
+ end
85
+
86
+ # Update properties of this object
87
+ def update!(**args)
88
+ @collect_on_pass = args[:collect_on_pass] if args.key?(:collect_on_pass)
89
+ end
90
+ end
91
+
92
+ # Installs Android packages on the device. At least one installable is specified
93
+ # when using this device action. Limits: - A maximum of 20 installables in total
94
+ # are allowed. - A maximum of 100 files are allowed in total across all
95
+ # installables.
96
+ class AndroidInstallPackagesDeviceAction
97
+ include Google::Apis::Core::Hashable
98
+
99
+ # Optional. Deprecated: use `pre_target_app_installables`, `target_app` and `
100
+ # post_target_app_installables` instead. The Android packages to install on the
101
+ # device. The installation will be performed in the order specified, before the
102
+ # installables of all other fields.
103
+ # Corresponds to the JSON property `installables`
104
+ # @return [Array<Google::Apis::DevicerunV1alpha::AndroidInstallable>]
105
+ attr_accessor :installables
106
+
107
+ # Optional. The Android packages to install on the device after `target_app` (if
108
+ # specified) is installed. The installation will be performed in the order
109
+ # specified.
110
+ # Corresponds to the JSON property `postTargetAppInstallables`
111
+ # @return [Array<Google::Apis::DevicerunV1alpha::AndroidInstallable>]
112
+ attr_accessor :post_target_app_installables
113
+
114
+ # Optional. The Android packages to install on the device before `target_app` (
115
+ # if specified) is installed. The installation will be performed in the order
116
+ # specified.
117
+ # Corresponds to the JSON property `preTargetAppInstallables`
118
+ # @return [Array<Google::Apis::DevicerunV1alpha::AndroidInstallable>]
119
+ attr_accessor :pre_target_app_installables
120
+
121
+ # An Android Installable represents the file(s) for installing an Android
122
+ # package on a device. This can be an APK, an Android App Bundle (AAB), or an
123
+ # APK Set.
124
+ # Corresponds to the JSON property `targetApp`
125
+ # @return [Google::Apis::DevicerunV1alpha::AndroidInstallable]
126
+ attr_accessor :target_app
127
+
128
+ def initialize(**args)
129
+ update!(**args)
130
+ end
131
+
132
+ # Update properties of this object
133
+ def update!(**args)
134
+ @installables = args[:installables] if args.key?(:installables)
135
+ @post_target_app_installables = args[:post_target_app_installables] if args.key?(:post_target_app_installables)
136
+ @pre_target_app_installables = args[:pre_target_app_installables] if args.key?(:pre_target_app_installables)
137
+ @target_app = args[:target_app] if args.key?(:target_app)
138
+ end
139
+ end
140
+
141
+ # An Android Installable represents the file(s) for installing an Android
142
+ # package on a device. This can be an APK, an Android App Bundle (AAB), or an
143
+ # APK Set.
144
+ class AndroidInstallable
145
+ include Google::Apis::Core::Hashable
146
+
147
+ # Required. Files that make up the package. Supported formats are distinguished
148
+ # by their file extension: - APK: One or more files with extension `.apk`. - App
149
+ # Bundle: A single file with extension `.aab`. - APK Set: A single file with
150
+ # extension `.apks`.
151
+ # Corresponds to the JSON property `files`
152
+ # @return [Array<Google::Apis::DevicerunV1alpha::InputFile>]
153
+ attr_accessor :files
154
+
155
+ def initialize(**args)
156
+ update!(**args)
157
+ end
158
+
159
+ # Update properties of this object
160
+ def update!(**args)
161
+ @files = args[:files] if args.key?(:files)
162
+ end
163
+ end
164
+
165
+ # The configuration of an Android instrumentation test. See https://developer.
166
+ # android.com/training/testing/instrumented-tests for more information on
167
+ # Android instrumentation tests.
168
+ class AndroidInstrumentationTest
169
+ include Google::Apis::Core::Hashable
170
+
171
+ # Optional. Additional test options to pass to the test runner. Passed to `am
172
+ # instrument` command as `-e` options, which will be passed to the
173
+ # instrumentation test runner using its `onCreate()` method. Formats supported
174
+ # in test_targets are not allowed to be used here. Limits: - Maximum number of
175
+ # entries: 32. - Maximum key size: 64 bytes (UTF-8). - Maximum value size: 1024
176
+ # bytes (UTF-8).
177
+ # Corresponds to the JSON property `additionalTestOptions`
178
+ # @return [Hash<String,String>]
179
+ attr_accessor :additional_test_options
180
+
181
+ # Optional. Whether to enable code coverage collection for the test. A coverage
182
+ # file `coverage.ec` will be uploaded to the results folder. For this to work,
183
+ # your classes have to be instrumented offline (build time) by EMMA/JaCoCo.
184
+ # Corresponds to the JSON property `enableCodeCoverage`
185
+ # @return [Boolean]
186
+ attr_accessor :enable_code_coverage
187
+ alias_method :enable_code_coverage?, :enable_code_coverage
188
+
189
+ # Optional. The timeout of the instrumentation test. Default value: 5 min. Range:
190
+ # [1 min, 3 hours].
191
+ # Corresponds to the JSON property `instrumentationTimeout`
192
+ # @return [String]
193
+ attr_accessor :instrumentation_timeout
194
+
195
+ # Optional. The version of the Android Test Orchestrator to use for the test.
196
+ # The available orchestrator versions can be retrieved from the catalog service.
197
+ # If set to "auto", the default orchestrator is used. If not set, no
198
+ # orchestrator is used.
199
+ # Corresponds to the JSON property `orchestratorVersion`
200
+ # @return [String]
201
+ attr_accessor :orchestrator_version
202
+
203
+ # The smart sharding strategy to split the job into multiple shards based on the
204
+ # test methods and their recorded execution time.
205
+ # Corresponds to the JSON property `smartSharding`
206
+ # @return [Google::Apis::DevicerunV1alpha::AndroidInstrumentationTestSmartSharding]
207
+ attr_accessor :smart_sharding
208
+
209
+ # An Android Installable represents the file(s) for installing an Android
210
+ # package on a device. This can be an APK, an Android App Bundle (AAB), or an
211
+ # APK Set.
212
+ # Corresponds to the JSON property `testInstallable`
213
+ # @return [Google::Apis::DevicerunV1alpha::AndroidInstallable]
214
+ attr_accessor :test_installable
215
+
216
+ # Optional. Full class name of the test runner class. The class must be `
217
+ # androidx.test.runner.AndroidJUnitRunner` or a subclass of it. The default
218
+ # value is determined by examining the application's manifest. If multiple
219
+ # instrumentations are found, the first one in the manifest will be used.
220
+ # Corresponds to the JSON property `testRunnerClass`
221
+ # @return [String]
222
+ attr_accessor :test_runner_class
223
+
224
+ # Optional. A list of test targets or target filters to run. Each target must be
225
+ # fully qualified with the package name or class name, in one of these formats: -
226
+ # `package package_name` - `notPackage com.package.to.skip` - `class
227
+ # package_name.class_name` - `class package_name.class_name#method_name` - `
228
+ # notClass com.foo.ClassToSkip` - `notClass com.foo.ClassName#testMethodToSkip` -
229
+ # `annotation com.foo.AnnotationToRun` - `notAnnotation com.foo.
230
+ # AnnotationToSkip` - `size [small|medium|large]` Formats like `testfile` or `
231
+ # notTestfile` won't be supported. If empty, all targets in the module will be
232
+ # run. Limits: - Maximum number of entries: 1024.
233
+ # Corresponds to the JSON property `testTargets`
234
+ # @return [Array<String>]
235
+ attr_accessor :test_targets
236
+
237
+ # Uniformly shards test cases given a total number of shards. It will be
238
+ # translated to `-e numShard` and `-e shardIndex` AndroidJUnitRunner arguments.
239
+ # With uniform sharding enabled, specifying either of these sharding arguments
240
+ # via `environment_variables` is invalid. Based on the sharding mechanism
241
+ # AndroidJUnitRunner uses, there is no guarantee that test cases will be
242
+ # distributed uniformly across all shards.
243
+ # Corresponds to the JSON property `uniformSharding`
244
+ # @return [Google::Apis::DevicerunV1alpha::AndroidInstrumentationTestUniformSharding]
245
+ attr_accessor :uniform_sharding
246
+
247
+ def initialize(**args)
248
+ update!(**args)
249
+ end
250
+
251
+ # Update properties of this object
252
+ def update!(**args)
253
+ @additional_test_options = args[:additional_test_options] if args.key?(:additional_test_options)
254
+ @enable_code_coverage = args[:enable_code_coverage] if args.key?(:enable_code_coverage)
255
+ @instrumentation_timeout = args[:instrumentation_timeout] if args.key?(:instrumentation_timeout)
256
+ @orchestrator_version = args[:orchestrator_version] if args.key?(:orchestrator_version)
257
+ @smart_sharding = args[:smart_sharding] if args.key?(:smart_sharding)
258
+ @test_installable = args[:test_installable] if args.key?(:test_installable)
259
+ @test_runner_class = args[:test_runner_class] if args.key?(:test_runner_class)
260
+ @test_targets = args[:test_targets] if args.key?(:test_targets)
261
+ @uniform_sharding = args[:uniform_sharding] if args.key?(:uniform_sharding)
262
+ end
263
+ end
264
+
265
+ # The smart sharding strategy to split the job into multiple shards based on the
266
+ # test methods and their recorded execution time.
267
+ class AndroidInstrumentationTestSmartSharding
268
+ include Google::Apis::Core::Hashable
269
+
270
+ # Optional. The maximum number of shards to create. If unset or less than 1,
271
+ # system-defined max limits are used. This limit takes precedence if the
272
+ # targeted_shard_duration cannot be satisfied. Limits: - For physical devices,
273
+ # the number of shards must be <= 20. - For virtual devices, the number of
274
+ # shards must be <= 200.
275
+ # Corresponds to the JSON property `maxShardCount`
276
+ # @return [Fixnum]
277
+ attr_accessor :max_shard_count
278
+
279
+ # Required. The targeted duration of each shard. Limits: - Must be at least 2
280
+ # minutes. - Must be at most 3 hours. Shard duration is not guaranteed because
281
+ # smart sharding uses test case history and default durations which may not be
282
+ # accurate. Durations are calculated based on the following inputs: - Timing
283
+ # records from previous runs of the same test case. - For new test cases, the
284
+ # average duration of other known test cases. - A system-chosen, default
285
+ # duration if there are no previous timing records available. Because the actual
286
+ # shard duration can exceed the targeted shard duration, we recommend that you
287
+ # set the targeted value at least 5 minutes less than the maximum allowed
288
+ # instrumentation timeout. This approach avoids cancelling the shard before all
289
+ # tests can finish.
290
+ # Corresponds to the JSON property `targetedShardDuration`
291
+ # @return [String]
292
+ attr_accessor :targeted_shard_duration
293
+
294
+ # Input file.
295
+ # Corresponds to the JSON property `timingRecord`
296
+ # @return [Google::Apis::DevicerunV1alpha::InputFile]
297
+ attr_accessor :timing_record
298
+
299
+ def initialize(**args)
300
+ update!(**args)
301
+ end
302
+
303
+ # Update properties of this object
304
+ def update!(**args)
305
+ @max_shard_count = args[:max_shard_count] if args.key?(:max_shard_count)
306
+ @targeted_shard_duration = args[:targeted_shard_duration] if args.key?(:targeted_shard_duration)
307
+ @timing_record = args[:timing_record] if args.key?(:timing_record)
308
+ end
309
+ end
310
+
311
+ # Uniformly shards test cases given a total number of shards. It will be
312
+ # translated to `-e numShard` and `-e shardIndex` AndroidJUnitRunner arguments.
313
+ # With uniform sharding enabled, specifying either of these sharding arguments
314
+ # via `environment_variables` is invalid. Based on the sharding mechanism
315
+ # AndroidJUnitRunner uses, there is no guarantee that test cases will be
316
+ # distributed uniformly across all shards.
317
+ class AndroidInstrumentationTestUniformSharding
318
+ include Google::Apis::Core::Hashable
319
+
320
+ # Required. The total number of shards to create. This must always be a positive
321
+ # number that is no greater than the total number of test cases. Limits: - For
322
+ # physical devices, the number of shards must be <= 20. - For virtual devices,
323
+ # the number of shards must be <= 200.
324
+ # Corresponds to the JSON property `shardCount`
325
+ # @return [Fixnum]
326
+ attr_accessor :shard_count
327
+
328
+ def initialize(**args)
329
+ update!(**args)
330
+ end
331
+
332
+ # Update properties of this object
333
+ def update!(**args)
334
+ @shard_count = args[:shard_count] if args.key?(:shard_count)
335
+ end
336
+ end
337
+
338
+ # Collects logcat output from the device. The output will be written to a file
339
+ # named `logcat.txt` in the execution output directory.
340
+ class AndroidLogcatDeviceAction
341
+ include Google::Apis::Core::Hashable
342
+
343
+ def initialize(**args)
344
+ update!(**args)
345
+ end
346
+
347
+ # Update properties of this object
348
+ def update!(**args)
349
+ end
350
+ end
351
+
352
+ # Mocks the location of the Android device.
353
+ class AndroidMockLocationDeviceAction
354
+ include Google::Apis::Core::Hashable
355
+
356
+ # An object that represents a latitude/longitude pair. This is expressed as a
357
+ # pair of doubles to represent degrees latitude and degrees longitude. Unless
358
+ # specified otherwise, this object must conform to the WGS84 standard. Values
359
+ # must be within normalized ranges.
360
+ # Corresponds to the JSON property `location`
361
+ # @return [Google::Apis::DevicerunV1alpha::LatLng]
362
+ attr_accessor :location
363
+
364
+ def initialize(**args)
365
+ update!(**args)
366
+ end
367
+
368
+ # Update properties of this object
369
+ def update!(**args)
370
+ @location = args[:location] if args.key?(:location)
371
+ end
372
+ end
373
+
374
+ # The configuration of an Android native binary execution.
375
+ class AndroidNativeBinary
376
+ include Google::Apis::Core::Hashable
377
+
378
+ # Input file.
379
+ # Corresponds to the JSON property `androidNativeBinary`
380
+ # @return [Google::Apis::DevicerunV1alpha::InputFile]
381
+ attr_accessor :android_native_binary
382
+
383
+ # Optional. Arguments for running the binary file. The flags will be appended to
384
+ # the command line that invokes the binary. The number of options is limited to
385
+ # 100.
386
+ # Corresponds to the JSON property `args`
387
+ # @return [Array<String>]
388
+ attr_accessor :args
389
+
390
+ # Optional. A map of environment variables to set for the binary process. The
391
+ # keys are the variable names and the values are the variable values. The
392
+ # maximum number of entries is 100. Each key is limited to 128 characters and
393
+ # must conform to POSIX standards. Each value is limited to 2048 characters. The
394
+ # total size of all environment variables must not exceed 16 KiB.
395
+ # Corresponds to the JSON property `envVars`
396
+ # @return [Hash<String,String>]
397
+ attr_accessor :env_vars
398
+
399
+ # Optional. The timeout of the execution. Default value: 5 min. Range: [1 min, 3
400
+ # hours].
401
+ # Corresponds to the JSON property `executionTimeout`
402
+ # @return [String]
403
+ attr_accessor :execution_timeout
404
+
405
+ def initialize(**args)
406
+ update!(**args)
407
+ end
408
+
409
+ # Update properties of this object
410
+ def update!(**args)
411
+ @android_native_binary = args[:android_native_binary] if args.key?(:android_native_binary)
412
+ @args = args[:args] if args.key?(:args)
413
+ @env_vars = args[:env_vars] if args.key?(:env_vars)
414
+ @execution_timeout = args[:execution_timeout] if args.key?(:execution_timeout)
415
+ end
416
+ end
417
+
418
+ # Sets the orientation of the device.
419
+ class AndroidOrientationDeviceAction
420
+ include Google::Apis::Core::Hashable
421
+
422
+ # Required. The orientation to set the device to. One of `portrait` or `
423
+ # landscape`.
424
+ # Corresponds to the JSON property `orientation`
425
+ # @return [String]
426
+ attr_accessor :orientation
427
+
428
+ def initialize(**args)
429
+ update!(**args)
430
+ end
431
+
432
+ # Update properties of this object
433
+ def update!(**args)
434
+ @orientation = args[:orientation] if args.key?(:orientation)
435
+ end
436
+ end
437
+
438
+ # Pulls directories and files from the device at the end of the run. Files will
439
+ # be copied to the '/artifacts' directory, with the absolute path structure
440
+ # preserved. Note that: 1. A clean device is provided for the run. 2. Any
441
+ # existing files in the output directory may be overwritten. 3. Pulling files is
442
+ # best effort. Will skip files if they don't exist on the device.
443
+ class AndroidPullFilesDeviceAction
444
+ include Google::Apis::Core::Hashable
445
+
446
+ # Required. Absolute directory or file paths to pull from the device. Limits: -
447
+ # A maximum of 10 paths are allowed.
448
+ # Corresponds to the JSON property `paths`
449
+ # @return [Array<String>]
450
+ attr_accessor :paths
451
+
452
+ def initialize(**args)
453
+ update!(**args)
454
+ end
455
+
456
+ # Update properties of this object
457
+ def update!(**args)
458
+ @paths = args[:paths] if args.key?(:paths)
459
+ end
460
+ end
461
+
462
+ # Pushes files to the device at the beginning of the run. Files are overwritten
463
+ # if a file with the same path already exists on the device, if device
464
+ # permissions allow.
465
+ class AndroidPushFilesDeviceAction
466
+ include Google::Apis::Core::Hashable
467
+
468
+ # Required. Configs of pushing files to the device. Limits: - A maximum of 50
469
+ # files are allowed.
470
+ # Corresponds to the JSON property `fileConfigs`
471
+ # @return [Array<Google::Apis::DevicerunV1alpha::AndroidPushFilesDeviceActionFileConfig>]
472
+ attr_accessor :file_configs
473
+
474
+ def initialize(**args)
475
+ update!(**args)
476
+ end
477
+
478
+ # Update properties of this object
479
+ def update!(**args)
480
+ @file_configs = args[:file_configs] if args.key?(:file_configs)
481
+ end
482
+ end
483
+
484
+ # The configuration of pushing a file to the device.
485
+ class AndroidPushFilesDeviceActionFileConfig
486
+ include Google::Apis::Core::Hashable
487
+
488
+ # Required. The destination path on the device.
489
+ # Corresponds to the JSON property `destinationPath`
490
+ # @return [String]
491
+ attr_accessor :destination_path
492
+
493
+ # Input file.
494
+ # Corresponds to the JSON property `sourceFile`
495
+ # @return [Google::Apis::DevicerunV1alpha::InputFile]
496
+ attr_accessor :source_file
497
+
498
+ def initialize(**args)
499
+ update!(**args)
500
+ end
501
+
502
+ # Update properties of this object
503
+ def update!(**args)
504
+ @destination_path = args[:destination_path] if args.key?(:destination_path)
505
+ @source_file = args[:source_file] if args.key?(:source_file)
506
+ end
507
+ end
508
+
509
+ # Records a video of the device screen during the run. The video will be written
510
+ # to a file named `video.mp4` in the execution output directory.
511
+ class AndroidRecordVideoDeviceAction
512
+ include Google::Apis::Core::Hashable
513
+
514
+ # Optional. Whether to discard and not upload the recording when the test passes.
515
+ # Default is false.
516
+ # Corresponds to the JSON property `discardOnPass`
517
+ # @return [Boolean]
518
+ attr_accessor :discard_on_pass
519
+ alias_method :discard_on_pass?, :discard_on_pass
520
+
521
+ def initialize(**args)
522
+ update!(**args)
523
+ end
524
+
525
+ # Update properties of this object
526
+ def update!(**args)
527
+ @discard_on_pass = args[:discard_on_pass] if args.key?(:discard_on_pass)
528
+ end
529
+ end
530
+
531
+ # Switches the locale (language and region) of the device.
532
+ class AndroidSwitchLocaleDeviceAction
533
+ include Google::Apis::Core::Hashable
534
+
535
+ # Required. The locale (language and region) to switch the device to. The format
536
+ # is `language-region`, e.g. "en-US", "zh-CN", etc. The typical language value
537
+ # is a two or three-letter language code as defined in ISO639. The typical
538
+ # region value is a two-letter ISO 3166 code or a three-digit UN M.49 area code.
539
+ # Corresponds to the JSON property `localeCode`
540
+ # @return [String]
541
+ attr_accessor :locale_code
542
+
543
+ def initialize(**args)
544
+ update!(**args)
545
+ end
546
+
547
+ # Update properties of this object
548
+ def update!(**args)
549
+ @locale_code = args[:locale_code] if args.key?(:locale_code)
550
+ end
551
+ end
552
+
553
+ # Request to cancel a session.
554
+ class CancelSessionRequest
555
+ include Google::Apis::Core::Hashable
556
+
557
+ def initialize(**args)
558
+ update!(**args)
559
+ end
560
+
561
+ # Update properties of this object
562
+ def update!(**args)
563
+ end
564
+ end
565
+
566
+ # Response of the cancel session request.
567
+ class CancelSessionResponse
568
+ include Google::Apis::Core::Hashable
569
+
570
+ # The result of the request.
571
+ # Corresponds to the JSON property `cancelResult`
572
+ # @return [String]
573
+ attr_accessor :cancel_result
574
+
575
+ def initialize(**args)
576
+ update!(**args)
577
+ end
578
+
579
+ # Update properties of this object
580
+ def update!(**args)
581
+ @cancel_result = args[:cancel_result] if args.key?(:cancel_result)
582
+ end
583
+ end
584
+
585
+ # Android-specific device attributes.
586
+ class CatalogAndroidDeviceDetails
587
+ include Google::Apis::Core::Hashable
588
+
589
+ # Output only. Mirrors the AOSP `ro.build.type` property, e.g. "user", "
590
+ # userdebug", "eng". Empty if unknown.
591
+ # Corresponds to the JSON property `buildType`
592
+ # @return [String]
593
+ attr_accessor :build_type
594
+
595
+ # Output only. Lists ABIs supported by the device (android.os.Build.
596
+ # SUPPORTED_ABIS), most preferred first, e.g. "arm64-v8a".
597
+ # Corresponds to the JSON property `supportedAbis`
598
+ # @return [Array<String>]
599
+ attr_accessor :supported_abis
600
+
601
+ def initialize(**args)
602
+ update!(**args)
603
+ end
604
+
605
+ # Update properties of this object
606
+ def update!(**args)
607
+ @build_type = args[:build_type] if args.key?(:build_type)
608
+ @supported_abis = args[:supported_abis] if args.key?(:supported_abis)
609
+ end
610
+ end
611
+
612
+ # AndroidX Test Orchestrator-specific attributes. Reserved for future
613
+ # orchestrator-only fields.
614
+ class CatalogAndroidxTestOrchestratorDetails
615
+ include Google::Apis::Core::Hashable
616
+
617
+ def initialize(**args)
618
+ update!(**args)
619
+ end
620
+
621
+ # Update properties of this object
622
+ def update!(**args)
623
+ end
624
+ end
625
+
626
+ # Per-product metadata for the Automation (DeviceRun) product.
627
+ class CatalogAutomationSupport
628
+ include Google::Apis::Core::Hashable
629
+
630
+ def initialize(**args)
631
+ update!(**args)
632
+ end
633
+
634
+ # Update properties of this object
635
+ def update!(**args)
636
+ end
637
+ end
638
+
639
+ # A single routable device configuration in the catalog.
640
+ class CatalogDevice
641
+ include Google::Apis::Core::Hashable
642
+
643
+ # Output only. Reasons for access denial. This model is accessible/usable if
644
+ # this list is empty, otherwise the model is viewable only.
645
+ # Corresponds to the JSON property `accessDeniedReasons`
646
+ # @return [Array<String>]
647
+ attr_accessor :access_denied_reasons
648
+
649
+ # Android-specific device attributes.
650
+ # Corresponds to the JSON property `androidDetails`
651
+ # @return [Google::Apis::DevicerunV1alpha::CatalogAndroidDeviceDetails]
652
+ attr_accessor :android_details
653
+
654
+ # Fleet availability for a device configuration.
655
+ # Corresponds to the JSON property `availability`
656
+ # @return [Google::Apis::DevicerunV1alpha::CatalogDeviceAvailability]
657
+ attr_accessor :availability
658
+
659
+ # Output only. Provides a human-readable display name, e.g. "Pixel 5".
660
+ # Corresponds to the JSON property `displayName`
661
+ # @return [String]
662
+ attr_accessor :display_name
663
+
664
+ # Output only. Specifies the form factor of the device.
665
+ # Corresponds to the JSON property `formFactor`
666
+ # @return [String]
667
+ attr_accessor :form_factor
668
+
669
+ # Output only. Indicates whether the device is physical or virtual.
670
+ # Corresponds to the JSON property `hardwareType`
671
+ # @return [String]
672
+ attr_accessor :hardware_type
673
+
674
+ # iOS-specific device attributes. Reserved for future iOS-only fields.
675
+ # Corresponds to the JSON property `iosDetails`
676
+ # @return [Google::Apis::DevicerunV1alpha::CatalogIosDeviceDetails]
677
+ attr_accessor :ios_details
678
+
679
+ # The lab hosting a device.
680
+ # Corresponds to the JSON property `labInfo`
681
+ # @return [Google::Apis::DevicerunV1alpha::CatalogLabInfo]
682
+ attr_accessor :lab_info
683
+
684
+ # Output only. Additional information. Informational only. May change over the
685
+ # lifecycle of a device.
686
+ # Corresponds to the JSON property `labels`
687
+ # @return [Hash<String,String>]
688
+ attr_accessor :labels
689
+
690
+ # Catalog resource lifecycle: maturity state plus key lifecycle dates.
691
+ # Corresponds to the JSON property `lifecycle`
692
+ # @return [Google::Apis::DevicerunV1alpha::CatalogLifecycle]
693
+ attr_accessor :lifecycle
694
+
695
+ # Output only. Specifies the hardware manufacturer of the device.
696
+ # Corresponds to the JSON property `manufacturer`
697
+ # @return [String]
698
+ attr_accessor :manufacturer
699
+
700
+ # Output only. Provides a human-readable model identifier for this device,
701
+ # independent of OS version. May be empty. Platform-dependent: * Android
702
+ # physical: hardware codename (android.os.Build.DEVICE), e.g. "shiba". * Android
703
+ # virtual: AVD model identifier, e.g. "MediumPhone.arm". * iOS: model identifier,
704
+ # e.g. "iphone14pro".
705
+ # Corresponds to the JSON property `modelCode`
706
+ # @return [String]
707
+ attr_accessor :model_code
708
+
709
+ # Identifier. Identifies the device resource. Format: `projects/`project`/
710
+ # locations/`location`/devices/`device``. The `device` segment is an opaque,
711
+ # stable string. Clients must not parse it to derive or assume device-specific
712
+ # details.
713
+ # Corresponds to the JSON property `name`
714
+ # @return [String]
715
+ attr_accessor :name
716
+
717
+ # Output only. Specifies the OS version, e.g. "30" (Android API level) or "17.4"
718
+ # (iOS).
719
+ # Corresponds to the JSON property `osVersion`
720
+ # @return [String]
721
+ attr_accessor :os_version
722
+
723
+ # Output only. Specifies the platform of the device.
724
+ # Corresponds to the JSON property `platform`
725
+ # @return [String]
726
+ attr_accessor :platform
727
+
728
+ # Screen measurements of a device.
729
+ # Corresponds to the JSON property `primaryScreen`
730
+ # @return [Google::Apis::DevicerunV1alpha::CatalogScreenMetrics]
731
+ attr_accessor :primary_screen
732
+
733
+ # Output only. Products/Services supported by this device.
734
+ # Corresponds to the JSON property `supportedProducts`
735
+ # @return [Array<Google::Apis::DevicerunV1alpha::CatalogSupportedProduct>]
736
+ attr_accessor :supported_products
737
+
738
+ def initialize(**args)
739
+ update!(**args)
740
+ end
741
+
742
+ # Update properties of this object
743
+ def update!(**args)
744
+ @access_denied_reasons = args[:access_denied_reasons] if args.key?(:access_denied_reasons)
745
+ @android_details = args[:android_details] if args.key?(:android_details)
746
+ @availability = args[:availability] if args.key?(:availability)
747
+ @display_name = args[:display_name] if args.key?(:display_name)
748
+ @form_factor = args[:form_factor] if args.key?(:form_factor)
749
+ @hardware_type = args[:hardware_type] if args.key?(:hardware_type)
750
+ @ios_details = args[:ios_details] if args.key?(:ios_details)
751
+ @lab_info = args[:lab_info] if args.key?(:lab_info)
752
+ @labels = args[:labels] if args.key?(:labels)
753
+ @lifecycle = args[:lifecycle] if args.key?(:lifecycle)
754
+ @manufacturer = args[:manufacturer] if args.key?(:manufacturer)
755
+ @model_code = args[:model_code] if args.key?(:model_code)
756
+ @name = args[:name] if args.key?(:name)
757
+ @os_version = args[:os_version] if args.key?(:os_version)
758
+ @platform = args[:platform] if args.key?(:platform)
759
+ @primary_screen = args[:primary_screen] if args.key?(:primary_screen)
760
+ @supported_products = args[:supported_products] if args.key?(:supported_products)
761
+ end
762
+ end
763
+
764
+ # Fleet availability for a device configuration.
765
+ class CatalogDeviceAvailability
766
+ include Google::Apis::Core::Hashable
767
+
768
+ # Output only. Specifies the current availability bucket (idle, immediately
769
+ # allocatable devices) for this device configuration. This is a best-effort
770
+ # snapshot, refreshed periodically. It fluctuates depending on traffic as other
771
+ # requests allocate devices.
772
+ # Corresponds to the JSON property `available`
773
+ # @return [String]
774
+ attr_accessor :available
775
+
776
+ # Output only. Specifies the current capacity bucket for this device
777
+ # configuration. Represents the total number of online devices (idle or in use).
778
+ # Corresponds to the JSON property `capacity`
779
+ # @return [String]
780
+ attr_accessor :capacity
781
+
782
+ def initialize(**args)
783
+ update!(**args)
784
+ end
785
+
786
+ # Update properties of this object
787
+ def update!(**args)
788
+ @available = args[:available] if args.key?(:available)
789
+ @capacity = args[:capacity] if args.key?(:capacity)
790
+ end
791
+ end
792
+
793
+ # Per-product metadata for the DeviceStreaming product.
794
+ class CatalogDeviceStreamingSupport
795
+ include Google::Apis::Core::Hashable
796
+
797
+ # Output only. Specifies the minimum Android Studio version that supports this
798
+ # device. Optional; only set when the device is known to work only at or above a
799
+ # certain Android Studio version. Expected format "major.minor.micro.patch", e.g.
800
+ # "5921.22.2211.8881706".
801
+ # Corresponds to the JSON property `minimumAndroidStudioVersion`
802
+ # @return [String]
803
+ attr_accessor :minimum_android_studio_version
804
+
805
+ def initialize(**args)
806
+ update!(**args)
807
+ end
808
+
809
+ # Update properties of this object
810
+ def update!(**args)
811
+ @minimum_android_studio_version = args[:minimum_android_studio_version] if args.key?(:minimum_android_studio_version)
812
+ end
813
+ end
814
+
815
+ # iOS-specific device attributes. Reserved for future iOS-only fields.
816
+ class CatalogIosDeviceDetails
817
+ include Google::Apis::Core::Hashable
818
+
819
+ def initialize(**args)
820
+ update!(**args)
821
+ end
822
+
823
+ # Update properties of this object
824
+ def update!(**args)
825
+ end
826
+ end
827
+
828
+ # The lab hosting a device.
829
+ class CatalogLabInfo
830
+ include Google::Apis::Core::Hashable
831
+
832
+ # Output only. Display name of the lab where the device is hosted. If empty, the
833
+ # device is hosted in a Google owned lab.
834
+ # Corresponds to the JSON property `displayName`
835
+ # @return [String]
836
+ attr_accessor :display_name
837
+
838
+ # Output only. The Unicode country/region code (CLDR) of the lab where the
839
+ # device is hosted, e.g. "US" for United States, "KR" for South Korea. Empty
840
+ # when the hosting region is not published.
841
+ # Corresponds to the JSON property `regionCode`
842
+ # @return [String]
843
+ attr_accessor :region_code
844
+
845
+ def initialize(**args)
846
+ update!(**args)
847
+ end
848
+
849
+ # Update properties of this object
850
+ def update!(**args)
851
+ @display_name = args[:display_name] if args.key?(:display_name)
852
+ @region_code = args[:region_code] if args.key?(:region_code)
853
+ end
854
+ end
855
+
856
+ # Catalog resource lifecycle: maturity state plus key lifecycle dates.
857
+ class CatalogLifecycle
858
+ include Google::Apis::Core::Hashable
859
+
860
+ # Represents a whole or partial calendar date, such as a birthday. The time of
861
+ # day and time zone are either specified elsewhere or are insignificant. The
862
+ # date is relative to the Gregorian Calendar. This can represent one of the
863
+ # following: * A full date, with non-zero year, month, and day values. * A month
864
+ # and day, with a zero year (for example, an anniversary). * A year on its own,
865
+ # with a zero month and a zero day. * A year and month, with a zero day (for
866
+ # example, a credit card expiration date). Related types: * google.type.
867
+ # TimeOfDay * google.type.DateTime * google.protobuf.Timestamp
868
+ # Corresponds to the JSON property `removalDate`
869
+ # @return [Google::Apis::DevicerunV1alpha::Date]
870
+ attr_accessor :removal_date
871
+
872
+ # Output only. Specifies the current maturity state of the resource.
873
+ # Corresponds to the JSON property `state`
874
+ # @return [String]
875
+ attr_accessor :state
876
+
877
+ def initialize(**args)
878
+ update!(**args)
879
+ end
880
+
881
+ # Update properties of this object
882
+ def update!(**args)
883
+ @removal_date = args[:removal_date] if args.key?(:removal_date)
884
+ @state = args[:state] if args.key?(:state)
885
+ end
886
+ end
887
+
888
+ # Response including listed devices.
889
+ class CatalogListDevicesResponse
890
+ include Google::Apis::Core::Hashable
891
+
892
+ # The list of devices.
893
+ # Corresponds to the JSON property `devices`
894
+ # @return [Array<Google::Apis::DevicerunV1alpha::CatalogDevice>]
895
+ attr_accessor :devices
896
+
897
+ # Token to receive the next page of devices. This will be absent if the end of
898
+ # the response list has been reached.
899
+ # Corresponds to the JSON property `nextPageToken`
900
+ # @return [String]
901
+ attr_accessor :next_page_token
902
+
903
+ def initialize(**args)
904
+ update!(**args)
905
+ end
906
+
907
+ # Update properties of this object
908
+ def update!(**args)
909
+ @devices = args[:devices] if args.key?(:devices)
910
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
911
+ end
912
+ end
913
+
914
+ # Response including listed software versions.
915
+ class CatalogListSoftwareVersionsResponse
916
+ include Google::Apis::Core::Hashable
917
+
918
+ # Token to receive the next page of software versions. This will be absent if
919
+ # the end of the response list has been reached.
920
+ # Corresponds to the JSON property `nextPageToken`
921
+ # @return [String]
922
+ attr_accessor :next_page_token
923
+
924
+ # The list of software versions.
925
+ # Corresponds to the JSON property `softwareVersions`
926
+ # @return [Array<Google::Apis::DevicerunV1alpha::CatalogSoftwareVersion>]
927
+ attr_accessor :software_versions
928
+
929
+ def initialize(**args)
930
+ update!(**args)
931
+ end
932
+
933
+ # Update properties of this object
934
+ def update!(**args)
935
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
936
+ @software_versions = args[:software_versions] if args.key?(:software_versions)
937
+ end
938
+ end
939
+
940
+ # Screen measurements of a device.
941
+ class CatalogScreenMetrics
942
+ include Google::Apis::Core::Hashable
943
+
944
+ # Output only. Pixel density in dots per inch (dpi).
945
+ # Corresponds to the JSON property `densityDpi`
946
+ # @return [Fixnum]
947
+ attr_accessor :density_dpi
948
+
949
+ # Output only. Height in pixels.
950
+ # Corresponds to the JSON property `heightPx`
951
+ # @return [Fixnum]
952
+ attr_accessor :height_px
953
+
954
+ # Output only. Width in pixels.
955
+ # Corresponds to the JSON property `widthPx`
956
+ # @return [Fixnum]
957
+ attr_accessor :width_px
958
+
959
+ def initialize(**args)
960
+ update!(**args)
961
+ end
962
+
963
+ # Update properties of this object
964
+ def update!(**args)
965
+ @density_dpi = args[:density_dpi] if args.key?(:density_dpi)
966
+ @height_px = args[:height_px] if args.key?(:height_px)
967
+ @width_px = args[:width_px] if args.key?(:width_px)
968
+ end
969
+ end
970
+
971
+ # A single software version in the catalog.
972
+ class CatalogSoftwareVersion
973
+ include Google::Apis::Core::Hashable
974
+
975
+ # AndroidX Test Orchestrator-specific attributes. Reserved for future
976
+ # orchestrator-only fields.
977
+ # Corresponds to the JSON property `androidxTestOrchestratorDetails`
978
+ # @return [Google::Apis::DevicerunV1alpha::CatalogAndroidxTestOrchestratorDetails]
979
+ attr_accessor :androidx_test_orchestrator_details
980
+
981
+ # Output only. Provides a human-readable name for this version, e.g. "AndroidX
982
+ # Test Orchestrator 1.4.1".
983
+ # Corresponds to the JSON property `displayName`
984
+ # @return [String]
985
+ attr_accessor :display_name
986
+
987
+ # Output only. Indicates whether the system uses this version when a request
988
+ # does not select one explicitly. Exactly one version per `software_type` is the
989
+ # default, and it may change over time.
990
+ # Corresponds to the JSON property `isDefault`
991
+ # @return [Boolean]
992
+ attr_accessor :is_default
993
+ alias_method :is_default?, :is_default
994
+
995
+ # Catalog resource lifecycle: maturity state plus key lifecycle dates.
996
+ # Corresponds to the JSON property `lifecycle`
997
+ # @return [Google::Apis::DevicerunV1alpha::CatalogLifecycle]
998
+ attr_accessor :lifecycle
999
+
1000
+ # Identifier. Identifies the software version resource. Format: `projects/`
1001
+ # project`/locations/`location`/softwareVersions/`software_version``. The `
1002
+ # software_version` segment is an opaque, stable string. Clients must not parse
1003
+ # it to derive or assume the version.
1004
+ # Corresponds to the JSON property `name`
1005
+ # @return [String]
1006
+ attr_accessor :name
1007
+
1008
+ # Output only. Specifies which software this is a version of. Filter on this
1009
+ # field to narrow the collection to a single kind of software, for example `
1010
+ # software_type = "ANDROIDX_TEST_ORCHESTRATOR"`.
1011
+ # Corresponds to the JSON property `softwareType`
1012
+ # @return [String]
1013
+ attr_accessor :software_type
1014
+
1015
+ # Output only. Specifies the version identifier, e.g. "1.4.1". Unique within a `
1016
+ # software_type`.
1017
+ # Corresponds to the JSON property `version`
1018
+ # @return [String]
1019
+ attr_accessor :version
1020
+
1021
+ # Xcode-specific attributes.
1022
+ # Corresponds to the JSON property `xcodeDetails`
1023
+ # @return [Google::Apis::DevicerunV1alpha::CatalogXcodeDetails]
1024
+ attr_accessor :xcode_details
1025
+
1026
+ def initialize(**args)
1027
+ update!(**args)
1028
+ end
1029
+
1030
+ # Update properties of this object
1031
+ def update!(**args)
1032
+ @androidx_test_orchestrator_details = args[:androidx_test_orchestrator_details] if args.key?(:androidx_test_orchestrator_details)
1033
+ @display_name = args[:display_name] if args.key?(:display_name)
1034
+ @is_default = args[:is_default] if args.key?(:is_default)
1035
+ @lifecycle = args[:lifecycle] if args.key?(:lifecycle)
1036
+ @name = args[:name] if args.key?(:name)
1037
+ @software_type = args[:software_type] if args.key?(:software_type)
1038
+ @version = args[:version] if args.key?(:version)
1039
+ @xcode_details = args[:xcode_details] if args.key?(:xcode_details)
1040
+ end
1041
+ end
1042
+
1043
+ # Declares that a device supports a given Device Cloud product, with optional
1044
+ # per-product metadata. Discriminated by which product-specific message is set;
1045
+ # adding a new product = new oneof arm + new per-product message.
1046
+ class CatalogSupportedProduct
1047
+ include Google::Apis::Core::Hashable
1048
+
1049
+ # Per-product metadata for the Automation (DeviceRun) product.
1050
+ # Corresponds to the JSON property `automation`
1051
+ # @return [Google::Apis::DevicerunV1alpha::CatalogAutomationSupport]
1052
+ attr_accessor :automation
1053
+
1054
+ # Per-product metadata for the DeviceStreaming product.
1055
+ # Corresponds to the JSON property `deviceStreaming`
1056
+ # @return [Google::Apis::DevicerunV1alpha::CatalogDeviceStreamingSupport]
1057
+ attr_accessor :device_streaming
1058
+
1059
+ def initialize(**args)
1060
+ update!(**args)
1061
+ end
1062
+
1063
+ # Update properties of this object
1064
+ def update!(**args)
1065
+ @automation = args[:automation] if args.key?(:automation)
1066
+ @device_streaming = args[:device_streaming] if args.key?(:device_streaming)
1067
+ end
1068
+ end
1069
+
1070
+ # Xcode-specific attributes.
1071
+ class CatalogXcodeDetails
1072
+ include Google::Apis::Core::Hashable
1073
+
1074
+ # Output only. Lists the iOS versions this Xcode can run tests against, e.g. "16.
1075
+ # 6". This is a property of the toolchain, so it says nothing about whether a
1076
+ # device on that iOS version is available; list the `Device` collection to find
1077
+ # out.
1078
+ # Corresponds to the JSON property `supportedIosVersions`
1079
+ # @return [Array<String>]
1080
+ attr_accessor :supported_ios_versions
1081
+
1082
+ def initialize(**args)
1083
+ update!(**args)
1084
+ end
1085
+
1086
+ # Update properties of this object
1087
+ def update!(**args)
1088
+ @supported_ios_versions = args[:supported_ios_versions] if args.key?(:supported_ios_versions)
1089
+ end
1090
+ end
1091
+
1092
+ # Represents a whole or partial calendar date, such as a birthday. The time of
1093
+ # day and time zone are either specified elsewhere or are insignificant. The
1094
+ # date is relative to the Gregorian Calendar. This can represent one of the
1095
+ # following: * A full date, with non-zero year, month, and day values. * A month
1096
+ # and day, with a zero year (for example, an anniversary). * A year on its own,
1097
+ # with a zero month and a zero day. * A year and month, with a zero day (for
1098
+ # example, a credit card expiration date). Related types: * google.type.
1099
+ # TimeOfDay * google.type.DateTime * google.protobuf.Timestamp
1100
+ class Date
1101
+ include Google::Apis::Core::Hashable
1102
+
1103
+ # Day of a month. Must be from 1 to 31 and valid for the year and month, or 0 to
1104
+ # specify a year by itself or a year and month where the day isn't significant.
1105
+ # Corresponds to the JSON property `day`
1106
+ # @return [Fixnum]
1107
+ attr_accessor :day
1108
+
1109
+ # Month of a year. Must be from 1 to 12, or 0 to specify a year without a month
1110
+ # and day.
1111
+ # Corresponds to the JSON property `month`
1112
+ # @return [Fixnum]
1113
+ attr_accessor :month
1114
+
1115
+ # Year of the date. Must be from 1 to 9999, or 0 to specify a date without a
1116
+ # year.
1117
+ # Corresponds to the JSON property `year`
1118
+ # @return [Fixnum]
1119
+ attr_accessor :year
1120
+
1121
+ def initialize(**args)
1122
+ update!(**args)
1123
+ end
1124
+
1125
+ # Update properties of this object
1126
+ def update!(**args)
1127
+ @day = args[:day] if args.key?(:day)
1128
+ @month = args[:month] if args.key?(:month)
1129
+ @year = args[:year] if args.key?(:year)
1130
+ end
1131
+ end
1132
+
1133
+ # The action to be performed on a device.
1134
+ class DeviceAction
1135
+ include Google::Apis::Core::Hashable
1136
+
1137
+ # Captures a bugreport from the device. The output will be written to a file
1138
+ # named `bugreport.zip` in the execution output directory.
1139
+ # Corresponds to the JSON property `androidBugreport`
1140
+ # @return [Google::Apis::DevicerunV1alpha::AndroidBugreportDeviceAction]
1141
+ attr_accessor :android_bugreport
1142
+
1143
+ # Captures dumpsys output from the device. The output will be written to a file
1144
+ # named `dumpsys.log` in the execution output directory.
1145
+ # Corresponds to the JSON property `androidDumpsys`
1146
+ # @return [Google::Apis::DevicerunV1alpha::AndroidDumpsysDeviceAction]
1147
+ attr_accessor :android_dumpsys
1148
+
1149
+ # Installs Android packages on the device. At least one installable is specified
1150
+ # when using this device action. Limits: - A maximum of 20 installables in total
1151
+ # are allowed. - A maximum of 100 files are allowed in total across all
1152
+ # installables.
1153
+ # Corresponds to the JSON property `androidInstallPackages`
1154
+ # @return [Google::Apis::DevicerunV1alpha::AndroidInstallPackagesDeviceAction]
1155
+ attr_accessor :android_install_packages
1156
+
1157
+ # Collects logcat output from the device. The output will be written to a file
1158
+ # named `logcat.txt` in the execution output directory.
1159
+ # Corresponds to the JSON property `androidLogcat`
1160
+ # @return [Google::Apis::DevicerunV1alpha::AndroidLogcatDeviceAction]
1161
+ attr_accessor :android_logcat
1162
+
1163
+ # Mocks the location of the Android device.
1164
+ # Corresponds to the JSON property `androidMockLocation`
1165
+ # @return [Google::Apis::DevicerunV1alpha::AndroidMockLocationDeviceAction]
1166
+ attr_accessor :android_mock_location
1167
+
1168
+ # Sets the orientation of the device.
1169
+ # Corresponds to the JSON property `androidOrientation`
1170
+ # @return [Google::Apis::DevicerunV1alpha::AndroidOrientationDeviceAction]
1171
+ attr_accessor :android_orientation
1172
+
1173
+ # Pulls directories and files from the device at the end of the run. Files will
1174
+ # be copied to the '/artifacts' directory, with the absolute path structure
1175
+ # preserved. Note that: 1. A clean device is provided for the run. 2. Any
1176
+ # existing files in the output directory may be overwritten. 3. Pulling files is
1177
+ # best effort. Will skip files if they don't exist on the device.
1178
+ # Corresponds to the JSON property `androidPullFiles`
1179
+ # @return [Google::Apis::DevicerunV1alpha::AndroidPullFilesDeviceAction]
1180
+ attr_accessor :android_pull_files
1181
+
1182
+ # Pushes files to the device at the beginning of the run. Files are overwritten
1183
+ # if a file with the same path already exists on the device, if device
1184
+ # permissions allow.
1185
+ # Corresponds to the JSON property `androidPushFiles`
1186
+ # @return [Google::Apis::DevicerunV1alpha::AndroidPushFilesDeviceAction]
1187
+ attr_accessor :android_push_files
1188
+
1189
+ # Records a video of the device screen during the run. The video will be written
1190
+ # to a file named `video.mp4` in the execution output directory.
1191
+ # Corresponds to the JSON property `androidRecordVideo`
1192
+ # @return [Google::Apis::DevicerunV1alpha::AndroidRecordVideoDeviceAction]
1193
+ attr_accessor :android_record_video
1194
+
1195
+ # Switches the locale (language and region) of the device.
1196
+ # Corresponds to the JSON property `androidSwitchLocale`
1197
+ # @return [Google::Apis::DevicerunV1alpha::AndroidSwitchLocaleDeviceAction]
1198
+ attr_accessor :android_switch_locale
1199
+
1200
+ # Collects the exported iOS App Privacy Report during the test run. When enabled,
1201
+ # the iOS device records application activity (such as network access, domain
1202
+ # requests, and sensitive resource access like photos, camera, or location) and
1203
+ # exports Apple's official App Privacy Report. The report will be written to a
1204
+ # file named `AppActivityReport.ndjson` in the execution output directory.
1205
+ # Corresponds to the JSON property `iosAppPrivacyReport`
1206
+ # @return [Google::Apis::DevicerunV1alpha::IosAppPrivacyReportDeviceAction]
1207
+ attr_accessor :ios_app_privacy_report
1208
+
1209
+ # Installs iOS packages on the device.
1210
+ # Corresponds to the JSON property `iosInstallPackages`
1211
+ # @return [Google::Apis::DevicerunV1alpha::IosInstallPackagesDeviceAction]
1212
+ attr_accessor :ios_install_packages
1213
+
1214
+ # Pulls directories and files from the iOS device sandbox at the end of the run.
1215
+ # Corresponds to the JSON property `iosPullFiles`
1216
+ # @return [Google::Apis::DevicerunV1alpha::IosPullFilesDeviceAction]
1217
+ attr_accessor :ios_pull_files
1218
+
1219
+ # Pushes files to the iOS device sandbox at the beginning of the run.
1220
+ # Corresponds to the JSON property `iosPushFiles`
1221
+ # @return [Google::Apis::DevicerunV1alpha::IosPushFilesDeviceAction]
1222
+ attr_accessor :ios_push_files
1223
+
1224
+ # Records a video of the iOS device screen during the run. The video will be
1225
+ # written to a file named `video.mp4` in the execution output directory.
1226
+ # Corresponds to the JSON property `iosRecordVideo`
1227
+ # @return [Google::Apis::DevicerunV1alpha::IosRecordVideoDeviceAction]
1228
+ attr_accessor :ios_record_video
1229
+
1230
+ # Switches the locale (language and region) of the iOS application.
1231
+ # Corresponds to the JSON property `iosSwitchLocale`
1232
+ # @return [Google::Apis::DevicerunV1alpha::IosSwitchLocaleDeviceAction]
1233
+ attr_accessor :ios_switch_locale
1234
+
1235
+ def initialize(**args)
1236
+ update!(**args)
1237
+ end
1238
+
1239
+ # Update properties of this object
1240
+ def update!(**args)
1241
+ @android_bugreport = args[:android_bugreport] if args.key?(:android_bugreport)
1242
+ @android_dumpsys = args[:android_dumpsys] if args.key?(:android_dumpsys)
1243
+ @android_install_packages = args[:android_install_packages] if args.key?(:android_install_packages)
1244
+ @android_logcat = args[:android_logcat] if args.key?(:android_logcat)
1245
+ @android_mock_location = args[:android_mock_location] if args.key?(:android_mock_location)
1246
+ @android_orientation = args[:android_orientation] if args.key?(:android_orientation)
1247
+ @android_pull_files = args[:android_pull_files] if args.key?(:android_pull_files)
1248
+ @android_push_files = args[:android_push_files] if args.key?(:android_push_files)
1249
+ @android_record_video = args[:android_record_video] if args.key?(:android_record_video)
1250
+ @android_switch_locale = args[:android_switch_locale] if args.key?(:android_switch_locale)
1251
+ @ios_app_privacy_report = args[:ios_app_privacy_report] if args.key?(:ios_app_privacy_report)
1252
+ @ios_install_packages = args[:ios_install_packages] if args.key?(:ios_install_packages)
1253
+ @ios_pull_files = args[:ios_pull_files] if args.key?(:ios_pull_files)
1254
+ @ios_push_files = args[:ios_push_files] if args.key?(:ios_push_files)
1255
+ @ios_record_video = args[:ios_record_video] if args.key?(:ios_record_video)
1256
+ @ios_switch_locale = args[:ios_switch_locale] if args.key?(:ios_switch_locale)
1257
+ end
1258
+ end
1259
+
1260
+ # The configuration of a run on a device.
1261
+ class DeviceConfig
1262
+ include Google::Apis::Core::Hashable
1263
+
1264
+ # Optional. The actions to be performed on the device. Actions will be executed
1265
+ # in the order they are specified in the list. Each action type can at most have
1266
+ # 1 instance in the list.
1267
+ # Corresponds to the JSON property `actions`
1268
+ # @return [Array<Google::Apis::DevicerunV1alpha::DeviceAction>]
1269
+ attr_accessor :actions
1270
+
1271
+ # The requirement of a device.
1272
+ # Corresponds to the JSON property `requirement`
1273
+ # @return [Google::Apis::DevicerunV1alpha::DeviceRequirement]
1274
+ attr_accessor :requirement
1275
+
1276
+ def initialize(**args)
1277
+ update!(**args)
1278
+ end
1279
+
1280
+ # Update properties of this object
1281
+ def update!(**args)
1282
+ @actions = args[:actions] if args.key?(:actions)
1283
+ @requirement = args[:requirement] if args.key?(:requirement)
1284
+ end
1285
+ end
1286
+
1287
+ # The requirement of a device.
1288
+ class DeviceRequirement
1289
+ include Google::Apis::Core::Hashable
1290
+
1291
+ # The device ID of a device in the catalog. The device ID is the last part of a
1292
+ # device's resource name.
1293
+ # Corresponds to the JSON property `deviceId`
1294
+ # @return [String]
1295
+ attr_accessor :device_id
1296
+
1297
+ def initialize(**args)
1298
+ update!(**args)
1299
+ end
1300
+
1301
+ # Update properties of this object
1302
+ def update!(**args)
1303
+ @device_id = args[:device_id] if args.key?(:device_id)
1304
+ end
1305
+ end
1306
+
1307
+ # A generic empty message that you can re-use to avoid defining duplicated empty
1308
+ # messages in your APIs. A typical example is to use it as the request or the
1309
+ # response type of an API method. For instance: service Foo ` rpc Bar(google.
1310
+ # protobuf.Empty) returns (google.protobuf.Empty); `
1311
+ class Empty
1312
+ include Google::Apis::Core::Hashable
1313
+
1314
+ def initialize(**args)
1315
+ update!(**args)
1316
+ end
1317
+
1318
+ # Update properties of this object
1319
+ def update!(**args)
1320
+ end
1321
+ end
1322
+
1323
+ # The runtime information and result report of a single on-device execution
1324
+ # attempt.
1325
+ class ExecutionReport
1326
+ include Google::Apis::Core::Hashable
1327
+
1328
+ # Output only. The display_name set by users in the ExecutionConfig.
1329
+ # Corresponds to the JSON property `displayName`
1330
+ # @return [String]
1331
+ attr_accessor :display_name
1332
+
1333
+ # Output only. The end time of the execution.
1334
+ # Corresponds to the JSON property `endTime`
1335
+ # @return [String]
1336
+ attr_accessor :end_time
1337
+
1338
+ # Output only. The unique identifier of the execution.
1339
+ # Corresponds to the JSON property `id`
1340
+ # @return [String]
1341
+ attr_accessor :id
1342
+
1343
+ # Output only. The output files of the execution.
1344
+ # Corresponds to the JSON property `outputFiles`
1345
+ # @return [Array<Google::Apis::DevicerunV1alpha::OutputFile>]
1346
+ attr_accessor :output_files
1347
+
1348
+ # The result of a session/job/execution.
1349
+ # Corresponds to the JSON property `result`
1350
+ # @return [Google::Apis::DevicerunV1alpha::Result]
1351
+ attr_accessor :result
1352
+
1353
+ # Output only. The start time of the execution.
1354
+ # Corresponds to the JSON property `startTime`
1355
+ # @return [String]
1356
+ attr_accessor :start_time
1357
+
1358
+ # The status of a session/job/execution.
1359
+ # Corresponds to the JSON property `status`
1360
+ # @return [Google::Apis::DevicerunV1alpha::Status]
1361
+ attr_accessor :status
1362
+
1363
+ # Output only. Non-fatal warnings collected during the execution.
1364
+ # Corresponds to the JSON property `warnings`
1365
+ # @return [Array<Google::Apis::DevicerunV1alpha::Warning>]
1366
+ attr_accessor :warnings
1367
+
1368
+ def initialize(**args)
1369
+ update!(**args)
1370
+ end
1371
+
1372
+ # Update properties of this object
1373
+ def update!(**args)
1374
+ @display_name = args[:display_name] if args.key?(:display_name)
1375
+ @end_time = args[:end_time] if args.key?(:end_time)
1376
+ @id = args[:id] if args.key?(:id)
1377
+ @output_files = args[:output_files] if args.key?(:output_files)
1378
+ @result = args[:result] if args.key?(:result)
1379
+ @start_time = args[:start_time] if args.key?(:start_time)
1380
+ @status = args[:status] if args.key?(:status)
1381
+ @warnings = args[:warnings] if args.key?(:warnings)
1382
+ end
1383
+ end
1384
+
1385
+ # A path to a file or directory in Google Cloud Storage.
1386
+ class GcsPath
1387
+ include Google::Apis::Core::Hashable
1388
+
1389
+ # Required. The Google Cloud Storage path of the file or directory. Format: `gs:/
1390
+ # //`.
1391
+ # Corresponds to the JSON property `path`
1392
+ # @return [String]
1393
+ attr_accessor :path
1394
+
1395
+ def initialize(**args)
1396
+ update!(**args)
1397
+ end
1398
+
1399
+ # Update properties of this object
1400
+ def update!(**args)
1401
+ @path = args[:path] if args.key?(:path)
1402
+ end
1403
+ end
1404
+
1405
+ # The request message for Operations.CancelOperation.
1406
+ class GoogleLongrunningCancelOperationRequest
1407
+ include Google::Apis::Core::Hashable
1408
+
1409
+ def initialize(**args)
1410
+ update!(**args)
1411
+ end
1412
+
1413
+ # Update properties of this object
1414
+ def update!(**args)
1415
+ end
1416
+ end
1417
+
1418
+ # The response message for Operations.ListOperations.
1419
+ class GoogleLongrunningListOperationsResponse
1420
+ include Google::Apis::Core::Hashable
1421
+
1422
+ # The standard List next-page token.
1423
+ # Corresponds to the JSON property `nextPageToken`
1424
+ # @return [String]
1425
+ attr_accessor :next_page_token
1426
+
1427
+ # A list of operations that matches the specified filter in the request.
1428
+ # Corresponds to the JSON property `operations`
1429
+ # @return [Array<Google::Apis::DevicerunV1alpha::GoogleLongrunningOperation>]
1430
+ attr_accessor :operations
1431
+
1432
+ # Unordered list. Unreachable resources. Populated when the request sets `
1433
+ # ListOperationsRequest.return_partial_success` and reads across collections.
1434
+ # For example, when attempting to list all resources across all supported
1435
+ # locations.
1436
+ # Corresponds to the JSON property `unreachable`
1437
+ # @return [Array<String>]
1438
+ attr_accessor :unreachable
1439
+
1440
+ def initialize(**args)
1441
+ update!(**args)
1442
+ end
1443
+
1444
+ # Update properties of this object
1445
+ def update!(**args)
1446
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
1447
+ @operations = args[:operations] if args.key?(:operations)
1448
+ @unreachable = args[:unreachable] if args.key?(:unreachable)
1449
+ end
1450
+ end
1451
+
1452
+ # This resource represents a long-running operation that is the result of a
1453
+ # network API call.
1454
+ class GoogleLongrunningOperation
1455
+ include Google::Apis::Core::Hashable
1456
+
1457
+ # If the value is `false`, it means the operation is still in progress. If `true`
1458
+ # , the operation is completed, and either `error` or `response` is available.
1459
+ # Corresponds to the JSON property `done`
1460
+ # @return [Boolean]
1461
+ attr_accessor :done
1462
+ alias_method :done?, :done
1463
+
1464
+ # The `Status` type defines a logical error model that is suitable for different
1465
+ # programming environments, including REST APIs and RPC APIs. It is used by [
1466
+ # gRPC](https://github.com/grpc). Each `Status` message contains three pieces of
1467
+ # data: error code, error message, and error details. You can find out more
1468
+ # about this error model and how to work with it in the [API Design Guide](https:
1469
+ # //cloud.google.com/apis/design/errors).
1470
+ # Corresponds to the JSON property `error`
1471
+ # @return [Google::Apis::DevicerunV1alpha::GoogleRpcStatus]
1472
+ attr_accessor :error
1473
+
1474
+ # Service-specific metadata associated with the operation. It typically contains
1475
+ # progress information and common metadata such as create time. Some services
1476
+ # might not provide such metadata. Any method that returns a long-running
1477
+ # operation should document the metadata type, if any.
1478
+ # Corresponds to the JSON property `metadata`
1479
+ # @return [Hash<String,Object>]
1480
+ attr_accessor :metadata
1481
+
1482
+ # The server-assigned name, which is only unique within the same service that
1483
+ # originally returns it. If you use the default HTTP mapping, the `name` should
1484
+ # be a resource name ending with `operations/`unique_id``.
1485
+ # Corresponds to the JSON property `name`
1486
+ # @return [String]
1487
+ attr_accessor :name
1488
+
1489
+ # The normal, successful response of the operation. If the original method
1490
+ # returns no data on success, such as `Delete`, the response is `google.protobuf.
1491
+ # Empty`. If the original method is standard `Get`/`Create`/`Update`, the
1492
+ # response should be the resource. For other methods, the response should have
1493
+ # the type `XxxResponse`, where `Xxx` is the original method name. For example,
1494
+ # if the original method name is `TakeSnapshot()`, the inferred response type is
1495
+ # `TakeSnapshotResponse`.
1496
+ # Corresponds to the JSON property `response`
1497
+ # @return [Hash<String,Object>]
1498
+ attr_accessor :response
1499
+
1500
+ def initialize(**args)
1501
+ update!(**args)
1502
+ end
1503
+
1504
+ # Update properties of this object
1505
+ def update!(**args)
1506
+ @done = args[:done] if args.key?(:done)
1507
+ @error = args[:error] if args.key?(:error)
1508
+ @metadata = args[:metadata] if args.key?(:metadata)
1509
+ @name = args[:name] if args.key?(:name)
1510
+ @response = args[:response] if args.key?(:response)
1511
+ end
1512
+ end
1513
+
1514
+ # The `Status` type defines a logical error model that is suitable for different
1515
+ # programming environments, including REST APIs and RPC APIs. It is used by [
1516
+ # gRPC](https://github.com/grpc). Each `Status` message contains three pieces of
1517
+ # data: error code, error message, and error details. You can find out more
1518
+ # about this error model and how to work with it in the [API Design Guide](https:
1519
+ # //cloud.google.com/apis/design/errors).
1520
+ class GoogleRpcStatus
1521
+ include Google::Apis::Core::Hashable
1522
+
1523
+ # The status code, which should be an enum value of google.rpc.Code.
1524
+ # Corresponds to the JSON property `code`
1525
+ # @return [Fixnum]
1526
+ attr_accessor :code
1527
+
1528
+ # A list of messages that carry the error details. There is a common set of
1529
+ # message types for APIs to use.
1530
+ # Corresponds to the JSON property `details`
1531
+ # @return [Array<Hash<String,Object>>]
1532
+ attr_accessor :details
1533
+
1534
+ # A developer-facing error message, which should be in English. Any user-facing
1535
+ # error message should be localized and sent in the google.rpc.Status.details
1536
+ # field, or localized by the client.
1537
+ # Corresponds to the JSON property `message`
1538
+ # @return [String]
1539
+ attr_accessor :message
1540
+
1541
+ def initialize(**args)
1542
+ update!(**args)
1543
+ end
1544
+
1545
+ # Update properties of this object
1546
+ def update!(**args)
1547
+ @code = args[:code] if args.key?(:code)
1548
+ @details = args[:details] if args.key?(:details)
1549
+ @message = args[:message] if args.key?(:message)
1550
+ end
1551
+ end
1552
+
1553
+ # Input file.
1554
+ class InputFile
1555
+ include Google::Apis::Core::Hashable
1556
+
1557
+ # A path to a file or directory in Google Cloud Storage.
1558
+ # Corresponds to the JSON property `gcsInputFile`
1559
+ # @return [Google::Apis::DevicerunV1alpha::GcsPath]
1560
+ attr_accessor :gcs_input_file
1561
+
1562
+ def initialize(**args)
1563
+ update!(**args)
1564
+ end
1565
+
1566
+ # Update properties of this object
1567
+ def update!(**args)
1568
+ @gcs_input_file = args[:gcs_input_file] if args.key?(:gcs_input_file)
1569
+ end
1570
+ end
1571
+
1572
+ # Collects the exported iOS App Privacy Report during the test run. When enabled,
1573
+ # the iOS device records application activity (such as network access, domain
1574
+ # requests, and sensitive resource access like photos, camera, or location) and
1575
+ # exports Apple's official App Privacy Report. The report will be written to a
1576
+ # file named `AppActivityReport.ndjson` in the execution output directory.
1577
+ class IosAppPrivacyReportDeviceAction
1578
+ include Google::Apis::Core::Hashable
1579
+
1580
+ def initialize(**args)
1581
+ update!(**args)
1582
+ end
1583
+
1584
+ # Update properties of this object
1585
+ def update!(**args)
1586
+ end
1587
+ end
1588
+
1589
+ # Installs iOS packages on the device.
1590
+ class IosInstallPackagesDeviceAction
1591
+ include Google::Apis::Core::Hashable
1592
+
1593
+ # Required. Additional iOS packages (IPAs) to install on the device. Limits: - A
1594
+ # maximum of 20 IPAs are allowed.
1595
+ # Corresponds to the JSON property `ipas`
1596
+ # @return [Array<Google::Apis::DevicerunV1alpha::InputFile>]
1597
+ attr_accessor :ipas
1598
+
1599
+ def initialize(**args)
1600
+ update!(**args)
1601
+ end
1602
+
1603
+ # Update properties of this object
1604
+ def update!(**args)
1605
+ @ipas = args[:ipas] if args.key?(:ipas)
1606
+ end
1607
+ end
1608
+
1609
+ # Pulls directories and files from the iOS device sandbox at the end of the run.
1610
+ class IosPullFilesDeviceAction
1611
+ include Google::Apis::Core::Hashable
1612
+
1613
+ # Required. Absolute directory or file paths to pull from the device. Limits: -
1614
+ # A maximum of 10 paths are allowed.
1615
+ # Corresponds to the JSON property `paths`
1616
+ # @return [Array<Google::Apis::DevicerunV1alpha::IosPullFilesDeviceActionPathConfig>]
1617
+ attr_accessor :paths
1618
+
1619
+ def initialize(**args)
1620
+ update!(**args)
1621
+ end
1622
+
1623
+ # Update properties of this object
1624
+ def update!(**args)
1625
+ @paths = args[:paths] if args.key?(:paths)
1626
+ end
1627
+ end
1628
+
1629
+ # The configuration of pulling a file or directory from the iOS device.
1630
+ class IosPullFilesDeviceActionPathConfig
1631
+ include Google::Apis::Core::Hashable
1632
+
1633
+ # Required. The bundle ID of the application sandbox.
1634
+ # Corresponds to the JSON property `bundleId`
1635
+ # @return [String]
1636
+ attr_accessor :bundle_id
1637
+
1638
+ # Required. The device path relative to the app sandbox, e.g. "/Documents/output/
1639
+ # ".
1640
+ # Corresponds to the JSON property `devicePath`
1641
+ # @return [String]
1642
+ attr_accessor :device_path
1643
+
1644
+ def initialize(**args)
1645
+ update!(**args)
1646
+ end
1647
+
1648
+ # Update properties of this object
1649
+ def update!(**args)
1650
+ @bundle_id = args[:bundle_id] if args.key?(:bundle_id)
1651
+ @device_path = args[:device_path] if args.key?(:device_path)
1652
+ end
1653
+ end
1654
+
1655
+ # Pushes files to the iOS device sandbox at the beginning of the run.
1656
+ class IosPushFilesDeviceAction
1657
+ include Google::Apis::Core::Hashable
1658
+
1659
+ # Required. Configs of pushing files to the device. Limits: - A maximum of 50
1660
+ # files are allowed.
1661
+ # Corresponds to the JSON property `fileConfigs`
1662
+ # @return [Array<Google::Apis::DevicerunV1alpha::IosPushFilesDeviceActionFileConfig>]
1663
+ attr_accessor :file_configs
1664
+
1665
+ def initialize(**args)
1666
+ update!(**args)
1667
+ end
1668
+
1669
+ # Update properties of this object
1670
+ def update!(**args)
1671
+ @file_configs = args[:file_configs] if args.key?(:file_configs)
1672
+ end
1673
+ end
1674
+
1675
+ # The configuration of pushing a file to the iOS device.
1676
+ class IosPushFilesDeviceActionFileConfig
1677
+ include Google::Apis::Core::Hashable
1678
+
1679
+ # Required. The bundle ID of the application sandbox.
1680
+ # Corresponds to the JSON property `bundleId`
1681
+ # @return [String]
1682
+ attr_accessor :bundle_id
1683
+
1684
+ # Required. The destination path relative to the app sandbox, e.g. "/Documents/
1685
+ # file.txt".
1686
+ # Corresponds to the JSON property `destinationPath`
1687
+ # @return [String]
1688
+ attr_accessor :destination_path
1689
+
1690
+ # Input file.
1691
+ # Corresponds to the JSON property `sourceFile`
1692
+ # @return [Google::Apis::DevicerunV1alpha::InputFile]
1693
+ attr_accessor :source_file
1694
+
1695
+ def initialize(**args)
1696
+ update!(**args)
1697
+ end
1698
+
1699
+ # Update properties of this object
1700
+ def update!(**args)
1701
+ @bundle_id = args[:bundle_id] if args.key?(:bundle_id)
1702
+ @destination_path = args[:destination_path] if args.key?(:destination_path)
1703
+ @source_file = args[:source_file] if args.key?(:source_file)
1704
+ end
1705
+ end
1706
+
1707
+ # Records a video of the iOS device screen during the run. The video will be
1708
+ # written to a file named `video.mp4` in the execution output directory.
1709
+ class IosRecordVideoDeviceAction
1710
+ include Google::Apis::Core::Hashable
1711
+
1712
+ # Optional. Whether to discard the video if the test passes. If not specified,
1713
+ # the default is false (always keep the video).
1714
+ # Corresponds to the JSON property `discardOnPass`
1715
+ # @return [Boolean]
1716
+ attr_accessor :discard_on_pass
1717
+ alias_method :discard_on_pass?, :discard_on_pass
1718
+
1719
+ def initialize(**args)
1720
+ update!(**args)
1721
+ end
1722
+
1723
+ # Update properties of this object
1724
+ def update!(**args)
1725
+ @discard_on_pass = args[:discard_on_pass] if args.key?(:discard_on_pass)
1726
+ end
1727
+ end
1728
+
1729
+ # Switches the locale (language and region) of the iOS application.
1730
+ class IosSwitchLocaleDeviceAction
1731
+ include Google::Apis::Core::Hashable
1732
+
1733
+ # Required. The locale (language and region) to switch the app to. The format is
1734
+ # `language-region` or `language`, e.g. "en-US", "zh-CN", "ja", etc.
1735
+ # Corresponds to the JSON property `localeCode`
1736
+ # @return [String]
1737
+ attr_accessor :locale_code
1738
+
1739
+ def initialize(**args)
1740
+ update!(**args)
1741
+ end
1742
+
1743
+ # Update properties of this object
1744
+ def update!(**args)
1745
+ @locale_code = args[:locale_code] if args.key?(:locale_code)
1746
+ end
1747
+ end
1748
+
1749
+ # The configuration of an iOS XCTest.
1750
+ class IosXcTest
1751
+ include Google::Apis::Core::Hashable
1752
+
1753
+ # Input file.
1754
+ # Corresponds to the JSON property `testsZip`
1755
+ # @return [Google::Apis::DevicerunV1alpha::InputFile]
1756
+ attr_accessor :tests_zip
1757
+
1758
+ # Optional. The timeout of the test. Default value: 5 min. Range: [1 min, 3
1759
+ # hours].
1760
+ # Corresponds to the JSON property `xcTestTimeout`
1761
+ # @return [String]
1762
+ attr_accessor :xc_test_timeout
1763
+
1764
+ # Optional. The Xcode version that should be used for the test. If not set, a
1765
+ # system-default Xcode version is used. The available Xcode versions can be
1766
+ # retrieved from the catalog service.
1767
+ # Corresponds to the JSON property `xcodeVersion`
1768
+ # @return [String]
1769
+ attr_accessor :xcode_version
1770
+
1771
+ # Input file.
1772
+ # Corresponds to the JSON property `xctestrun`
1773
+ # @return [Google::Apis::DevicerunV1alpha::InputFile]
1774
+ attr_accessor :xctestrun
1775
+
1776
+ def initialize(**args)
1777
+ update!(**args)
1778
+ end
1779
+
1780
+ # Update properties of this object
1781
+ def update!(**args)
1782
+ @tests_zip = args[:tests_zip] if args.key?(:tests_zip)
1783
+ @xc_test_timeout = args[:xc_test_timeout] if args.key?(:xc_test_timeout)
1784
+ @xcode_version = args[:xcode_version] if args.key?(:xcode_version)
1785
+ @xctestrun = args[:xctestrun] if args.key?(:xctestrun)
1786
+ end
1787
+ end
1788
+
1789
+ # Describes the summary of an issue (error or warning) with structured details.
1790
+ class IssueSummary
1791
+ include Google::Apis::Core::Hashable
1792
+
1793
+ # Output only. Human-readable explanation of the issue in English.
1794
+ # Corresponds to the JSON property `message`
1795
+ # @return [String]
1796
+ attr_accessor :message
1797
+
1798
+ # Output only. The reason of the issue. This is a constant value that identifies
1799
+ # the proximate cause of the issue. This should be at most 63 characters and
1800
+ # match a regular expression of `A-Z*[A-Z0-9]`, which represents
1801
+ # UPPER_SNAKE_CASE.
1802
+ # Corresponds to the JSON property `reason`
1803
+ # @return [String]
1804
+ attr_accessor :reason
1805
+
1806
+ # Output only. The issue classification based on responsibility.
1807
+ # Corresponds to the JSON property `type`
1808
+ # @return [String]
1809
+ attr_accessor :type
1810
+
1811
+ def initialize(**args)
1812
+ update!(**args)
1813
+ end
1814
+
1815
+ # Update properties of this object
1816
+ def update!(**args)
1817
+ @message = args[:message] if args.key?(:message)
1818
+ @reason = args[:reason] if args.key?(:reason)
1819
+ @type = args[:type] if args.key?(:type)
1820
+ end
1821
+ end
1822
+
1823
+ # The action to be performed in a job.
1824
+ class JobAction
1825
+ include Google::Apis::Core::Hashable
1826
+
1827
+ # The configuration of an Android instrumentation test. See https://developer.
1828
+ # android.com/training/testing/instrumented-tests for more information on
1829
+ # Android instrumentation tests.
1830
+ # Corresponds to the JSON property `androidInstrumentationTest`
1831
+ # @return [Google::Apis::DevicerunV1alpha::AndroidInstrumentationTest]
1832
+ attr_accessor :android_instrumentation_test
1833
+
1834
+ # The configuration of an Android native binary execution.
1835
+ # Corresponds to the JSON property `androidNativeBinary`
1836
+ # @return [Google::Apis::DevicerunV1alpha::AndroidNativeBinary]
1837
+ attr_accessor :android_native_binary
1838
+
1839
+ # The configuration of an iOS XCTest.
1840
+ # Corresponds to the JSON property `iosXcTest`
1841
+ # @return [Google::Apis::DevicerunV1alpha::IosXcTest]
1842
+ attr_accessor :ios_xc_test
1843
+
1844
+ def initialize(**args)
1845
+ update!(**args)
1846
+ end
1847
+
1848
+ # Update properties of this object
1849
+ def update!(**args)
1850
+ @android_instrumentation_test = args[:android_instrumentation_test] if args.key?(:android_instrumentation_test)
1851
+ @android_native_binary = args[:android_native_binary] if args.key?(:android_native_binary)
1852
+ @ios_xc_test = args[:ios_xc_test] if args.key?(:ios_xc_test)
1853
+ end
1854
+ end
1855
+
1856
+ # The configuration of a job.
1857
+ class JobConfig
1858
+ include Google::Apis::Core::Hashable
1859
+
1860
+ # The action to be performed in a job.
1861
+ # Corresponds to the JSON property `action`
1862
+ # @return [Google::Apis::DevicerunV1alpha::JobAction]
1863
+ attr_accessor :action
1864
+
1865
+ # Allocation config.
1866
+ # Corresponds to the JSON property `allocationConfig`
1867
+ # @return [Google::Apis::DevicerunV1alpha::AllocationConfig]
1868
+ attr_accessor :allocation_config
1869
+
1870
+ # Optional. User-settable, human-readable name for the job. If set, it must be
1871
+ # unique within the session. If not set, the display name will default to `job-`,
1872
+ # where `` is the 0-based index of the job in the session formatted as three
1873
+ # digits (e.g., job-000, job-001, ...). Maximum size is 63 bytes when encoded as
1874
+ # UTF-8. If set, must match regex: `^A-Za-z0-9*$`.
1875
+ # Corresponds to the JSON property `displayName`
1876
+ # @return [String]
1877
+ attr_accessor :display_name
1878
+
1879
+ # Optional. User-defined metadata for tracking or categorization. These labels
1880
+ # do not affect job execution and are surfaced in the JobReport. Limits: -
1881
+ # Maximum number of entries: 16. - Maximum key size: 32 bytes (UTF-8). - Maximum
1882
+ # value size: 1024 bytes (UTF-8).
1883
+ # Corresponds to the JSON property `labels`
1884
+ # @return [Hash<String,String>]
1885
+ attr_accessor :labels
1886
+
1887
+ # Job settings to control the job execution.
1888
+ # Corresponds to the JSON property `settings`
1889
+ # @return [Google::Apis::DevicerunV1alpha::JobSettings]
1890
+ attr_accessor :settings
1891
+
1892
+ def initialize(**args)
1893
+ update!(**args)
1894
+ end
1895
+
1896
+ # Update properties of this object
1897
+ def update!(**args)
1898
+ @action = args[:action] if args.key?(:action)
1899
+ @allocation_config = args[:allocation_config] if args.key?(:allocation_config)
1900
+ @display_name = args[:display_name] if args.key?(:display_name)
1901
+ @labels = args[:labels] if args.key?(:labels)
1902
+ @settings = args[:settings] if args.key?(:settings)
1903
+ end
1904
+ end
1905
+
1906
+ # The runtime information and result report of a job.
1907
+ class JobReport
1908
+ include Google::Apis::Core::Hashable
1909
+
1910
+ # Output only. The display_name set by users in the JobConfig.
1911
+ # Corresponds to the JSON property `displayName`
1912
+ # @return [String]
1913
+ attr_accessor :display_name
1914
+
1915
+ # Output only. The end time of the job.
1916
+ # Corresponds to the JSON property `endTime`
1917
+ # @return [String]
1918
+ attr_accessor :end_time
1919
+
1920
+ # Output only. Reports of the execution attempts of the job.
1921
+ # Corresponds to the JSON property `executionReports`
1922
+ # @return [Array<Google::Apis::DevicerunV1alpha::ExecutionReport>]
1923
+ attr_accessor :execution_reports
1924
+
1925
+ # Output only. The unique identifier of the job.
1926
+ # Corresponds to the JSON property `id`
1927
+ # @return [String]
1928
+ attr_accessor :id
1929
+
1930
+ # Output only. The original labels provided by the user during job creation.
1931
+ # Corresponds to the JSON property `labels`
1932
+ # @return [Hash<String,String>]
1933
+ attr_accessor :labels
1934
+
1935
+ # Output only. The output files of the job.
1936
+ # Corresponds to the JSON property `outputFiles`
1937
+ # @return [Array<Google::Apis::DevicerunV1alpha::OutputFile>]
1938
+ attr_accessor :output_files
1939
+
1940
+ # The result of a session/job/execution.
1941
+ # Corresponds to the JSON property `result`
1942
+ # @return [Google::Apis::DevicerunV1alpha::Result]
1943
+ attr_accessor :result
1944
+
1945
+ # Output only. The start time of the job.
1946
+ # Corresponds to the JSON property `startTime`
1947
+ # @return [String]
1948
+ attr_accessor :start_time
1949
+
1950
+ # The status of a session/job/execution.
1951
+ # Corresponds to the JSON property `status`
1952
+ # @return [Google::Apis::DevicerunV1alpha::Status]
1953
+ attr_accessor :status
1954
+
1955
+ # Output only. Non-fatal warnings collected during the job.
1956
+ # Corresponds to the JSON property `warnings`
1957
+ # @return [Array<Google::Apis::DevicerunV1alpha::Warning>]
1958
+ attr_accessor :warnings
1959
+
1960
+ def initialize(**args)
1961
+ update!(**args)
1962
+ end
1963
+
1964
+ # Update properties of this object
1965
+ def update!(**args)
1966
+ @display_name = args[:display_name] if args.key?(:display_name)
1967
+ @end_time = args[:end_time] if args.key?(:end_time)
1968
+ @execution_reports = args[:execution_reports] if args.key?(:execution_reports)
1969
+ @id = args[:id] if args.key?(:id)
1970
+ @labels = args[:labels] if args.key?(:labels)
1971
+ @output_files = args[:output_files] if args.key?(:output_files)
1972
+ @result = args[:result] if args.key?(:result)
1973
+ @start_time = args[:start_time] if args.key?(:start_time)
1974
+ @status = args[:status] if args.key?(:status)
1975
+ @warnings = args[:warnings] if args.key?(:warnings)
1976
+ end
1977
+ end
1978
+
1979
+ # Job settings to control the job execution.
1980
+ class JobSettings
1981
+ include Google::Apis::Core::Hashable
1982
+
1983
+ # Retry settings.
1984
+ # Corresponds to the JSON property `retrySettings`
1985
+ # @return [Google::Apis::DevicerunV1alpha::RetrySettings]
1986
+ attr_accessor :retry_settings
1987
+
1988
+ def initialize(**args)
1989
+ update!(**args)
1990
+ end
1991
+
1992
+ # Update properties of this object
1993
+ def update!(**args)
1994
+ @retry_settings = args[:retry_settings] if args.key?(:retry_settings)
1995
+ end
1996
+ end
1997
+
1998
+ # An object that represents a latitude/longitude pair. This is expressed as a
1999
+ # pair of doubles to represent degrees latitude and degrees longitude. Unless
2000
+ # specified otherwise, this object must conform to the WGS84 standard. Values
2001
+ # must be within normalized ranges.
2002
+ class LatLng
2003
+ include Google::Apis::Core::Hashable
2004
+
2005
+ # The latitude in degrees. It must be in the range [-90.0, +90.0].
2006
+ # Corresponds to the JSON property `latitude`
2007
+ # @return [Float]
2008
+ attr_accessor :latitude
2009
+
2010
+ # The longitude in degrees. It must be in the range [-180.0, +180.0].
2011
+ # Corresponds to the JSON property `longitude`
2012
+ # @return [Float]
2013
+ attr_accessor :longitude
2014
+
2015
+ def initialize(**args)
2016
+ update!(**args)
2017
+ end
2018
+
2019
+ # Update properties of this object
2020
+ def update!(**args)
2021
+ @latitude = args[:latitude] if args.key?(:latitude)
2022
+ @longitude = args[:longitude] if args.key?(:longitude)
2023
+ end
2024
+ end
2025
+
2026
+ # The response message for Locations.ListLocations.
2027
+ class ListLocationsResponse
2028
+ include Google::Apis::Core::Hashable
2029
+
2030
+ # A list of locations that matches the specified filter in the request.
2031
+ # Corresponds to the JSON property `locations`
2032
+ # @return [Array<Google::Apis::DevicerunV1alpha::Location>]
2033
+ attr_accessor :locations
2034
+
2035
+ # The standard List next-page token.
2036
+ # Corresponds to the JSON property `nextPageToken`
2037
+ # @return [String]
2038
+ attr_accessor :next_page_token
2039
+
2040
+ def initialize(**args)
2041
+ update!(**args)
2042
+ end
2043
+
2044
+ # Update properties of this object
2045
+ def update!(**args)
2046
+ @locations = args[:locations] if args.key?(:locations)
2047
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
2048
+ end
2049
+ end
2050
+
2051
+ # Response including listed sessions.
2052
+ class ListSessionsResponse
2053
+ include Google::Apis::Core::Hashable
2054
+
2055
+ # Token to receive the next page of sessions. This will be absent if the end of
2056
+ # the response list has been reached.
2057
+ # Corresponds to the JSON property `nextPageToken`
2058
+ # @return [String]
2059
+ attr_accessor :next_page_token
2060
+
2061
+ # The list of sessions.
2062
+ # Corresponds to the JSON property `sessions`
2063
+ # @return [Array<Google::Apis::DevicerunV1alpha::Session>]
2064
+ attr_accessor :sessions
2065
+
2066
+ # Unordered list. Sessions that could not be reached.
2067
+ # Corresponds to the JSON property `unreachable`
2068
+ # @return [Array<String>]
2069
+ attr_accessor :unreachable
2070
+
2071
+ def initialize(**args)
2072
+ update!(**args)
2073
+ end
2074
+
2075
+ # Update properties of this object
2076
+ def update!(**args)
2077
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
2078
+ @sessions = args[:sessions] if args.key?(:sessions)
2079
+ @unreachable = args[:unreachable] if args.key?(:unreachable)
2080
+ end
2081
+ end
2082
+
2083
+ # A resource that represents a Google Cloud location.
2084
+ class Location
2085
+ include Google::Apis::Core::Hashable
2086
+
2087
+ # The friendly name for this location, typically a nearby city name. For example,
2088
+ # "Tokyo".
2089
+ # Corresponds to the JSON property `displayName`
2090
+ # @return [String]
2091
+ attr_accessor :display_name
2092
+
2093
+ # Cross-service attributes for the location. For example `"cloud.googleapis.com/
2094
+ # region": "us-east1"`
2095
+ # Corresponds to the JSON property `labels`
2096
+ # @return [Hash<String,String>]
2097
+ attr_accessor :labels
2098
+
2099
+ # The canonical id for this location. For example: `"us-east1"`.
2100
+ # Corresponds to the JSON property `locationId`
2101
+ # @return [String]
2102
+ attr_accessor :location_id
2103
+
2104
+ # Service-specific metadata. For example the available capacity at the given
2105
+ # location.
2106
+ # Corresponds to the JSON property `metadata`
2107
+ # @return [Hash<String,Object>]
2108
+ attr_accessor :metadata
2109
+
2110
+ # Resource name for the location, which may vary between implementations. For
2111
+ # example: `"projects/example-project/locations/us-east1"`
2112
+ # Corresponds to the JSON property `name`
2113
+ # @return [String]
2114
+ attr_accessor :name
2115
+
2116
+ def initialize(**args)
2117
+ update!(**args)
2118
+ end
2119
+
2120
+ # Update properties of this object
2121
+ def update!(**args)
2122
+ @display_name = args[:display_name] if args.key?(:display_name)
2123
+ @labels = args[:labels] if args.key?(:labels)
2124
+ @location_id = args[:location_id] if args.key?(:location_id)
2125
+ @metadata = args[:metadata] if args.key?(:metadata)
2126
+ @name = args[:name] if args.key?(:name)
2127
+ end
2128
+ end
2129
+
2130
+ # Represents the metadata of the long-running operation.
2131
+ class OperationMetadata
2132
+ include Google::Apis::Core::Hashable
2133
+
2134
+ # Output only. API version used to start the operation.
2135
+ # Corresponds to the JSON property `apiVersion`
2136
+ # @return [String]
2137
+ attr_accessor :api_version
2138
+
2139
+ # Output only. The time the operation was created.
2140
+ # Corresponds to the JSON property `createTime`
2141
+ # @return [String]
2142
+ attr_accessor :create_time
2143
+
2144
+ # Output only. The time the operation finished running.
2145
+ # Corresponds to the JSON property `endTime`
2146
+ # @return [String]
2147
+ attr_accessor :end_time
2148
+
2149
+ # Output only. Identifies whether the user has requested cancellation of the
2150
+ # operation. Operations that have been cancelled successfully have google.
2151
+ # longrunning.Operation.error value with a google.rpc.Status.code of `1`,
2152
+ # corresponding to `Code.CANCELLED`.
2153
+ # Corresponds to the JSON property `requestedCancellation`
2154
+ # @return [Boolean]
2155
+ attr_accessor :requested_cancellation
2156
+ alias_method :requested_cancellation?, :requested_cancellation
2157
+
2158
+ # Output only. Human-readable status of the operation, if any.
2159
+ # Corresponds to the JSON property `statusMessage`
2160
+ # @return [String]
2161
+ attr_accessor :status_message
2162
+
2163
+ # Output only. Server-defined resource path for the target of the operation.
2164
+ # Corresponds to the JSON property `target`
2165
+ # @return [String]
2166
+ attr_accessor :target
2167
+
2168
+ # Output only. Name of the verb executed by the operation.
2169
+ # Corresponds to the JSON property `verb`
2170
+ # @return [String]
2171
+ attr_accessor :verb
2172
+
2173
+ def initialize(**args)
2174
+ update!(**args)
2175
+ end
2176
+
2177
+ # Update properties of this object
2178
+ def update!(**args)
2179
+ @api_version = args[:api_version] if args.key?(:api_version)
2180
+ @create_time = args[:create_time] if args.key?(:create_time)
2181
+ @end_time = args[:end_time] if args.key?(:end_time)
2182
+ @requested_cancellation = args[:requested_cancellation] if args.key?(:requested_cancellation)
2183
+ @status_message = args[:status_message] if args.key?(:status_message)
2184
+ @target = args[:target] if args.key?(:target)
2185
+ @verb = args[:verb] if args.key?(:verb)
2186
+ end
2187
+ end
2188
+
2189
+ # Output file.
2190
+ class OutputFile
2191
+ include Google::Apis::Core::Hashable
2192
+
2193
+ # A path to a file or directory in Google Cloud Storage.
2194
+ # Corresponds to the JSON property `gcsOutputFile`
2195
+ # @return [Google::Apis::DevicerunV1alpha::GcsPath]
2196
+ attr_accessor :gcs_output_file
2197
+
2198
+ def initialize(**args)
2199
+ update!(**args)
2200
+ end
2201
+
2202
+ # Update properties of this object
2203
+ def update!(**args)
2204
+ @gcs_output_file = args[:gcs_output_file] if args.key?(:gcs_output_file)
2205
+ end
2206
+ end
2207
+
2208
+ # The result of a session/job/execution.
2209
+ class Result
2210
+ include Google::Apis::Core::Hashable
2211
+
2212
+ # Describes the cause of the non-passed result occurred during the execution.
2213
+ # Corresponds to the JSON property `cause`
2214
+ # @return [Google::Apis::DevicerunV1alpha::ResultCause]
2215
+ attr_accessor :cause
2216
+
2217
+ # Output only. The result type of the session/job/execution.
2218
+ # Corresponds to the JSON property `resultType`
2219
+ # @return [String]
2220
+ attr_accessor :result_type
2221
+
2222
+ def initialize(**args)
2223
+ update!(**args)
2224
+ end
2225
+
2226
+ # Update properties of this object
2227
+ def update!(**args)
2228
+ @cause = args[:cause] if args.key?(:cause)
2229
+ @result_type = args[:result_type] if args.key?(:result_type)
2230
+ end
2231
+ end
2232
+
2233
+ # Describes the cause of the non-passed result occurred during the execution.
2234
+ class ResultCause
2235
+ include Google::Apis::Core::Hashable
2236
+
2237
+ # Describes the summary of an issue (error or warning) with structured details.
2238
+ # Corresponds to the JSON property `summary`
2239
+ # @return [Google::Apis::DevicerunV1alpha::IssueSummary]
2240
+ attr_accessor :summary
2241
+
2242
+ def initialize(**args)
2243
+ update!(**args)
2244
+ end
2245
+
2246
+ # Update properties of this object
2247
+ def update!(**args)
2248
+ @summary = args[:summary] if args.key?(:summary)
2249
+ end
2250
+ end
2251
+
2252
+ # Retry settings.
2253
+ class RetrySettings
2254
+ include Google::Apis::Core::Hashable
2255
+
2256
+ # Default retry strategy. It will retry on test failures for up to
2257
+ # flaky_test_attempts (including the initial run). It also retries on infra
2258
+ # issues for up to 2 attempts (including the initial run). So in total, an
2259
+ # execution can run up to flaky_test_attempts * 2 times in the worst case.
2260
+ # Corresponds to the JSON property `flakyTestRetryStrategy`
2261
+ # @return [Google::Apis::DevicerunV1alpha::RetrySettingsFlakyTestRetryStrategy]
2262
+ attr_accessor :flaky_test_retry_strategy
2263
+
2264
+ def initialize(**args)
2265
+ update!(**args)
2266
+ end
2267
+
2268
+ # Update properties of this object
2269
+ def update!(**args)
2270
+ @flaky_test_retry_strategy = args[:flaky_test_retry_strategy] if args.key?(:flaky_test_retry_strategy)
2271
+ end
2272
+ end
2273
+
2274
+ # Default retry strategy. It will retry on test failures for up to
2275
+ # flaky_test_attempts (including the initial run). It also retries on infra
2276
+ # issues for up to 2 attempts (including the initial run). So in total, an
2277
+ # execution can run up to flaky_test_attempts * 2 times in the worst case.
2278
+ class RetrySettingsFlakyTestRetryStrategy
2279
+ include Google::Apis::Core::Hashable
2280
+
2281
+ # Required. The total attempts for flaky tests, including the initial run.
2282
+ # Default value: 1 (no retry). Range: [1, 5].
2283
+ # Corresponds to the JSON property `flakyTestAttempts`
2284
+ # @return [Fixnum]
2285
+ attr_accessor :flaky_test_attempts
2286
+
2287
+ # Optional. Whether to retry the test failures in parallel. By default, the test
2288
+ # is retried sequentially. If true, when the initial attempt fails, (
2289
+ # flaky_test_attempts - 1) attempts will be triggered at the same time to run in
2290
+ # parallel.
2291
+ # Corresponds to the JSON property `parallelRetry`
2292
+ # @return [Boolean]
2293
+ attr_accessor :parallel_retry
2294
+ alias_method :parallel_retry?, :parallel_retry
2295
+
2296
+ # Optional. The mode of test reduction for retry. If the test runner doesn't
2297
+ # support the specified test reduction mode, the request will be rejected with
2298
+ # an `INVALID_ARGUMENT` error.
2299
+ # Corresponds to the JSON property `testReductionMode`
2300
+ # @return [String]
2301
+ attr_accessor :test_reduction_mode
2302
+
2303
+ def initialize(**args)
2304
+ update!(**args)
2305
+ end
2306
+
2307
+ # Update properties of this object
2308
+ def update!(**args)
2309
+ @flaky_test_attempts = args[:flaky_test_attempts] if args.key?(:flaky_test_attempts)
2310
+ @parallel_retry = args[:parallel_retry] if args.key?(:parallel_retry)
2311
+ @test_reduction_mode = args[:test_reduction_mode] if args.key?(:test_reduction_mode)
2312
+ end
2313
+ end
2314
+
2315
+ # A session resource in the AutomationSession API. At a high level, `Session`
2316
+ # describes the configuration of one or multiple jobs, the state transitions it
2317
+ # goes through, and the results.
2318
+ class Session
2319
+ include Google::Apis::Core::Hashable
2320
+
2321
+ # Identifier. The resource name of the session. Format: `projects/`project`/
2322
+ # locations/`location`/sessions/`session``.
2323
+ # Corresponds to the JSON property `name`
2324
+ # @return [String]
2325
+ attr_accessor :name
2326
+
2327
+ # SessionConfig is used to create a session.
2328
+ # Corresponds to the JSON property `sessionConfig`
2329
+ # @return [Google::Apis::DevicerunV1alpha::SessionConfig]
2330
+ attr_accessor :session_config
2331
+
2332
+ # The runtime information and result report of a session.
2333
+ # Corresponds to the JSON property `sessionReport`
2334
+ # @return [Google::Apis::DevicerunV1alpha::SessionReport]
2335
+ attr_accessor :session_report
2336
+
2337
+ def initialize(**args)
2338
+ update!(**args)
2339
+ end
2340
+
2341
+ # Update properties of this object
2342
+ def update!(**args)
2343
+ @name = args[:name] if args.key?(:name)
2344
+ @session_config = args[:session_config] if args.key?(:session_config)
2345
+ @session_report = args[:session_report] if args.key?(:session_report)
2346
+ end
2347
+ end
2348
+
2349
+ # SessionConfig is used to create a session.
2350
+ class SessionConfig
2351
+ include Google::Apis::Core::Hashable
2352
+
2353
+ # Optional. User-settable, human-readable name for the session. Maximum size is
2354
+ # 63 bytes when encoded as UTF-8. If set, must match regex: `^A-Za-z0-9*$`.
2355
+ # Corresponds to the JSON property `displayName`
2356
+ # @return [String]
2357
+ attr_accessor :display_name
2358
+
2359
+ # Required. Configs of the jobs in the session.
2360
+ # Corresponds to the JSON property `jobConfigs`
2361
+ # @return [Array<Google::Apis::DevicerunV1alpha::JobConfig>]
2362
+ attr_accessor :job_configs
2363
+
2364
+ # Config to control session notification.
2365
+ # Corresponds to the JSON property `notificationConfig`
2366
+ # @return [Google::Apis::DevicerunV1alpha::SessionConfigSessionNotificationConfig]
2367
+ attr_accessor :notification_config
2368
+
2369
+ # Config to control session output file directory.
2370
+ # Corresponds to the JSON property `outputDirectoryConfig`
2371
+ # @return [Google::Apis::DevicerunV1alpha::SessionConfigSessionOutputFileDirectoryConfig]
2372
+ attr_accessor :output_directory_config
2373
+
2374
+ def initialize(**args)
2375
+ update!(**args)
2376
+ end
2377
+
2378
+ # Update properties of this object
2379
+ def update!(**args)
2380
+ @display_name = args[:display_name] if args.key?(:display_name)
2381
+ @job_configs = args[:job_configs] if args.key?(:job_configs)
2382
+ @notification_config = args[:notification_config] if args.key?(:notification_config)
2383
+ @output_directory_config = args[:output_directory_config] if args.key?(:output_directory_config)
2384
+ end
2385
+ end
2386
+
2387
+ # Config to control session notification.
2388
+ class SessionConfigSessionNotificationConfig
2389
+ include Google::Apis::Core::Hashable
2390
+
2391
+ # Optional. The Pub/Sub topics to which session events are published. Format: `
2392
+ # projects/`project`/topics/`topic``. See https://cloud.google.com/pubsub/docs/
2393
+ # admin#topic_and_subscription_name_restrictions
2394
+ # Corresponds to the JSON property `pubsubTopic`
2395
+ # @return [Array<String>]
2396
+ attr_accessor :pubsub_topic
2397
+
2398
+ def initialize(**args)
2399
+ update!(**args)
2400
+ end
2401
+
2402
+ # Update properties of this object
2403
+ def update!(**args)
2404
+ @pubsub_topic = args[:pubsub_topic] if args.key?(:pubsub_topic)
2405
+ end
2406
+ end
2407
+
2408
+ # Config to control session output file directory.
2409
+ class SessionConfigSessionOutputFileDirectoryConfig
2410
+ include Google::Apis::Core::Hashable
2411
+
2412
+ # Optional. Whether to write output files directly under the output directory
2413
+ # instead of nesting them under service-generated subdirectories. By default (`
2414
+ # false`), output files are stored under `////`. When `true`, the session ID
2415
+ # subdirectory is never appended, and the job display name subdirectory is
2416
+ # appended only when the session has more than one job. Output files are
2417
+ # therefore stored under: - `//` for a single-job session. - `///` for a multi-
2418
+ # job session. Set this to `true` when the output directory is already unique
2419
+ # per session (for example, when a CI system generates it), to avoid redundant
2420
+ # nesting.
2421
+ # Corresponds to the JSON property `flatDirectoryStructure`
2422
+ # @return [Boolean]
2423
+ attr_accessor :flat_directory_structure
2424
+ alias_method :flat_directory_structure?, :flat_directory_structure
2425
+
2426
+ # A path to a file or directory in Google Cloud Storage.
2427
+ # Corresponds to the JSON property `gcsOutputDirectory`
2428
+ # @return [Google::Apis::DevicerunV1alpha::GcsPath]
2429
+ attr_accessor :gcs_output_directory
2430
+
2431
+ def initialize(**args)
2432
+ update!(**args)
2433
+ end
2434
+
2435
+ # Update properties of this object
2436
+ def update!(**args)
2437
+ @flat_directory_structure = args[:flat_directory_structure] if args.key?(:flat_directory_structure)
2438
+ @gcs_output_directory = args[:gcs_output_directory] if args.key?(:gcs_output_directory)
2439
+ end
2440
+ end
2441
+
2442
+ # The runtime information and result report of a session.
2443
+ class SessionReport
2444
+ include Google::Apis::Core::Hashable
2445
+
2446
+ # Output only. The end time of the session.
2447
+ # Corresponds to the JSON property `endTime`
2448
+ # @return [String]
2449
+ attr_accessor :end_time
2450
+
2451
+ # Output only. The unique identifier of the session.
2452
+ # Corresponds to the JSON property `id`
2453
+ # @return [String]
2454
+ attr_accessor :id
2455
+
2456
+ # Output only. Reports of the jobs in the session.
2457
+ # Corresponds to the JSON property `jobReports`
2458
+ # @return [Array<Google::Apis::DevicerunV1alpha::JobReport>]
2459
+ attr_accessor :job_reports
2460
+
2461
+ # The result of a session/job/execution.
2462
+ # Corresponds to the JSON property `result`
2463
+ # @return [Google::Apis::DevicerunV1alpha::Result]
2464
+ attr_accessor :result
2465
+
2466
+ # Output only. The start time of the session.
2467
+ # Corresponds to the JSON property `startTime`
2468
+ # @return [String]
2469
+ attr_accessor :start_time
2470
+
2471
+ # The status of a session/job/execution.
2472
+ # Corresponds to the JSON property `status`
2473
+ # @return [Google::Apis::DevicerunV1alpha::Status]
2474
+ attr_accessor :status
2475
+
2476
+ def initialize(**args)
2477
+ update!(**args)
2478
+ end
2479
+
2480
+ # Update properties of this object
2481
+ def update!(**args)
2482
+ @end_time = args[:end_time] if args.key?(:end_time)
2483
+ @id = args[:id] if args.key?(:id)
2484
+ @job_reports = args[:job_reports] if args.key?(:job_reports)
2485
+ @result = args[:result] if args.key?(:result)
2486
+ @start_time = args[:start_time] if args.key?(:start_time)
2487
+ @status = args[:status] if args.key?(:status)
2488
+ end
2489
+ end
2490
+
2491
+ # The status of a session/job/execution.
2492
+ class Status
2493
+ include Google::Apis::Core::Hashable
2494
+
2495
+ # Output only. Human-readable, detailed descriptions of the session/job/
2496
+ # execution's progress. For example: "Provisioning a device", "Starting Test".
2497
+ # Each message should contain only one line of text. During the course of
2498
+ # execution new data may be appended to the end of progress_messages.
2499
+ # Corresponds to the JSON property `progressMessages`
2500
+ # @return [Array<String>]
2501
+ attr_accessor :progress_messages
2502
+
2503
+ # Output only. The status type of the session/job/execution.
2504
+ # Corresponds to the JSON property `statusType`
2505
+ # @return [String]
2506
+ attr_accessor :status_type
2507
+
2508
+ def initialize(**args)
2509
+ update!(**args)
2510
+ end
2511
+
2512
+ # Update properties of this object
2513
+ def update!(**args)
2514
+ @progress_messages = args[:progress_messages] if args.key?(:progress_messages)
2515
+ @status_type = args[:status_type] if args.key?(:status_type)
2516
+ end
2517
+ end
2518
+
2519
+ # Non-fatal operational anomaly, lint observation, or execution insight.
2520
+ class Warning
2521
+ include Google::Apis::Core::Hashable
2522
+
2523
+ # Describes the summary of an issue (error or warning) with structured details.
2524
+ # Corresponds to the JSON property `summary`
2525
+ # @return [Google::Apis::DevicerunV1alpha::IssueSummary]
2526
+ attr_accessor :summary
2527
+
2528
+ def initialize(**args)
2529
+ update!(**args)
2530
+ end
2531
+
2532
+ # Update properties of this object
2533
+ def update!(**args)
2534
+ @summary = args[:summary] if args.key?(:summary)
2535
+ end
2536
+ end
2537
+ end
2538
+ end
2539
+ end