hive-runner-android 1.2.5 → 1.2.6
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 +4 -4
- data/lib/hive/controller/android.rb +102 -71
- metadata +37 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c76ad1905fc8732822f8f584e3e739fc4c497af3
|
4
|
+
data.tar.gz: d9f72a7a6dc976620dcc4c0f3c99812792aabaeb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 924dc210d17e323cdc3f13f72a665854c3146cb7d85d17e1314eac352bb3ae73c9d59a8ef6f98898993d25dd4c05da160d60314855826d272e7674f305f4d06c
|
7
|
+
data.tar.gz: 383d25e84c5cd1ef7443f401cce28c6c9bda931f24b50970eec6768d15585c3f3695196c869f5e2e9920b7d35e585244507dab81916f6684fd9f73c7b2b64f44
|
@@ -6,90 +6,78 @@ module Hive
|
|
6
6
|
class Controller
|
7
7
|
class Android < Controller
|
8
8
|
|
9
|
+
def initialize(options)
|
10
|
+
@device_type ||= 'Mobile'
|
11
|
+
@remote = false if @remote.nil?
|
12
|
+
super(options)
|
13
|
+
end
|
14
|
+
|
9
15
|
# Register and poll connected devices
|
10
16
|
def detect
|
11
|
-
|
12
|
-
|
17
|
+
if Hive.hive_mind.device_details.has_key? :error
|
18
|
+
detect_without_hivemind
|
19
|
+
else
|
20
|
+
detect_with_hivemind
|
21
|
+
end
|
22
|
+
end
|
13
23
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
connected_devices = Hive.hive_mind.device_details['connected_devices'].select{ |d| d['device_type'] == 'Mobile' && d['operating_system_name'] == 'android' }
|
18
|
-
rescue NoMethodError
|
19
|
-
# Failed to find connected devices
|
20
|
-
raise Hive::Controller::DeviceDetectionFailed
|
21
|
-
end
|
24
|
+
def detect_with_hivemind
|
25
|
+
connected_devices = get_connected_devices
|
26
|
+
Hive.logger.debug('No devices attached') if connected_devices.empty?
|
22
27
|
|
23
|
-
|
24
|
-
|
25
|
-
connected_devices.each do |device|
|
26
|
-
Hive.logger.debug("Device details: #{device.inspect}")
|
27
|
-
registered_device = devices.select { |a| a.serial == device['serial'] && a.status != :unauthorized && a.status != :no_permissions}
|
28
|
-
if registered_device.empty?
|
29
|
-
# A previously registered device isn't attached
|
30
|
-
Hive.logger.debug("A previously registered device has disappeared: #{device}")
|
31
|
-
else
|
32
|
-
# A previously registered device is attached, poll it
|
33
|
-
Hive.logger.debug("Setting #{device} to be polled")
|
34
|
-
Hive.logger.debug("Device: #{registered_device.inspect}")
|
35
|
-
begin
|
36
|
-
attached_devices << self.create_device(device.merge('os_version' => registered_device[0].version))
|
37
|
-
to_poll << device['id']
|
38
|
-
rescue DeviceAPI::DeviceNotFound => e
|
39
|
-
Hive.logger.warn("Device disconnected before registration (serial: #{device['serial']})")
|
40
|
-
rescue => e
|
41
|
-
Hive.logger.warn("Error with connected device: #{e.message}")
|
42
|
-
end
|
43
|
-
|
44
|
-
devices = devices - registered_device
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
# Poll already registered devices
|
49
|
-
Hive.logger.debug("Polling: #{to_poll}")
|
50
|
-
Hive.hive_mind.poll(*to_poll)
|
28
|
+
# Selecting only android mobiles
|
29
|
+
hivemind_devices = get_hivemind_devices
|
51
30
|
|
52
|
-
|
53
|
-
|
31
|
+
to_poll = []
|
32
|
+
attached_devices = []
|
33
|
+
hivemind_devices.each do |device|
|
34
|
+
Hive.logger.debug("Device details: #{device.inspect}")
|
35
|
+
registered_device = connected_devices.select { |a| a.serial == device['serial'] }
|
36
|
+
if registered_device.empty?
|
37
|
+
# A previously registered device isn't attached
|
38
|
+
Hive.logger.debug("A previously registered device has disappeared: #{device}")
|
39
|
+
else
|
40
|
+
# A previously registered device is attached, poll it
|
41
|
+
Hive.logger.debug("Setting #{device} to be polled")
|
42
|
+
Hive.logger.debug("Device: #{registered_device.inspect}")
|
54
43
|
begin
|
55
|
-
|
56
|
-
|
57
|
-
serial: device.serial,
|
58
|
-
macs: [device.wifi_mac_address],
|
59
|
-
ips: [device.ip_address],
|
60
|
-
brand: device.manufacturer.capitalize,
|
61
|
-
model: device.model,
|
62
|
-
device_type: 'Mobile',
|
63
|
-
imei: device.imei,
|
64
|
-
operating_system_name: 'android',
|
65
|
-
operating_system_version: device.version
|
66
|
-
)
|
67
|
-
Hive.hive_mind.connect(dev['id'])
|
68
|
-
Hive.logger.info("Device registered: #{dev}")
|
44
|
+
attached_devices << self.create_device(device.merge('os_version' => registered_device[0].version))
|
45
|
+
to_poll << device['id']
|
69
46
|
rescue DeviceAPI::DeviceNotFound => e
|
70
|
-
Hive.logger.warn("Device disconnected before registration (serial: #{device
|
47
|
+
Hive.logger.warn("Device disconnected before registration (serial: #{device['serial']})")
|
71
48
|
rescue => e
|
72
49
|
Hive.logger.warn("Error with connected device: #{e.message}")
|
73
50
|
end
|
74
|
-
end
|
75
51
|
|
76
|
-
|
77
|
-
Hive.logger.info('No Hive Mind connection')
|
78
|
-
Hive.logger.debug("Error: #{Hive.hive_mind.device_details[:error]}")
|
79
|
-
# Hive Mind isn't available, use DeviceAPI instead
|
80
|
-
device_info = devices.select { |a| a.status != :unauthorized && a.status != :no_permissions }.map do |device|
|
81
|
-
{
|
82
|
-
'id' => device.serial,
|
83
|
-
'serial' => device.serial,
|
84
|
-
'status' => 'idle',
|
85
|
-
'model' => device.model,
|
86
|
-
'brand' => device.manufacturer,
|
87
|
-
'os_version' => device.version
|
88
|
-
}
|
52
|
+
connected_devices = connected_devices - registered_device
|
89
53
|
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# Poll already registered devices
|
57
|
+
Hive.logger.debug("Polling: #{to_poll}")
|
58
|
+
Hive.hive_mind.poll(*to_poll)
|
90
59
|
|
91
|
-
|
92
|
-
|
60
|
+
# Register new devices
|
61
|
+
connected_devices.select{|a| a.status != :unauthorized && a.status != :no_permissions}.each do |device|
|
62
|
+
begin
|
63
|
+
dev = Hive.hive_mind.register(
|
64
|
+
hostname: device.model,
|
65
|
+
serial: device.serial,
|
66
|
+
macs: [device.wifi_mac_address],
|
67
|
+
ips: [device.ip_address],
|
68
|
+
brand: device.manufacturer.capitalize,
|
69
|
+
model: device.model,
|
70
|
+
device_type: @device_type,
|
71
|
+
imei: device.imei,
|
72
|
+
operating_system_name: 'android',
|
73
|
+
operating_system_version: device.version
|
74
|
+
)
|
75
|
+
Hive.hive_mind.connect(dev['id'])
|
76
|
+
Hive.logger.info("Device registered: #{dev}")
|
77
|
+
rescue DeviceAPI::DeviceNotFound => e
|
78
|
+
Hive.logger.warn("Device disconnected before registration (serial: #{device.serial})")
|
79
|
+
rescue => e
|
80
|
+
Hive.logger.warn("Error with connected device: #{e.message}")
|
93
81
|
end
|
94
82
|
end
|
95
83
|
|
@@ -97,6 +85,49 @@ module Hive
|
|
97
85
|
attached_devices
|
98
86
|
end
|
99
87
|
|
88
|
+
def detect_without_hivemind
|
89
|
+
connected_devices = get_connected_devices
|
90
|
+
Hive.logger.debug('No devices attached') if connected_devices.empty?
|
91
|
+
|
92
|
+
Hive.logger.info('No Hive Mind connection')
|
93
|
+
Hive.logger.debug("Error: #{Hive.hive_mind.device_details[:error]}")
|
94
|
+
# Hive Mind isn't available, use DeviceAPI instead
|
95
|
+
device_info = connected_devices.map do |device|
|
96
|
+
{
|
97
|
+
'id' => device.serial,
|
98
|
+
'serial' => device.serial,
|
99
|
+
'status' => 'idle',
|
100
|
+
'model' => device.model,
|
101
|
+
'brand' => device.manufacturer,
|
102
|
+
'os_version' => device.version
|
103
|
+
}
|
104
|
+
end
|
105
|
+
|
106
|
+
attached_devices = device_info.collect do |physical_device|
|
107
|
+
self.create_device(physical_device)
|
108
|
+
end
|
109
|
+
|
110
|
+
Hive.logger.info(attached_devices)
|
111
|
+
attached_devices
|
112
|
+
end
|
113
|
+
|
114
|
+
def get_connected_devices
|
115
|
+
DeviceAPI::Android.devices.select do |a|
|
116
|
+
a.status != :unauthorized &&
|
117
|
+
a.status != :no_permissions &&
|
118
|
+
a.is_remote? == @remote
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def get_hivemind_devices
|
123
|
+
begin
|
124
|
+
Hive.hive_mind.device_details['connected_devices'].select{ |d| d['device_type'] == @device_type && d['operating_system_name'] == 'android' }
|
125
|
+
rescue NoMethodError
|
126
|
+
# Failed to find connected devices
|
127
|
+
raise Hive::Controller::DeviceDetectionFailed
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
100
131
|
def display_devices(hive_details)
|
101
132
|
rows = []
|
102
133
|
if hive_details.key?('devices')
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hive-runner-android
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jon Wilson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: device_api-android
|
@@ -17,6 +17,9 @@ dependencies:
|
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.0'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.2.9
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -24,6 +27,9 @@ dependencies:
|
|
24
27
|
- - "~>"
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: '1.0'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.2.9
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: hive-runner
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,6 +58,34 @@ dependencies:
|
|
52
58
|
- - ">="
|
53
59
|
- !ruby/object:Gem::Version
|
54
60
|
version: '1.4'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: rspec
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '3.5'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '3.5'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: webmock
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '1.22'
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '1.22'
|
55
89
|
description: The Android controller module for Hive Runner
|
56
90
|
email: jon.wilson01@bbc.co.uk
|
57
91
|
executables: []
|
@@ -88,7 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
88
122
|
version: '0'
|
89
123
|
requirements: []
|
90
124
|
rubyforge_project:
|
91
|
-
rubygems_version: 2.5.
|
125
|
+
rubygems_version: 2.5.1
|
92
126
|
signing_key:
|
93
127
|
specification_version: 4
|
94
128
|
summary: Hive Runner Android
|