57
57
import argparse
58
58
import json
59
59
import os
60
+ import random
60
61
import re
61
62
import subprocess
62
63
import sys
164
165
# Check currently supported models and versions with the following commands:
165
166
# gcloud firebase test android models list
166
167
# gcloud firebase test ios models list
168
+
169
+ # For each device type, one entry from the list will be used for each
170
+ # run. If there is only one device type listed, it will be chosen by
171
+ # default.
172
+ #
173
+ # Note: All entries in a given list must have the same type, (ftl or virtual).
167
174
TEST_DEVICES = {
168
- "android_target" : {"type" : "ftl" , "device" : "model=blueline,version=28" },
169
- "android_latest" : {"type" : "ftl" , "device" : "model=oriole,version=33" },
170
- "emulator_ftl_target" : {"type" : "ftl" , "device" : "model=Pixel2,version=28" },
171
- "emulator_ftl_latest" : {"type" : "ftl" , "device" : "model=Pixel2.arm,version=32" },
172
- "emulator_target" : {"type" : "virtual" , "image" :"system-images;android-30;google_apis;x86_64" },
173
- "emulator_latest" : {"type" : "virtual" , "image" :"system-images;android-32;google_apis;x86_64" },
174
- "emulator_32bit" : {"type" : "virtual" , "image" :"system-images;android-30;google_apis;x86" },
175
- "ios_min" : {"type" : "ftl" , "device" : "model=iphone8,version=14.7" },
176
- "ios_target" : {"type" : "ftl" , "device" : "model=iphone13pro,version=15.7" },
177
- "ios_latest" : {"type" : "ftl" , "device" : "model=iphone11pro,version=16.6" },
178
- "simulator_min" : {"type" : "virtual" , "name" :"iPhone 8" , "version" :"15.2" },
179
- "simulator_target" : {"type" : "virtual" , "name" :"iPhone 8" , "version" :"16.1" },
180
- "simulator_latest" : {"type" : "virtual" , "name" :"iPhone 11" , "version" :"16.1" },
181
- "tvos_simulator" : {"type" : "virtual" , "name" :"Apple TV" , "version" :"16.1" },
175
+ "android_target" : [
176
+ {"type" : "ftl" , "device" : "model=blueline,version=28" }, # Pixel 3
177
+ {"type" : "ftl" , "device" : "model=dreamlte,version=28" }, # Galaxy S8
178
+ {"type" : "ftl" , "device" : "model=gts3lltevzw,version=28" }, # Galaxy Tab S3
179
+ {"type" : "ftl" , "device" : "model=vivo_1906,version=28" }, # vivo 1906
180
+ {"type" : "ftl" , "device" : "model=SH-01L,version=28" }, # AQUOS sense2 SH-01L
181
+ {"type" : "ftl" , "device" : "model=PD1901,version=28" }, # VIVO 1901
182
+ ],
183
+ "android_latest" : [
184
+ {"type" : "ftl" , "device" : "model=oriole,version=33" }, # Pixel 6
185
+ {"type" : "ftl" , "device" : "model=panther,version=33" }, # Pixel 7
186
+ {"type" : "ftl" , "device" : "model=lynx,version=33" }, # Pixel 7a
187
+ {"type" : "ftl" , "device" : "model=cheetah,version=33" }, # Pixel 7 Pro
188
+ {"type" : "ftl" , "device" : "model=felix,version=33" }, # Pixel Fold
189
+ {"type" : "ftl" , "device" : "model=tangorpro,version=33" }, # Pixel Tablet
190
+ {"type" : "ftl" , "device" : "model=gts8uwifi,version=33" }, # Galaxy Tab S8 Ultra
191
+ {"type" : "ftl" , "device" : "model=b0q,version=33" }, # Galaxy S22 Ultra
192
+ {"type" : "ftl" , "device" : "model=b4q,version=33" }, # Galaxy Z Flip4
193
+ ],
194
+ "emulator_ftl_target" : [
195
+ {"type" : "ftl" , "device" : "model=Pixel2,version=28" },
196
+ {"type" : "ftl" , "device" : "model=Pixel2.arm,version=28" },
197
+ {"type" : "ftl" , "device" : "model=MediumPhone.arm,version=28" },
198
+ {"type" : "ftl" , "device" : "model=MediumTablet.arm,version=28" },
199
+ {"type" : "ftl" , "device" : "model=SmallPhone.arm,version=28" },
200
+ ],
201
+ "emulator_ftl_latest" : [
202
+ {"type" : "ftl" , "device" : "model=Pixel2.arm,version=32" },
203
+ {"type" : "ftl" , "device" : "model=MediumPhone.arm,version=32" },
204
+ {"type" : "ftl" , "device" : "model=MediumTablet.arm,version=32" },
205
+ {"type" : "ftl" , "device" : "model=SmallPhone.arm,version=32" },
206
+ ],
207
+ "emulator_target" : [ {"type" : "virtual" , "image" :"system-images;android-30;google_apis;x86_64" } ],
208
+ "emulator_latest" : [ {"type" : "virtual" , "image" :"system-images;android-32;google_apis;x86_64" } ],
209
+ "emulator_32bit" : [ {"type" : "virtual" , "image" :"system-images;android-30;google_apis;x86" } ],
210
+ "ios_min" : [
211
+ # Slightly different OS versions because of limited FTL selection.
212
+ {"type" : "ftl" , "device" : "model=iphone8,version=14.7" },
213
+ {"type" : "ftl" , "device" : "model=iphone11pro,version=14.7" },
214
+ {"type" : "ftl" , "device" : "model=iphone12pro,version=14.8" },
215
+ ],
216
+ "ios_target" : [
217
+ # Slightly different OS versions because of limited FTL selection.
218
+ {"type" : "ftl" , "device" : "model=iphone13pro,version=15.7" },
219
+ {"type" : "ftl" , "device" : "model=iphone8,version=15.7" },
220
+ {"type" : "ftl" , "device" : "model=ipadmini4,version=15.4" },
221
+ ],
222
+ "ios_latest" : [
223
+ {"type" : "ftl" , "device" : "model=iphone14pro,version=16.6" },
224
+ {"type" : "ftl" , "device" : "model=iphone11pro,version=16.6" },
225
+ {"type" : "ftl" , "device" : "model=iphone8,version=16.6" },
226
+ {"type" : "ftl" , "device" : "model=ipad10,version=16.6" },
227
+ ],
228
+ "simulator_min" : [ {"type" : "virtual" , "name" :"iPhone 8" , "version" :"15.2" } ],
229
+ "simulator_target" : [ {"type" : "virtual" , "name" :"iPhone 8" , "version" :"16.1" } ],
230
+ "simulator_latest" : [ {"type" : "virtual" , "name" :"iPhone 11" , "version" :"16.1" } ],
231
+ "tvos_simulator" : [ {"type" : "virtual" , "name" :"Apple TV" , "version" :"16.1" } ],
182
232
}
183
233
234
+ # Easy accesssor for getting a TEST_DEVICES entry. Note that once a device model
235
+ # is chosen on a specific machine, it will be maintained on that same machine.
236
+ def get_test_device (device_type ):
237
+ """Get a TEST_DEVICES entry for the given device type.
238
+
239
+ If there is more than one entry listed for the given device type, one will be
240
+ selected randomly. Once a selection is made for a given device_type, the same
241
+ selection will be returned on subsequent calls.
242
+
243
+ Args:
244
+ device_type(str): Device type (key for TEST_DEVICES dictionary)
245
+
246
+ Returns:
247
+ A single entry from TEST_DEVICES (dictionary), or None if the key is not
248
+ found.
249
+
250
+ """
251
+ device_entry = TEST_DEVICES .get (device_type )
252
+ if not isinstance (device_entry , list ):
253
+ # If None or just a dictionary (not in an array)
254
+ return device_entry
255
+ return random .choice (device_entry )
184
256
185
257
186
258
def get_value (workflow , test_matrix , parm_key , config_parms_only = False ):
@@ -208,7 +280,7 @@ def get_value(workflow, test_matrix, parm_key, config_parms_only=False):
208
280
if test_matrix and test_matrix in workflow_block ["matrix" ]:
209
281
if parm_key in workflow_block ["matrix" ][test_matrix ]:
210
282
return workflow_block ["matrix" ][test_matrix ][parm_key ]
211
-
283
+
212
284
return workflow_block [parm_type_key ][parm_key ]
213
285
214
286
else :
@@ -223,8 +295,8 @@ def filter_devices(devices, device_type):
223
295
""" Filter device by device_type
224
296
"""
225
297
device_type = device_type .replace ("real" ,"ftl" )
226
- filtered_value = filter (lambda device : TEST_DEVICES . get (device ).get ("type" ) in device_type , devices )
227
- return list (filtered_value )
298
+ filtered_value = filter (lambda device : get_test_device (device ).get ("type" ) in device_type , devices )
299
+ return list (filtered_value )
228
300
229
301
230
302
def print_value (value ):
@@ -343,7 +415,7 @@ def filter_platforms_on_apis(platforms, apis):
343
415
supported_apis = [api for api in apis if config .get_api (api ).tvos_target ]
344
416
if not supported_apis :
345
417
platforms .remove ("tvOS" )
346
-
418
+
347
419
return platforms
348
420
349
421
@@ -361,11 +433,14 @@ def main():
361
433
return
362
434
363
435
if args .get_device_type :
364
- print (TEST_DEVICES . get (args .parm_key ).get ("type" ))
365
- return
436
+ print (get_test_device (args .parm_key ).get ("type" ))
437
+ return
366
438
if args .get_ftl_device :
367
- print (TEST_DEVICES .get (args .parm_key ).get ("device" ))
368
- return
439
+ print (get_test_device (args .parm_key ).get ("device" ))
440
+ return
441
+ if args .get_ftl_device_list :
442
+ print (";" .join ([entry .get ("device" ) for entry in TEST_DEVICES .get (args .parm_key )]))
443
+ return
369
444
370
445
if args .expanded :
371
446
test_matrix = EXPANDED_KEY
@@ -395,8 +470,10 @@ def parse_cmdline_args():
395
470
parser .add_argument ('-o' , '--override' , help = 'Override existing value with provided value' )
396
471
parser .add_argument ('-get_device_type' , action = 'store_true' , help = 'Get the device type, used with -k $device' )
397
472
parser .add_argument ('-get_ftl_device' , action = 'store_true' , help = 'Get the ftl test device, used with -k $device' )
473
+ parser .add_argument ('-get_ftl_device_list' , action = 'store_true' ,
474
+ help = 'Get the FTL device list (semicolon-delimited) for the given -k $device' )
398
475
parser .add_argument ('-t' , '--device_type' , default = ['real' , 'virtual' ], help = 'Test on which type of mobile devices' )
399
- parser .add_argument ('--apis' , default = PARAMETERS ["integration_tests" ]["config" ]["apis" ],
476
+ parser .add_argument ('--apis' , default = PARAMETERS ["integration_tests" ]["config" ]["apis" ],
400
477
help = 'Exclude platform based on apis. Certain platform does not support all apis. e.g. tvOS does not support messaging' )
401
478
args = parser .parse_args ()
402
479
return args
0 commit comments