class CrucibleCi::Executor
Public Class Methods
collect_metadata(client, test)
click to toggle source
# File lib/crucible_ci.rb, line 92 def self.collect_metadata(client, test) output_results Crucible::Tests::Executor.new(client).metadata(test), true end
colorize(status)
click to toggle source
# File lib/crucible_ci.rb, line 101 def self.colorize(status) case status.upcase when 'PASS' ANSI.green { status.upcase } when 'SKIP' ANSI.blue { status.upcase } when 'FAIL' ANSI.red { status.upcase } else ANSI.white_on_red { status.upcase } end end
execute(url, allowed_failures, test = nil, resource = nil, logger = nil)
click to toggle source
# File lib/crucible_ci.rb, line 7 def self.execute(url, allowed_failures, test = nil, resource = nil, logger = nil) results = nil FHIR.logger = defined?(Rails) ? Rails.logger : logger b = Benchmark.measure do client = FHIR::Client.new(url) client.conformance_statement results = execute_test(client, test, resource) end puts "Execute #{test} completed in #{b.real} seconds." passing?(results, allowed_failures) end
execute_all(url, allowed_failures, logger = nil)
click to toggle source
# File lib/crucible_ci.rb, line 19 def self.execute_all(url, allowed_failures, logger = nil) results = nil FHIR.logger = defined?(Rails) ? Rails.logger : logger b = Benchmark.measure do client = FHIR::Client.new(url) client.conformance_statement results = execute_all(client) end puts "Execute All completed in #{b.real} seconds." passing?(results, allowed_failures) end
execute_multiserver_test(client, client2, key)
click to toggle source
# File lib/crucible_ci.rb, line 87 def self.execute_multiserver_test(client, client2, key) executor = Crucible::Tests::Executor.new(client, client2) output_results executor.execute(executor.find_test(key)) end
execute_test(client, key, resourceType = nil)
click to toggle source
# File lib/crucible_ci.rb, line 60 def self.execute_test(client, key, resourceType = nil) executor = Crucible::Tests::Executor.new(client) test = executor.find_test(key) if test.nil? puts "Unable to find test: #{key}" return -1 end results = nil if !resourceType.nil? && test.respond_to?(:resource_class=) && FHIR::RESOURCES.include?(resourceType) results = test.execute("FHIR::#{resourceType}".constantize) end results = executor.execute(test) if results.nil? output_results results end
num_failures(results)
click to toggle source
# File lib/crucible_ci.rb, line 31 def self.num_failures(results) statuses = results.collect { |_, v| v.collect { |r| r['status'] } }.flatten return statuses.count('fail') + statuses.count('error') end
output_results(results, metadata_only = false)
click to toggle source
# File lib/crucible_ci.rb, line 114 def self.output_results(results, metadata_only = false) require 'ansi' results.keys.each do |suite_key| puts suite_key results[suite_key].each do |test| puts write_result(test['status'], test[:test_method], test['message']) if test['status'].casecmp('ERROR').zero? puts ' ' * 12 + '-' * 40 puts ' ' * 12 + test['data'].gsub("\n", "\n" + ' ' * 12).to_s puts ' ' * 12 + '-' * 40 end next unless metadata_only == true # warnings puts (test['warnings'].map { |w| "#{(' ' * 10)}WARNING: #{w}" }).join("\n") if test['warnings'] # metadata puts (test['links'].map { |w| "#{(' ' * 10)}Link: #{w}" }).join("\n") if test['links'] puts (test['requires'].map { |w| "#{(' ' * 10)}Requires: #{w[:resource]}: #{w[:methods]}" }).join("\n") if test['requires'] puts (test['validates'].map { |w| "#{(' ' * 10)}Validates: #{w[:resource]}: #{w[:methods]}" }).join("\n") if test['validates'] # data puts (' ' * 10) + test['data'] if test['data'] end end results end
passing?(results, allowed_failures)
click to toggle source
# File lib/crucible_ci.rb, line 36 def self.passing?(results, allowed_failures) failures = num_failures(results) if failures > allowed_failures return 64 else return 0 end end
set_client_secrets(client, options)
click to toggle source
# File lib/crucible_ci.rb, line 45 def self.set_client_secrets(client, options) puts "Using OAuth2 Options: #{options}" print 'Enter client id: ' client_id = STDIN.gets.chomp print 'Enter client secret: ' client_secret = STDIN.gets.chomp if client_id != '' && client_secret != '' options[:client_id] = client_id options[:client_secret] = client_secret client.set_oauth2_auth(options[:client_id], options[:client_secret], options[:authorize_url], options[:token_url]) else puts 'Ignoring OAuth2 credentials: empty id or secret. Using unsecured client...' end end
write_result(status, test_name, message)
click to toggle source
# File lib/crucible_ci.rb, line 96 def self.write_result(status, test_name, message) tab_size = 10 "#{' ' * (tab_size - status.length)}#{colorize(status)} #{test_name}: #{message}" end