fastlane-plugin-automated_test_emulator_run_mik 1.6.14 → 1.6.15.pre.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5050c5e30d72adaa38cf2a5044c7afd6eb2996fa
4
- data.tar.gz: 5584d1891080d00ad34f183b157d16d1a9c1691e
3
+ metadata.gz: 3e9cccc5342dd54f5f33b38a34e940407f4c6643
4
+ data.tar.gz: c2fa469dea9201edcdbcfd5ae8b5293d9a78401d
5
5
  SHA512:
6
- metadata.gz: 186299efc6e91eedf5792be24439da6520fc78eda2ef30cbe96b65d6b787594baadaad5ca2c05c1915a1bd961253f3e1ca8bc30436931d83ee9626b2644656cb
7
- data.tar.gz: 140be0447c460bc0e2ad56f45ac37133f7f6daed2cd101d749a7f207b6e14955a5de609565bf80004819ec5c47fc7048b1eaaed66a716edd181caa4d7135a9e9
6
+ metadata.gz: 98d35b11901102cb2d38f003bebbcd7cbfcc91de2d242a14ed8ce1f511fac0934cc941ac2399e0ef882c270540d6213b5d780316874196291798d839c7da3394
7
+ data.tar.gz: d9edd0cb14b47dc96e9aa58fa4caecb4ac57cf4d58bf378d03fd7e231c25e5807720624d1a3c6cdbfe486cc81e297881e7d8810ea1121920c7858072c400ee96
@@ -17,7 +17,10 @@ module Fastlane
17
17
 
18
18
  # Create AVD_Controller class for each AVD_scheme
19
19
  for i in 0...avd_schemes.length
20
- avd_controller = Factory::AvdControllerFactory.get_avd_controller(params, avd_schemes[i])
20
+ port, f_port = generate_free_port()
21
+ UI.verbose(["Found port:", port].join(" "))
22
+
23
+ avd_controller = Factory::AvdControllerFactory.get_avd_controller(params, avd_schemes[i], port, f_port)
21
24
  avd_controllers << avd_controller
22
25
 
23
26
  if params[:verbose]
@@ -106,7 +109,7 @@ module Fastlane
106
109
  # Wait for AVDs finish booting
107
110
  UI.message("Waiting for AVDs to finish booting.".yellow)
108
111
  UI.message("Performing wait for ADB boot".yellow)
109
- adb_launch_complete = wait_for_emulator_boot_by_adb(adb_controller, avd_schemes, "#{params[:AVD_adb_launch_timeout]}")
112
+ adb_launch_complete = wait_for_emulator_boot_by_adb(adb_controller, avd_controllers, "#{params[:AVD_adb_launch_timeout]}")
110
113
 
111
114
  # Wait for AVD params finish booting
112
115
  if adb_launch_complete
@@ -154,8 +157,8 @@ module Fastlane
154
157
  if all_avd_launched
155
158
  UI.message("AVDs Booted!".green)
156
159
  if params[:logcat]
157
- for i in 0...avd_schemes.length
158
- device = ["emulator-", avd_schemes[i].launch_avd_port].join('')
160
+ for i in 0...avd_controllers.length
161
+ device = ["emulator-", avd_controllers[i].port].join('')
159
162
  cmd = [adb_controller.adb_path, '-s', device, 'logcat -c'].join(' ')
160
163
  Action.sh(cmd) unless devices.match(device).nil?
161
164
  end
@@ -171,7 +174,7 @@ module Fastlane
171
174
  end
172
175
 
173
176
  # Killing devices
174
- unless devices.match(["emulator-", avd_schemes[i].launch_avd_port].join("")).nil?
177
+ unless devices.match(["emulator-", avd_controllers[i].port].join("")).nil?
175
178
  Action.sh(avd_controllers[i].command_kill_device)
176
179
  Process.kill("INT", pids[i])
177
180
  Process.wait(pids[i])
@@ -193,7 +196,7 @@ module Fastlane
193
196
 
194
197
  unless gradle_task.nil?
195
198
  gradle = Helper::GradleHelper.new(gradle_path: Dir["./gradlew"].last)
196
- serial = avd_schemes.map { |x| "emulator-" + x.launch_avd_port }.join(",")
199
+ serial = avd_controllers.map { |x| "emulator-" + x.port.to_s }.join(",")
197
200
 
198
201
  UI.message("Using gradle task.".green)
199
202
  gradle.trigger(task: params[:gradle_task], flags: params[:gradle_flags], serial: serial)
@@ -202,7 +205,7 @@ module Fastlane
202
205
  # Clean up
203
206
  for i in 0...avd_schemes.length
204
207
  # Kill all emulators
205
- device = ["emulator-", avd_schemes[i].launch_avd_port].join("")
208
+ device = ["emulator-", avd_controllers[i].port].join("")
206
209
  unless devices.match(device).nil?
207
210
  if params[:logcat]
208
211
  file = [device, '.log'].join('')
@@ -237,7 +240,25 @@ module Fastlane
237
240
  end
238
241
  end
239
242
 
240
- def self.wait_for_emulator_boot_by_adb(adb_controller, avd_schemes, timeout)
243
+ def self.generate_free_port()
244
+ FileUtils.mkdir_p '/tmp/automated_test_emulator_run'
245
+ for p in (6000..7000).step(2)
246
+ f = File.open("/tmp/automated_test_emulator_run/#{p}", File::RDWR | File::CREAT)
247
+ if f.flock(File::LOCK_EX | File::LOCK_NB)
248
+ return p, f
249
+ end
250
+
251
+ f.close()
252
+ end
253
+
254
+ raise("Error finding free port")
255
+ end
256
+
257
+ def clean_up_port(port, p_file)
258
+ p_file.flock(File::LOCK_UN)
259
+ end
260
+
261
+ def self.wait_for_emulator_boot_by_adb(adb_controller, avd_controllers, timeout)
241
262
  timeoutInSeconds= timeout.to_i
242
263
  interval = 1000 * 10
243
264
  startTime = Time.now
@@ -245,8 +266,8 @@ module Fastlane
245
266
  launch_status_hash = Hash.new
246
267
  device_visibility_hash = Hash.new
247
268
 
248
- for i in 0...avd_schemes.length
249
- device_name = ["emulator-", avd_schemes[i].launch_avd_port].join("")
269
+ for i in 0...avd_controllers.length
270
+ device_name = ["emulator-", avd_controllers[i].port].join("")
250
271
  launch_status_hash.store(device_name, false)
251
272
  device_visibility_hash.store(device_name, false)
252
273
  end
@@ -350,7 +371,7 @@ module Fastlane
350
371
  device_boot_statuses.store(avd_schema.avd_name, avd_booted)
351
372
 
352
373
  # Plotting current wait results
353
- device_log = "Device 'emulator-" + avd_schemes[i].launch_avd_port.to_s + "' launch status:"
374
+ device_log = "Device 'emulator-" + avd_controllers[i].port.to_s + "' launch status:"
354
375
  UI.message(device_log.magenta)
355
376
  avd_param_boot_hash.each do |name, is_booted|
356
377
  device_log = "'" + name + "' - '" + avd_param_status_hash[name].strip + "' (launched: " + is_booted.to_s + ")"
@@ -421,19 +442,19 @@ module Fastlane
421
442
  FastlaneCore::ConfigItem.new(key: :AVD_recreate_new,
422
443
  env_name: "AVD_RECREATE_NEW",
423
444
  description: "Allow to decide if AVDs from AVD_setup.json (in case they already exist) should be deleted and created from scratch",
424
- default_value: true,
445
+ default_value: false,
425
446
  is_string: false,
426
447
  optional: true),
427
448
  FastlaneCore::ConfigItem.new(key: :AVD_clean_after,
428
449
  env_name: "AVD_CLEAN_AFTER",
429
450
  description: "Allow to decide if AVDs should be deleted from PC after test session ends",
430
- default_value: true,
451
+ default_value: false,
431
452
  is_string: false,
432
453
  optional: true),
433
454
  FastlaneCore::ConfigItem.new(key: :ADB_restart,
434
455
  env_name: "ADB_RESTART",
435
456
  description: "Allows to switch adb restarting on/off",
436
- default_value: true,
457
+ default_value: false,
437
458
  is_string: false,
438
459
  optional: true),
439
460
  FastlaneCore::ConfigItem.new(key: :AVD_wait_for_bootcomplete,
@@ -5,7 +5,7 @@ module Fastlane
5
5
 
6
6
  class AVD_Controller
7
7
  attr_accessor :command_install_package, :command_create_avd, :command_start_avd, :command_delete_avd, :command_apply_config_avd, :command_get_property, :command_kill_device,
8
- :output_file
8
+ :output_file, :p_file, :port
9
9
 
10
10
  def self.create_output_file(params)
11
11
  output_file = Tempfile.new('emulator_output', '#{params[:AVD_path]}')
@@ -14,7 +14,7 @@ module Fastlane
14
14
 
15
15
  class AvdControllerFactory
16
16
 
17
- def self.get_avd_controller(params, avd_scheme)
17
+ def self.get_avd_controller(params, avd_scheme, port, p_file)
18
18
  UI.message(["Preparing parameters and commands for emulator:", avd_scheme.avd_name].join(" ").yellow)
19
19
 
20
20
  # Get paths
@@ -55,7 +55,7 @@ module Fastlane
55
55
  sh_launch_emulator_binary = [path_sdk, "/emulator/", avd_scheme.launch_avd_launch_binary_name].join("")
56
56
  sh_launch_avd_name = ["-avd ", avd_scheme.avd_name].join("")
57
57
  sh_launch_avd_additional_options = avd_scheme.launch_avd_additional_options
58
- sh_launch_avd_port = ["-port", avd_scheme.launch_avd_port].join(" ")
58
+ sh_launch_avd_port = ["-port", port].join(" ")
59
59
 
60
60
  if avd_scheme.launch_avd_snapshot_filepath.eql? ""
61
61
  sh_launch_avd_snapshot = ""
@@ -68,12 +68,14 @@ module Fastlane
68
68
 
69
69
  # ADB related shell command parts
70
70
  sh_specific_device = "-s"
71
- sh_device_name_adb = ["emulator-", avd_scheme.launch_avd_port].join("")
71
+ sh_device_name_adb = ["emulator-", port].join("")
72
72
  sh_get_property = "shell getprop"
73
73
  sh_kill_device = "emu kill"
74
74
 
75
75
  # Assemble AVD controller
76
76
  avd_controller = AVD_Controller.new
77
+ avd_controller.p_file=p_file
78
+ avd_controller.port=port
77
79
  avd_controller.command_create_avd = [
78
80
  sh_create_answer_no,
79
81
  path_avdmanager_binary,
@@ -90,6 +92,7 @@ module Fastlane
90
92
 
91
93
  avd_controller.command_start_avd = [
92
94
  sh_launch_emulator_binary,
95
+ "-read-only",
93
96
  sh_launch_avd_port,
94
97
  sh_launch_avd_name,
95
98
  sh_launch_avd_snapshot,
@@ -3,7 +3,7 @@ module Fastlane
3
3
 
4
4
  class AVD_scheme
5
5
  attr_accessor :avd_name, :create_avd_package, :create_avd_device, :create_avd_tag, :create_avd_abi, :create_avd_hardware_config_filepath, :create_avd_additional_options,
6
- :launch_avd_port, :launch_avd_launch_binary_name, :launch_avd_additional_options, :launch_avd_snapshot_filepath
6
+ :launch_avd_launch_binary_name, :launch_avd_additional_options, :launch_avd_snapshot_filepath
7
7
  end
8
8
 
9
9
  class AvdSchemeProvider
@@ -34,7 +34,6 @@ module Fastlane
34
34
  avd_scheme.create_avd_abi = avd_hash['create_avd_abi']
35
35
  avd_scheme.create_avd_hardware_config_filepath = avd_hash['create_avd_hardware_config_filepath']
36
36
 
37
- avd_scheme.launch_avd_port = avd_hash['launch_avd_port']
38
37
  avd_scheme.launch_avd_launch_binary_name = avd_hash['launch_avd_launch_binary_name']
39
38
  avd_scheme.launch_avd_additional_options = avd_hash['launch_avd_additional_options']
40
39
  avd_scheme.launch_avd_snapshot_filepath = avd_hash['launch_avd_snapshot_filepath']
@@ -48,74 +47,10 @@ module Fastlane
48
47
 
49
48
  avd_scheme_list << avd_scheme
50
49
  end
51
-
52
- # Prepare list of open ports for AVD_schemes without ports set in JSON
53
- avaliable_ports = get_unused_even_tcp_ports(5556, 5586, avd_scheme_list)
54
-
55
- # Fill empty AVD_schemes with open ports
56
- for i in 0...avd_scheme_list.length
57
- avd_scheme = avd_scheme_list[i]
58
- if avd_scheme.launch_avd_port.eql? ""
59
- avd_scheme.launch_avd_port = avaliable_ports[0]
60
- avaliable_ports.delete(avaliable_ports[0])
61
- end
62
- end
63
50
 
64
51
  return avd_scheme_list
65
52
  end
66
53
 
67
- def self.get_unused_even_tcp_ports(min_port, max_port, avd_scheme_list)
68
- if min_port % 2 != 0
69
- min_port += 1
70
- end
71
-
72
- if max_port % 2 != 0
73
- max_port += 1
74
- end
75
-
76
- avaliable_ports = []
77
- reserved_ports = []
78
-
79
- # Gather ports requested in JSON config
80
- for i in 0...avd_scheme_list.length
81
- avd_scheme = avd_scheme_list[i]
82
- unless avd_scheme.launch_avd_port.eql? ""
83
- reserved_ports << avd_scheme.launch_avd_port
84
- end
85
- end
86
-
87
- # Find next open port which wasn't reserved in JSON config
88
- port = min_port
89
- for i in 0...avd_scheme_list.length
90
-
91
- while port < max_port do
92
- if !system("lsof -i:#{port}", out: '/dev/null')
93
-
94
- is_port_reserved = false
95
- for j in 0...reserved_ports.length
96
- if reserved_ports[j].eql?(port.to_s)
97
- is_port_reserved = true
98
- break
99
- end
100
- end
101
-
102
- if is_port_reserved
103
- port = port + 2
104
- break
105
- end
106
-
107
- avaliable_ports << port
108
- port = port + 2
109
- break
110
- else
111
- port = port + 2
112
- end
113
- end
114
- end
115
-
116
- return avaliable_ports
117
- end
118
-
119
54
  def self.read_avd_setup(params)
120
55
  if File.exists?(File.expand_path("#{params[:AVD_setup_path]}"))
121
56
  file = File.open(File.expand_path("#{params[:AVD_setup_path]}"), "rb")
@@ -154,9 +89,6 @@ module Fastlane
154
89
  if avd_scheme.launch_avd_launch_binary_name.nil?
155
90
  errors.push("launch_avd_launch_binary_name not found")
156
91
  end
157
- if avd_scheme.launch_avd_port.nil?
158
- errors.push("launch_avd_port not found")
159
- end
160
92
  if avd_scheme.launch_avd_additional_options.nil?
161
93
  errors.push("launch_avd_additional_options not found")
162
94
  end
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module AutomatedTestEmulatorRunMik
3
- VERSION = "1.6.14"
3
+ VERSION = "1.6.15-1"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-automated_test_emulator_run_mik
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.14
4
+ version: 1.6.15.pre.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kamil Krzyk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-04 00:00:00.000000000 Z
11
+ date: 2019-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry
@@ -123,9 +123,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
123
123
  version: '0'
124
124
  required_rubygems_version: !ruby/object:Gem::Requirement
125
125
  requirements:
126
- - - ">="
126
+ - - ">"
127
127
  - !ruby/object:Gem::Version
128
- version: '0'
128
+ version: 1.3.1
129
129
  requirements: []
130
130
  rubyforge_project:
131
131
  rubygems_version: 2.5.2.3