eyes_core 3.15.48 → 3.16.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: ea364f51bddd78bac702702c17bb0e57185559d9b67f593fab52eddd284209c0
4
- data.tar.gz: 1169aeecca36f15efeafed9ac1aa61411038c9784b3d9addf18e58d096086b3e
3
+ metadata.gz: 7c8b1c4252bdea87951ac2bf9139c9271d2e673974f13edce49faa0d942e5101
4
+ data.tar.gz: 7b2c2ebe51fad932e0b391c6b892bbd378cc6c9795d3271eb6a1d68d7c63132c
5
5
  SHA512:
6
- metadata.gz: 56ac6c762a49493511a89670f52d01721b51a318f53b6d643db1cf6c152c47e4a1dc59e37acad3808679298b153d8d81e61f6e1f2ca09de823bc304b6c96cad9
7
- data.tar.gz: a451d2710086e2bf593fcd7af8bff87eceb764885e259f5016dcfc258dc3b6853709cd37084df6b56da4e51ecd75ee677f00bf4e17e83aeab02ce28c0dc728db
6
+ metadata.gz: 255a174ae78081297d821772d7601016e0b66b2b1f6de1f6ae162e269cf6001dd22d5497d16b0ae98f71788693e69bb73bdc0502d067ad8aa2823196336259ca
7
+ data.tar.gz: 1b1c4126c15b94f498c4807c3b0f96a56a258311da4f898b014dc119b59d2c39f20df5b4974be512f194951615a9d03a483f88ccb08d8d273fb2e90cb54db657
@@ -9,6 +9,7 @@ class Applitools::Appium::Eyes < Applitools::Selenium::Eyes
9
9
  def initialize(*args)
10
10
  super
11
11
  self.dont_get_title = true
12
+ self.runner = Applitools::ClassicRunner.new
12
13
  end
13
14
 
14
15
  private :perform_driver_settings_for_appium_driver
@@ -59,7 +60,7 @@ class Applitools::Appium::Eyes < Applitools::Selenium::Eyes
59
60
  end
60
61
 
61
62
  def get_app_output_with_screenshot(*args)
62
- super do |screenshot|
63
+ result = super do |screenshot|
63
64
  if scale_provider
64
65
  scaled_image = scale_provider.scale_image(screenshot.image)
65
66
  self.screenshot = Applitools::Appium::Screenshot.new(
@@ -76,6 +77,8 @@ class Applitools::Appium::Eyes < Applitools::Selenium::Eyes
76
77
  )
77
78
  end
78
79
  end
80
+ self.screenshot_url = nil
81
+ result
79
82
  end
80
83
 
81
84
  def dom_data
@@ -9,6 +9,7 @@ module Applitools
9
9
 
10
10
  def initialize(server_url = Applitools::Connectivity::ServerConnector::DEFAULT_SERVER_URL)
11
11
  super
12
+ self.runner = Applitools::ClassicRunner.new
12
13
  self.base_agent_id = "eyes.calabash.ruby/#{Applitools::VERSION}".freeze
13
14
  self.debug_screenshots = false
14
15
  self.debug_screenshot_provider = Applitools::DebugScreenshotProvider.new
@@ -103,10 +104,9 @@ module Applitools
103
104
  end
104
105
 
105
106
  def get_app_output_with_screenshot(*args)
106
- # super do |screenshot|
107
- # screenshot.scale_it!
108
- # end
109
- super(*args, &:scale_it!)
107
+ result = super(*args, &:scale_it!)
108
+ self.screenshot_url = nil
109
+ result
110
110
  end
111
111
 
112
112
  def entire_screenshot_region
@@ -2,14 +2,17 @@
2
2
 
3
3
  require 'faraday'
4
4
  require 'oj'
5
+ require 'securerandom'
6
+
5
7
  Oj.default_options = { :mode => :compat }
6
8
 
7
9
  require 'uri'
8
10
 
9
11
  module Applitools::Connectivity
10
12
  class ServerConnector
13
+ class ScreenshotUploadError < Applitools::EyesError; end
11
14
  extend Applitools::Helpers
12
- DEFAULT_SERVER_URL = 'https://eyesapi.applitools.com/'.freeze
15
+ DEFAULT_SERVER_URL = 'https://eyesapi.applitools.com'.freeze
13
16
 
14
17
  SSL_CERT = File.join(File.dirname(File.expand_path(__FILE__)), '../../../certs/cacert.pem').to_s.freeze
15
18
  DEFAULT_TIMEOUT = 300
@@ -65,6 +68,42 @@ module Applitools::Connectivity
65
68
  Oj.load response.body
66
69
  end
67
70
 
71
+ def put_screenshot(rendering_info, screenshot)
72
+ uuid = SecureRandom.uuid
73
+ upload_path = URI.parse(rendering_info.results_url.gsub(/__random__/, uuid))
74
+ retry_count = 3
75
+ wait = 0.5
76
+ loop do
77
+ raise ScreenshotUploadError, "Error uploading screenshot (#{upload_path})" if retry_count <= 0
78
+ Applitools::EyesLogger.info("Trying to upload screenshot (#{upload_path})...")
79
+ begin
80
+ response = dummy_put(
81
+ upload_path,
82
+ body: screenshot.image.to_blob,
83
+ headers: {
84
+ 'x-ms-blob-type': 'BlockBlob',
85
+ 'X-Auth-Token': rendering_info.access_token
86
+ },
87
+ query: URI.decode_www_form(upload_path.query).to_h,
88
+ content_type: 'image/png'
89
+ )
90
+ break if response.status == HTTP_STATUS_CODES[:created]
91
+ Applitools::EyesLogger.info("Failed. Retrying in #{wait} seconds")
92
+ sleep(wait)
93
+ rescue StandardError => e
94
+ Applitools::EyesLogger.error(e.class.to_s)
95
+ Applitools::EyesLogger.error(e.message)
96
+ Applitools::EyesLogger.info("Failed. Retrying in #{wait} seconds")
97
+ sleep(wait)
98
+ ensure
99
+ retry_count -= 1
100
+ wait *= 2
101
+ end
102
+ end
103
+ Applitools::EyesLogger.info('Done.')
104
+ upload_path.to_s
105
+ end
106
+
68
107
  def render_put_resource(service_url, access_key, resource, render)
69
108
  uri = URI(service_url)
70
109
  uri.path = RESOURCES_SHA_256 + resource.hash
@@ -165,10 +204,17 @@ module Applitools::Connectivity
165
204
  def match_window(session, data)
166
205
  # Notice that this does not include the screenshot.
167
206
  json_data = Oj.dump(Applitools::Utils.camelcase_hash_keys(data.to_hash)).force_encoding('BINARY')
168
- body = [json_data.length].pack('L>') + json_data + data.screenshot
207
+ body = if data.screenshot.empty?
208
+ content_type = 'application/json'
209
+ json_data
210
+ else
211
+ content_type = 'application/octet-stream'
212
+ [json_data.length].pack('L>') + json_data + data.screenshot
213
+ end
214
+
169
215
  Applitools::EyesLogger.debug 'Sending match data...'
170
216
  Applitools::EyesLogger.debug json_data
171
- res = long_post(URI.join(endpoint_url, session.id.to_s), content_type: 'application/octet-stream', body: body)
217
+ res = long_post(URI.join(endpoint_url, session.id.to_s), content_type: content_type, body: body)
172
218
  raise Applitools::EyesError.new("Request failed: #{res.status} #{res.headers}") unless res.success?
173
219
  # puts Oj.load(res.body)
174
220
  Applitools::MatchResult.new Oj.load(res.body)
@@ -31,5 +31,9 @@ module Applitools
31
31
  end
32
32
  all_test_results
33
33
  end
34
+
35
+ def rendering_info(connector)
36
+ @rendering_info ||= RenderingInfo.new(connector.rendering_info)
37
+ end
34
38
  end
35
39
  end
@@ -47,7 +47,7 @@ module Applitools
47
47
  :match_timeout, :save_new_tests, :save_failed_tests, :failure_reports, :default_match_settings, :cut_provider,
48
48
  :scale_ratio, :position_provider, :viewport_size, :verbose_results,
49
49
  :inferred_environment, :remove_session_if_matching, :server_scale, :server_remainder, :exact,
50
- :compare_with_parent_branch, :results, :runner
50
+ :compare_with_parent_branch, :results, :runner, :allow_empty_screenshot, :screenshot_url
51
51
 
52
52
  abstract_attr_accessor :base_agent_id
53
53
  abstract_method :capture_screenshot, true
@@ -82,6 +82,7 @@ module Applitools
82
82
  self.verbose_results = false
83
83
  self.failed = false
84
84
  self.results = []
85
+ self.allow_empty_screenshot = true
85
86
  @inferred_environment = nil
86
87
  @properties = []
87
88
  @server_scale = 0
@@ -650,6 +651,14 @@ module Applitools
650
651
 
651
652
  screenshot = yield(screenshot) if block_given?
652
653
 
654
+ if screenshot
655
+ self.screenshot_url = server_connector.put_screenshot(
656
+ runner.rendering_info(server_connector),
657
+ screenshot
658
+ )
659
+ screenshot = nil
660
+ end
661
+
653
662
  logger.info 'Getting title...'
654
663
  a_title = title
655
664
  logger.info 'Done!'
@@ -659,7 +668,8 @@ module Applitools
659
668
  o.dom_url = dom_url unless dom_url && dom_url.empty?
660
669
  o.screenshot_url = screenshot_url if respond_to?(:screenshot_url) && !screenshot_url.nil?
661
670
  end,
662
- screenshot
671
+ screenshot,
672
+ allow_empty_screenshot
663
673
  )
664
674
  end
665
675
 
@@ -6,6 +6,7 @@ require 'applitools/core/batch_info'
6
6
  require 'applitools/connectivity/proxy'
7
7
  require 'applitools/core/match_level'
8
8
  require 'applitools/core/match_level_setter'
9
+ require 'applitools/connectivity/server_connector'
9
10
 
10
11
  module Applitools
11
12
  class EyesBaseConfiguration < AbstractConfiguration
@@ -17,7 +18,7 @@ module Applitools
17
18
  baseline_branch_name: ENV['APPLITOOLS_BASELINE_BRANCH'] || '',
18
19
  save_diffs: false,
19
20
  server_url: ENV['APPLITOOLS_SERVER_URL'] ||
20
- ENV['bamboo_APPLITOOLS_SERVER_URL'] || 'https://eyessdk.applitools.com',
21
+ ENV['bamboo_APPLITOOLS_SERVER_URL'] || Applitools::Connectivity::ServerConnector::DEFAULT_SERVER_URL,
21
22
  api_key: ENV['APPLITOOLS_API_KEY'] || ENV['bamboo_APPLITOOLS_API_KEY'] || '',
22
23
  match_level: Applitools::MatchLevel::STRICT,
23
24
  scale: 0,
@@ -0,0 +1,26 @@
1
+ module Applitools
2
+ class RenderingInfo
3
+ attr_accessor :response
4
+ def initialize(response)
5
+ Applitools::ArgumentGuard.not_nil(response, 'response')
6
+ Applitools::ArgumentGuard.hash(response, 'response')
7
+ self.response = response
8
+ end
9
+
10
+ def service_url
11
+ response['serviceUrl']
12
+ end
13
+
14
+ def results_url
15
+ response['resultsUrl']
16
+ end
17
+
18
+ def stitching_service_url
19
+ response['stitchingServiceUrl']
20
+ end
21
+
22
+ def access_token
23
+ response['accessToken']
24
+ end
25
+ end
26
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: false
2
2
 
3
3
  module Applitools
4
- VERSION = '3.15.48'.freeze
4
+ VERSION = '3.16.0'.freeze
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eyes_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.15.48
4
+ version: 3.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Applitools Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-20 00:00:00.000000000 Z
11
+ date: 2020-01-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oily_png
@@ -297,6 +297,7 @@ files:
297
297
  - lib/applitools/core/rectangle_size.rb
298
298
  - lib/applitools/core/region.rb
299
299
  - lib/applitools/core/region_provider.rb
300
+ - lib/applitools/core/rendering_info.rb
300
301
  - lib/applitools/core/screenshot.rb
301
302
  - lib/applitools/core/session.rb
302
303
  - lib/applitools/core/session_start_info.rb