Class: Hive::Worker::Android
- Inherits:
-
Hive::Worker
- Object
- Hive::Worker
- Hive::Worker::Android
- Defined in:
- lib/hive/worker/android.rb
Instance Attribute Summary collapse
-
#device ⇒ Object
Returns the value of attribute device.
Instance Method Summary collapse
- #adb_port ⇒ Object
-
#autogenerated_queues ⇒ Object
def set_device_status(status) # TODO Report to Hive Mind end.
- #hive_mind_device_identifiers ⇒ Object
-
#initialize(device) ⇒ Android
constructor
A new instance of Android.
- #job_message_klass ⇒ Object
- #post_script(job, file_system, script) ⇒ Object
- #pre_script(job, file_system, script) ⇒ Object
Constructor Details
#initialize(device) ⇒ Android
Returns a new instance of Android.
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/hive/worker/android.rb', line 22 def initialize(device) @serial = device['serial'] @queue_prefix = device['queue_prefix'].to_s == '' ? '' : "#{device['queue_prefix']}-" @model = device['model'].downcase.gsub(/\s/, '_') @brand = device['brand'].downcase.gsub(/\s/, '_') @os_version = device['os_version'] @worker_ports = PortReserver.new begin device.merge!({"device_api" => DeviceAPI::Android.device(@serial)}) rescue DeviceAPI::DeviceNotFound Hive.logger.info("Device '#{@serial}' disconnected during initialization") rescue DeviceAPI:: Hive.logger.info("Device '#{@serial}' is unauthorized") rescue DeviceAPI::Android::ADBCommandError Hive.logger.info("Device disconnected during worker initialization") rescue => e Hive.logger.warn("Error with connected device: #{e.message}") end set_device_status('happy') self.device = device super(device) end |
Instance Attribute Details
#device ⇒ Object
Returns the value of attribute device.
20 21 22 |
# File 'lib/hive/worker/android.rb', line 20 def device @device end |
Instance Method Details
#adb_port ⇒ Object
45 46 47 48 49 |
# File 'lib/hive/worker/android.rb', line 45 def adb_port # Assign adb port for this worker return @adb_port unless @adb_port.nil? @adb_port = @port_allocator.allocate_port end |
#autogenerated_queues ⇒ Object
def set_device_status(status)
# TODO Report to Hive Mind
end
97 98 99 100 101 102 103 104 105 106 |
# File 'lib/hive/worker/android.rb', line 97 def autogenerated_queues @log.info("Autogenerating queues") [ "#{@queue_prefix}#{@model}", "#{@queue_prefix}#{@brand}", "#{@queue_prefix}android", "#{@queue_prefix}android-#{@os_version}", "#{@queue_prefix}android-#{@os_version}-#{@model}" ] end |
#hive_mind_device_identifiers ⇒ Object
108 109 110 111 112 113 |
# File 'lib/hive/worker/android.rb', line 108 def hive_mind_device_identifiers { serial: @serial, device_type: 'Mobile' } end |
#job_message_klass ⇒ Object
77 78 79 |
# File 'lib/hive/worker/android.rb', line 77 def Hive::Messages::AndroidJob end |
#post_script(job, file_system, script) ⇒ Object
81 82 83 84 85 86 87 |
# File 'lib/hive/worker/android.rb', line 81 def post_script(job, file_system, script) @log.info('Post script') @worker_ports.ports.each do |name, port| @port_allocator.release_port(port) end set_device_status('happy') end |
#pre_script(job, file_system, script) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/hive/worker/android.rb', line 51 def pre_script(job, file_system, script) set_device_status('busy') script.set_env "TEST_SERVER_PORT", adb_port # TODO: Allow the scheduler to specify the ports to use script.set_env "CHARLES_PROXY_PORT", @worker_ports.reserve(queue_name: 'Charles') { @port_allocator.allocate_port } script.set_env "APPIUM_PORT", @worker_ports.reserve(queue_name: 'Appium') { @port_allocator.allocate_port } script.set_env "BOOTSTRAP_PORT", @worker_ports.reserve(queue_name: 'Bootstrap') { @port_allocator.allocate_port } script.set_env "CHROMEDRIVER_PORT", @worker_ports.reserve(queue_name: 'Chromedriver') { @port_allocator.allocate_port } script.set_env 'ADB_DEVICE_ARG', self.device['serial'] FileUtils.mkdir(file_system.home_path + '/build') apk_path = file_system.home_path + '/build/' + 'build.apk' script.set_env "APK_PATH", apk_path if job.build file_system.fetch_build(job.build, apk_path) DeviceAPI::Android::Signing.sign_apk({apk: apk_path, resign: true}) end DeviceAPI::Android.device(device['serial']).unlock "#{self.device['serial']} #{@worker_ports.ports['Appium']} #{apk_path} #{file_system.results_path}" end |