optimus-runner 1.1.0 → 1.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 92ec6e38fa09d3d5c364f7ab473b1572b9075c25f69445e02a3a4265a50ed038
4
- data.tar.gz: 9a1a2cbc2065d4d1a8c91f43a0f2df0c933721e259e2a947b5f011d16bca53ec
3
+ metadata.gz: 13e5dec7f952733d14d108f33347b3e16605b34978bad30bbe7b838068f4a4e9
4
+ data.tar.gz: 3acc90f802671fb7ae07c11f32a07414ef7a4fa7d1d1062d054fde92c7f2fcd2
5
5
  SHA512:
6
- metadata.gz: ad8cf9a494337da54ac408fb8239185876ac12a4b9084ee5507bb75948502b3b0cd862025534afdc6e32d4fd746f2fe9354504f29d7215b6347a927789d5dd94
7
- data.tar.gz: 4ac5cda006e849ee1d23defd7efc622d9a2757f0a033a3b05dd07d8787244e26353817bc3e771fb2de911d34fbb558006e970704784f6fb923a4e181e580c161
6
+ metadata.gz: 2ad4243220a96544d38d89971de59810dd65b1e36f117d6dc61acca2af20ef48adebf6a85ddb04c23da96caeea762206b092cf300659c5eb57bd589557ee8921
7
+ data.tar.gz: e675ea483105f3e0c45523fc539bd04665d176c723c5ea13858ff5a9904876f63417945a204d6116dc44ccfb6c4d1e5e7c1366342fb756e75c46c1ea7881244e
@@ -1,11 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- optimus-runner (1.0.2)
4
+ optimus-runner (1.1.4)
5
5
  aasm (~> 5.0)
6
6
  daemons (~> 1.3)
7
7
  dotenv (~> 2.1, >= 2.1.1)
8
+ exponential-backoff (~> 0.0.4)
8
9
  httparty (~> 0.16.3)
10
+ nenv (~> 0.3.0)
9
11
  open4 (~> 1.3)
10
12
  os (~> 1.0, >= 1.0.1)
11
13
  random-port (~> 0.3.1)
@@ -14,14 +16,15 @@ PATH
14
16
  GEM
15
17
  remote: https://rubygems.org/
16
18
  specs:
17
- aasm (5.0.6)
19
+ aasm (5.0.8)
18
20
  concurrent-ruby (~> 1.0)
19
21
  concurrent-ruby (1.1.6)
20
22
  daemons (1.3.1)
21
23
  diff-lcs (1.3)
22
24
  dotenv (2.7.5)
23
- et-orbi (1.2.2)
25
+ et-orbi (1.2.4)
24
26
  tzinfo
27
+ exponential-backoff (0.0.4)
25
28
  fugit (1.3.3)
26
29
  et-orbi (~> 1.1, >= 1.1.8)
27
30
  raabro (~> 1.1)
@@ -32,6 +35,7 @@ GEM
32
35
  mime-types-data (~> 3.2015)
33
36
  mime-types-data (3.2019.1009)
34
37
  multi_xml (0.6.0)
38
+ nenv (0.3.0)
35
39
  open4 (1.3.4)
36
40
  os (1.0.1)
37
41
  raabro (1.1.6)
@@ -18,10 +18,21 @@ options = {
18
18
  :log_dir => "#{File.expand_path('~')}/optimus_runner/logs",
19
19
  :logfilename => 'optimus-runner.log'
20
20
  }
21
+
22
+ ENV["ANDROID"]="true"
23
+ ENV["IOS"]="true"
21
24
  optparser = OptionParser.new do |parser|
22
25
  parser.on('-e=FILE','--env=FILE', "Optimus Cloud Environment file") do |file|
23
26
  Dotenv.load(file)
24
27
  end
28
+ parser.on('-a','--android-only',"Create sessions for android") do
29
+ ENV["IOS"]="false"
30
+ p "running android"
31
+ end
32
+ parser.on('-i','--ios-only',"Create sessions for iOS") do
33
+ ENV["ANDROID"]="false"
34
+ p "running ios"
35
+ end
25
36
  end
26
37
  optparser.parse!(ARGV)
27
38
  Daemons.run(File.join(File.dirname(__FILE__),'optimus_runner_manager'), options)
@@ -18,5 +18,10 @@ scheduler.interval '5s', :first_in => 0.1 do
18
18
  optimus_runner_sm.add if optimus_runner_sm.new_device_added?
19
19
  optimus_runner_sm.remove if optimus_runner_sm.device_removed?
20
20
  optimus_runner_sm.restart if optimus_runner_sm.session_terminated?
21
+ optimus_runner_sm.empty if optimus_runner_sm.cloud_session_empty? # You have done FLUSHALL in akira
22
+ end
23
+
24
+ scheduler.every '1m', :first_in => 60 do
25
+ optimus_runner_sm.session_state
21
26
  end
22
27
  scheduler.join
@@ -53,9 +53,9 @@ class AppiumLocalService
53
53
  def get_cmd(device_detail)
54
54
  case device_detail["platform"]
55
55
  when "ANDROID"
56
- return "appium -p #{@port} --bootstrap-port #{get_random_port}"
56
+ return "appium -p #{@port} --bootstrap-port #{get_random_port} --relaxed-security --default-capabilities '{\"systemPort\":#{get_random_port}}'"
57
57
  when "IOS"
58
- return "appium -p #{@port} --webdriveragent-port #{get_random_port}"
58
+ return "appium -p #{@port} --webdriveragent-port #{get_random_port} --relaxed-security"
59
59
  end
60
60
  end
61
61
 
@@ -1,6 +1,7 @@
1
1
  require 'HTTParty'
2
2
  require 'optimus-runner/clients/mdb_client'
3
3
  require 'os'
4
+ require 'nenv'
4
5
 
5
6
  class DeviceDetails
6
7
 
@@ -17,12 +18,16 @@ class DeviceDetails
17
18
  end
18
19
 
19
20
  def process_android_devices
20
- devices = `adb devices`
21
+ if(Nenv.android?)
22
+ devices = `adb devices`
23
+ else
24
+ devices = []
25
+ end
21
26
  return MDBClient.new.format_android_devices devices
22
27
  end
23
28
 
24
29
  def process_ios_devices
25
- if(OS.mac?)
30
+ if(OS.mac? && Nenv.ios?)
26
31
  devices = `instruments -s devices | grep 'iPhone'`
27
32
  return [] if devices.length == 0
28
33
  return MDBClient.new.format_ios_devices devices
@@ -32,14 +37,16 @@ class DeviceDetails
32
37
 
33
38
  def find_android_devices(device_names)
34
39
  device_details = []
35
- device_names.each do |a|
36
- puts "adb -s #{a['udid']} shell getprop ro.product.model"
37
- device_model = `adb -s #{a['udid']} shell getprop ro.product.model`
38
- device_os_version = `adb -s #{a['udid']} shell getprop ro.build.version.release`
39
- a['deviceName'] = device_model.to_s.rstrip
40
- a['platformVersion'] = device_os_version.to_s.rstrip
41
- a["platform"] = "ANDROID"
42
- device_details.push(a)
40
+ if(Nenv.android?)
41
+ device_names.each do |a|
42
+ puts "adb -s #{a['udid']} shell getprop ro.product.model"
43
+ device_model = `adb -s #{a['udid']} shell getprop ro.product.model`
44
+ device_os_version = `adb -s #{a['udid']} shell getprop ro.build.version.release`
45
+ a['deviceName'] = device_model.to_s.rstrip
46
+ a['platformVersion'] = device_os_version.to_s.rstrip
47
+ a["platform"] = "ANDROID"
48
+ device_details.push(a)
49
+ end
43
50
  end
44
51
  device_details
45
52
  end
@@ -28,6 +28,14 @@ class AkriaClient
28
28
  HTTParty.put(uri, query: query_params, headers: get_default_headers)
29
29
  end
30
30
 
31
+ def release_session(session_url)
32
+ uri = "#{@base_uri}/sessionState/release"
33
+ query_params = {
34
+ 'sessionUrl':session_url
35
+ }
36
+ HTTParty.put(uri, query: query_params, headers: get_default_headers)
37
+ end
38
+
31
39
  def get_session_info(session_url)
32
40
  uri = "#{@base_uri}/sessionInfo"
33
41
  puts uri
@@ -39,6 +47,25 @@ class AkriaClient
39
47
  return session_info
40
48
  end
41
49
 
50
+ def get_session_state(session_url)
51
+ uri = "#{@base_uri}/sessionState"
52
+ query_params = {
53
+ 'sessionUrl':session_url
54
+ }
55
+ response = HTTParty.get(uri, query: query_params, headers: get_default_headers)
56
+ p response
57
+ session_state = response
58
+ return session_state
59
+ end
60
+
61
+ def get_all_sessions
62
+ uri = "#{@base_uri}/sessionsList"
63
+ puts uri
64
+ response = HTTParty.get(uri, headers: get_default_headers)
65
+ sessions = JSON.parse(response.to_s)
66
+ return sessions
67
+ end
68
+
42
69
 
43
70
  def get_default_headers
44
71
  headers = {
@@ -48,4 +75,7 @@ class AkriaClient
48
75
  end
49
76
 
50
77
 
78
+
79
+
80
+
51
81
  end
@@ -0,0 +1,18 @@
1
+ require 'HTTParty'
2
+
3
+ class AppiumServerClient
4
+ def isSessionAlive?(session_url)
5
+ uri = "#{session_url}/sessions"
6
+ response = HTTParty.get(uri, headers: get_default_headers)
7
+ sessions = JSON.parse(response.to_s)
8
+ session_state = sessions["value"].empty?
9
+ return !session_state
10
+ end
11
+
12
+ def get_default_headers
13
+ headers = {
14
+ 'Content-Type': "Application/json"
15
+ }
16
+ return headers
17
+ end
18
+ end
@@ -7,9 +7,10 @@ require 'json'
7
7
  require 'optimus-runner/AppiumLocalService'
8
8
  require 'optimus-runner/SessionInfoBuilder'
9
9
  require 'optimus-runner/clients/AkiraClient'
10
- require 'optimus-runner/clients/AkiraClient'
10
+ require 'optimus-runner/clients/AppiumServerClient'
11
11
  require 'logger'
12
12
  require 'optimus-runner/commands/ShellCommands'
13
+ require 'exponential_backoff'
13
14
 
14
15
  class OptimusRunnerSM
15
16
  include AASM
@@ -51,6 +52,16 @@ class OptimusRunnerSM
51
52
  transitions :from => [:created, :added, :removed, :restarted], :to => :created, :guard => :devices_available?
52
53
  transitions :from => [:created, :added, :removed, :restarted], :to => :idle
53
54
  end
55
+
56
+ event :empty, :before => :empty_sessions do
57
+ transitions :from => [:created, :added, :removed, :restarted], :to => :added, :guard => :cloud_session_empty?
58
+ transitions :from => [:created, :added, :removed, :restarted], :to => :created, :guard => :devices_available?
59
+ transitions :from => [:created, :added, :removed, :restarted], :to => :idle
60
+ end
61
+
62
+ event :session_state, :before => :is_session_alive? do
63
+ transitions :from => [:created, :added, :removed, :restarted], :to => :created, :guard => :devices_available?
64
+ end
54
65
  end
55
66
 
56
67
  def devices_available?
@@ -76,6 +87,10 @@ class OptimusRunnerSM
76
87
  @session_restarted
77
88
  end
78
89
 
90
+ def session_empty?
91
+ @sessions_empty
92
+ end
93
+
79
94
  def gather_devices
80
95
  details = DeviceDetails.new
81
96
  @device_details = details.get_device_details
@@ -86,7 +101,6 @@ class OptimusRunnerSM
86
101
  return unless devices_available?
87
102
  @logger.info "Device details found are #{@device_details}"
88
103
  sessions = AppiumLocalService.new.launch_appium_sessions(@device_details)
89
- puts sessions
90
104
  @session_info = sessions
91
105
  AkriaClient.new.save_sessions(@session_info)
92
106
  end
@@ -98,7 +112,6 @@ class OptimusRunnerSM
98
112
  # session_info = SessionInfo.new(session,device_details).create_session_info
99
113
  AkriaClient.new.save_sessions(session_info)
100
114
  @session_info.push session_info[0]
101
- p @session_info
102
115
  end
103
116
 
104
117
  def add_sessions
@@ -127,8 +140,6 @@ class OptimusRunnerSM
127
140
  @initial_device_set = @device_details
128
141
  end
129
142
  end
130
-
131
-
132
143
  end
133
144
 
134
145
  def session_terminated?
@@ -162,6 +173,35 @@ class OptimusRunnerSM
162
173
  @session_restarted = true
163
174
  end
164
175
 
176
+ def empty_sessions
177
+ return unless devices_available?
178
+ if cloud_session_empty?
179
+ p "Session Info #{@session_info}"
180
+ AkriaClient.new.save_sessions(@session_info)
181
+ end
182
+ end
183
+
184
+ def cloud_session_empty?
185
+ sessions = AkriaClient.new.get_all_sessions
186
+ return false if sessions.instance_of? Array
187
+ return true if sessions.key?("errorCode")
188
+ end
189
+
190
+ def session_state
191
+ return unless devices_available?
192
+ @session_info.each do |session|
193
+ if(is_session_engaged?(session["sessionUrl"]))
194
+ AkriaClient.new.release_session session["sessionUrl"] unless AppiumServerClient.new.isSessionAlive? session["sessionUrl"]
195
+ end
196
+ end
197
+ end
198
+
199
+ def is_session_engaged?(session_url)
200
+ session_state = AkriaClient.new.get_session_state session_url
201
+ p "Session state is #{session_state}"
202
+ return session_state.casecmp?("ENGAGED")
203
+ end
204
+
165
205
  def new_device_added?
166
206
  added_device = get_added_devices
167
207
  p "Is new devices added #{added_device.length>0}"
@@ -203,5 +243,4 @@ class OptimusRunnerSM
203
243
  removed_device = @initial_device_set - @device_details
204
244
  return removed_device
205
245
  end
206
- end
207
-
246
+ end
@@ -1,3 +1,3 @@
1
1
  module Gandalf
2
- VERSION = "1.1.0"
2
+ VERSION = "1.2.0"
3
3
  end
@@ -31,4 +31,6 @@ Gem::Specification.new do |spec|
31
31
  spec.add_dependency 'aasm', '~> 5.0'
32
32
  spec.add_dependency 'rufus-scheduler', '~> 3.2'
33
33
  spec.add_dependency 'os', '~> 1.0', '>= 1.0.1'
34
+ spec.add_dependency 'nenv', '~> 0.3.0'
35
+ spec.add_dependency 'exponential-backoff', '~> 0.0.4'
34
36
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: optimus-runner
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - KrishnanandB
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-02-26 00:00:00.000000000 Z
11
+ date: 2020-06-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -182,6 +182,34 @@ dependencies:
182
182
  - - ">="
183
183
  - !ruby/object:Gem::Version
184
184
  version: 1.0.1
185
+ - !ruby/object:Gem::Dependency
186
+ name: nenv
187
+ requirement: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - "~>"
190
+ - !ruby/object:Gem::Version
191
+ version: 0.3.0
192
+ type: :runtime
193
+ prerelease: false
194
+ version_requirements: !ruby/object:Gem::Requirement
195
+ requirements:
196
+ - - "~>"
197
+ - !ruby/object:Gem::Version
198
+ version: 0.3.0
199
+ - !ruby/object:Gem::Dependency
200
+ name: exponential-backoff
201
+ requirement: !ruby/object:Gem::Requirement
202
+ requirements:
203
+ - - "~>"
204
+ - !ruby/object:Gem::Version
205
+ version: 0.0.4
206
+ type: :runtime
207
+ prerelease: false
208
+ version_requirements: !ruby/object:Gem::Requirement
209
+ requirements:
210
+ - - "~>"
211
+ - !ruby/object:Gem::Version
212
+ version: 0.0.4
185
213
  description: ''
186
214
  email:
187
215
  - krisnanandb@gmail.com
@@ -215,6 +243,7 @@ files:
215
243
  - lib/optimus-runner/DeviceDetails.rb
216
244
  - lib/optimus-runner/SessionInfoBuilder.rb
217
245
  - lib/optimus-runner/clients/AkiraClient.rb
246
+ - lib/optimus-runner/clients/AppiumServerClient.rb
218
247
  - lib/optimus-runner/clients/mdb_client.rb
219
248
  - lib/optimus-runner/commands/ShellCommands.rb
220
249
  - lib/optimus-runner/server/appium_server_manager.rb
@@ -224,16 +253,13 @@ files:
224
253
  - lib/optimus-runner/utils/optimuscloudenv.rb
225
254
  - lib/optimus-runner/version.rb
226
255
  - lib/optimus_runner_control.rb
227
- - optimus-runner-0.12.0.gem
228
- - optimus-runner-0.13.0.gem
229
- - optimus-runner-0.14.0.gem
230
256
  - optimus-runner.gemspec
231
257
  - pids/optimus-runner.log
232
258
  - pids/optimus_runner_outputfile.txt
233
259
  homepage: https://gitlab.com/testvagrant/optimus-pleiades/optimus-cloud/optimus-runner
234
260
  licenses: []
235
261
  metadata: {}
236
- post_install_message:
262
+ post_install_message:
237
263
  rdoc_options: []
238
264
  require_paths:
239
265
  - lib
@@ -249,7 +275,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
249
275
  version: '0'
250
276
  requirements: []
251
277
  rubygems_version: 3.0.6
252
- signing_key:
278
+ signing_key:
253
279
  specification_version: 4
254
280
  summary: A worker service project
255
281
  test_files: []
Binary file
Binary file
Binary file