class Kontrast::ApiEndpointRunner
Attributes
diffs[RW]
Public Class Methods
new()
click to toggle source
# File lib/kontrast/api_endpoint_runner.rb, line 7 def initialize @api_diff_comparator = ApiEndpointComparator.new @diffs = {} end
Public Instance Methods
parallel_run(suite, current_node)
click to toggle source
Runs tests
# File lib/kontrast/api_endpoint_runner.rb, line 53 def parallel_run(suite, current_node) # Run per-page tasks suite.each do |test| begin print "Processing #{test.name} @ #{test.prefix}... " # Download the json file # Create the diff hash, there @api_diff_comparator.diff(test) # Create thumbnails for gallery print "Creating thumbnails... " images = Dir.entries(File.join(Kontrast.path, test.to_s)).reject { |file_name| ['.', '..'].include?(file_name) || file_name.include?('.json') } ThumbnailCreator.create_thumbnails(test, images) # Upload to S3 if Kontrast.configuration.run_parallel print "Uploading... " upload_images(test) end puts "\n", ("=" * 85) rescue Net::ReadTimeout => e puts "Test timed out. Message: #{e.inspect}" if Kontrast.configuration.fail_build raise e end rescue StandardError => e puts "Exception: #{e.inspect}" puts e.backtrace.inspect if Kontrast.configuration.fail_build raise e end end end ensure # We need the diff at the runner level to create the manifest @diffs = @api_diff_comparator.diffs end
run(total_nodes, current_node)
click to toggle source
# File lib/kontrast/api_endpoint_runner.rb, line 12 def run(total_nodes, current_node) # Assign tests and run them suite = split_run(total_nodes, current_node) parallel_run(suite, current_node) end
split_run(total_nodes, current_node)
click to toggle source
Given the total number of nodes and the index of the current node, we determine which tests the current node will run
# File lib/kontrast/api_endpoint_runner.rb, line 20 def split_run(total_nodes, current_node) test_suite = Kontrast.api_endpoint_test_suite if test_suite.nil? return [] end # Load lazy tests # Some tests are lazy loaded from the initializer # In that case, we stored a block instead of adding a test to the # suite when reading the initializer # We need to execute the block, this will add the test to the suite # This is needed for tests that are dynamically defined: like, # get all the product pages in the DB and create a test for each # one. test_suite.lazy_tests.each do |lazy_test| Kontrast.api_endpoint_test_builder.prefix = lazy_test.prefix Kontrast.api_endpoint_test_builder.headers = lazy_test.headers lazy_test.block.call(Kontrast.api_endpoint_test_builder) end tests_to_run = [] index = 0 test_suite.tests.each do |test| if index % total_nodes == current_node tests_to_run << test end index += 1 end return tests_to_run end