optimus-runner 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
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