class Drntest::TestExecutor::Context

Public Class Methods

new(client, config, results, abort_tag) click to toggle source
# File lib/drntest/test-executor.rb, line 58
def initialize(client, config, results, abort_tag)
  @client = client
  @config = config
  @results = results
  @abort_tag = abort_tag
  @requests = []
  @responses = []
  @logging = true
  @completion = nil
  @validation = nil
end

Public Instance Methods

execute(operation) click to toggle source
# File lib/drntest/test-executor.rb, line 70
def execute(operation)
  case operation
  when Directive
    execute_directive(operation)
  else
    execute_request(operation)
  end
end
finish() click to toggle source
# File lib/drntest/test-executor.rb, line 79
def finish
  consume_requests
  @results.actuals = @responses
end

Private Instance Methods

abort_execution() click to toggle source
# File lib/drntest/test-executor.rb, line 178
def abort_execution
  throw(@abort_tag)
end
clean_response(request, raw_response) click to toggle source
# File lib/drntest/test-executor.rb, line 146
def clean_response(request, raw_response)
  begin
    normalize_response(request, raw_response)
  rescue
    {
      "error" => {
        "message" => "failed to normalize response",
        "detail" => "#{$!.message} (#{$!.class})",
        "backtrace" => $!.backtrace,
        "response" => raw_response,
      },
    }
  end
end
consume_requests() click to toggle source
# File lib/drntest/test-executor.rb, line 161
def consume_requests
  @requests.each do |request|
    request.wait
  end
  @requests.clear
end
execute_directive(directive) click to toggle source
# File lib/drntest/test-executor.rb, line 85
def execute_directive(directive)
  case directive
  when EnableLoggingDirective
    @logging = true
    consume_requests
  when DisableLoggingDirective
    @logging = false
  when OmitDirective
    @results.omit(directive.message)
    abort_execution
  when RequireCatalogVersionDirective
    if @config.catalog_version < directive.version
      message =
        "require catalog version #{directive.version} or later: " +
        "<#{@config.catalog_version}>"
      @results.omit(message)
      abort_execution
    end
  when EnableCompletionDirective
    @completion = true
  when DisableCompletionDirective
    @completion = false
  when EnableValidationDirective
    @validation = true
  when DisableValidationDirective
    @validation = false
  when SubscribeUntil
    @subscribe = true
    @timeout_seconds = directive.timeout_seconds
    @max_messages = directive.max_messages
  end
end
execute_request(request) click to toggle source
# File lib/drntest/test-executor.rb, line 118
def execute_request(request)
  options = {}
  options[:completion] = @completion unless @completion.nil?
  options[:validation] = @validation unless @validation.nil?

  if @logging
    responses = []
    if @subscribe
      options[:subscription_timeout] = @timeout_seconds
      options[:max_messages] = @max_messages
      request_process = @client.subscribe(request, options) do |raw_response|
        responses << clean_response(request, raw_response)
      end
      request_process.wait
      @subscribe = false
    else
      request_process = @client.request(request, options) do |raw_response|
        responses << clean_response(request, raw_response)
      end
      request_process.wait
    end
    @responses.concat(normalize_responses(request, responses))
  else
    @requests << @client.request(request, options) do
    end
  end
end
normalize_response(request, response) click to toggle source
# File lib/drntest/test-executor.rb, line 168
def normalize_response(request, response)
  normalizer = ResponseNormalizer.new(request, response)
  normalizer.normalize
end
normalize_responses(request, responses) click to toggle source
# File lib/drntest/test-executor.rb, line 173
def normalize_responses(request, responses)
  normalizer = ResponsesNormalizer.new(request, responses)
  normalizer.normalize
end