elasticsearch-api/spec/rest_api/rest_api_yaml_spec.rb (57 lines of code) (raw):
# Licensed to Elasticsearch B.V. under one or more contributor
# license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright
# ownership. Elasticsearch B.V. licenses this file to you under
# the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
require 'spec_helper'
require_relative 'rest_api_tests_helper'
require_relative './run_rspec_matchers'
# LOGGER logs to stdout since we want to see if there are any errors in the running of the tests.
# The client has a tracer/logger defined in ./rest_api_tests_helper.rb, ENV['LOG_STDOUT'] set to
# true will log to stdout instead of a log file:
LOGGER = Logger.new($stdout)
CLUSTER_FEATURES = ADMIN_CLIENT.features.get_features['features'].map { |f| f['name'] }
def skip_test?(test)
# To support new features skipping in YAML tests. This will go away with new YAML tests:
if (feature_to_skip = test.skip&.first&.[]('skip')&.[]('cluster_features'))
return true unless CLUSTER_FEATURES.include?(feature_to_skip)
end
# Support skipping 'awaits_fix'
!!test.test_file.instance_variable_get('@skip')&.first&.[]('skip')&.[]('awaits_fix') ||
!!test.skip&.first&.[]('skip')&.[]('awaits_fix')
end
describe 'Rest API YAML tests' do
LOGGER.info "Elastic Transport version: #{Elastic::Transport::VERSION}"
if REST_API_YAML_FILES.empty?
LOGGER.error 'No test files found!'
LOGGER.info 'Use rake rake es:download_artifacts in the root directory of the project to download the test artifacts.'
exit 1
end
# Traverse YAML files and create TestFile object:
REST_API_YAML_FILES.each do |file|
begin
test_file = Elasticsearch::RestAPIYAMLTests::TestFile.new(file, ADMIN_CLIENT, REST_API_YAML_SKIP_FEATURES)
context_name = file.gsub("#{YAML_FILES_DIRECTORY}/", '')
rescue SkipTestsException => e
# If the test file has a `skip` at the top level that applies to this
# version of Elasticsearch, continue with the next text.
LOGGER.info e.message
next
end
context context_name do
let(:client) { DEFAULT_CLIENT }
test_file.tests.each do |test|
next if skip_test?(test)
context test.description do
if test.skip_test?(ADMIN_CLIENT)
skip 'Test contains feature(s) not yet supported or version is not satisfied'
next
end
before(:all) do
test_file.setup
end
after(:all) do
test_file.teardown
Elasticsearch::RestAPIYAMLTests::WipeCluster.run(ADMIN_CLIENT)
end
test.task_groups.each do |task_group|
before do
task_group.run(client)
end
# ./run_task_groups.rb
run_rspec_matchers_on_task_group(task_group, test)
end
rescue StandardError => e
LOGGER.error "#{context_name} - #{e}"
raise e
end
end
end
end
end