diff --git a/spec/acceptance/tests/acceptance_spec.rb b/spec/acceptance/tests/acceptance_spec.rb index c942c9d..2b99156 100644 --- a/spec/acceptance/tests/acceptance_spec.rb +++ b/spec/acceptance/tests/acceptance_spec.rb @@ -1,92 +1,92 @@ require 'spec_helper_acceptance' require 'helpers/acceptance/tests/basic_shared_examples.rb' require 'helpers/acceptance/tests/template_shared_examples.rb' require 'helpers/acceptance/tests/removal_shared_examples.rb' require 'helpers/acceptance/tests/pipeline_shared_examples.rb' require 'helpers/acceptance/tests/plugin_shared_examples.rb' require 'helpers/acceptance/tests/plugin_upgrade_shared_examples.rb' require 'helpers/acceptance/tests/snapshot_repository_shared_examples.rb' require 'helpers/acceptance/tests/datadir_shared_examples.rb' require 'helpers/acceptance/tests/package_url_shared_examples.rb' require 'helpers/acceptance/tests/hiera_shared_examples.rb' require 'helpers/acceptance/tests/usergroup_shared_examples.rb' require 'helpers/acceptance/tests/security_shared_examples.rb' describe "elasticsearch v#{v[:elasticsearch_full_version]} class" do es_config = { 'http.port' => 9200, 'node.name' => 'elasticsearch01' } let(:elastic_repo) { not v[:is_snapshot] } let(:manifest) do package = if not v[:is_snapshot] <<-MANIFEST # Hard version set here due to plugin incompatibilities. version => '#{v[:elasticsearch_full_version]}', MANIFEST else <<-MANIFEST manage_repo => false, package_url => '#{v[:snapshot_package]}', MANIFEST end <<-MANIFEST api_timeout => 60, config => { 'cluster.name' => '#{v[:cluster_name]}', 'http.bind_host' => '0.0.0.0', #{es_config.map { |k, v| " '#{k}' => '#{v}'," }.join("\n")} }, jvm_options => [ '-Xms128m', '-Xmx128m', ], oss => #{v[:oss]}, #{package} MANIFEST end context 'testing with' do describe 'simple config' do include_examples('basic acceptance tests', es_config) end include_examples('module removal', es_config) end include_examples('template operations', es_config, v[:template]) include_examples('pipeline operations', es_config, v[:pipeline]) include_examples('plugin acceptance tests', es_config, v[:elasticsearch_plugins]) unless v[:elasticsearch_plugins].empty? # # Only pre-5.x versions supported versions differing from core ES # if semver(v[:elasticsearch_full_version]) < semver('5.0.0') # include_examples( # 'plugin upgrade acceptance tests', # :name => 'kopf', # :initial => '2.0.1', # :upgraded => '2.1.2', # :repository => 'lmenezes/elasticsearch' # ) # end - # include_examples 'snapshot repository acceptance tests' + include_examples('snapshot repository acceptance tests') # include_examples 'datadir acceptance tests' # # Skip this for snapshot testing, as we only have package files anyway. # include_examples 'package_url acceptance tests' unless v[:is_snapshot] # include_examples 'hiera acceptance tests', v[:elasticsearch_plugins] # include_examples 'user/group acceptance tests' # # Security-related tests (shield/x-pack). # # # # Skip OSS-only distributions since they do not bundle x-pack, and skip # # snapshots since we they don't recognize prod licenses. # include_examples 'security acceptance tests', instances unless v[:oss] or v[:is_snapshot] end diff --git a/spec/helpers/acceptance/tests/basic_shared_examples.rb b/spec/helpers/acceptance/tests/basic_shared_examples.rb index 1f072f9..e05ff09 100644 --- a/spec/helpers/acceptance/tests/basic_shared_examples.rb +++ b/spec/helpers/acceptance/tests/basic_shared_examples.rb @@ -1,65 +1,66 @@ require 'json' require 'helpers/acceptance/tests/manifest_shared_examples' -shared_examples 'basic acceptance tests' do |config| - include_examples 'manifest application' +shared_examples 'basic acceptance tests' do |es_config| + include_examples('manifest application') describe package("elasticsearch#{v[:oss] ? '-oss' : ''}") do it { should be_installed } end %w[ /etc/elasticsearch /usr/share/elasticsearch /var/lib/elasticsearch ].each do |dir| describe file(dir) do it { should be_directory } end end describe 'resources' do describe service('elasticsearch') do - it { send(config.empty? ? :should_not : :should, be_enabled) } - it { send(config.empty? ? :should_not : :should, be_running) } + it { send(es_config.empty? ? :should_not : :should, be_enabled) } + it { send(es_config.empty? ? :should_not : :should, be_running) } end - unless config.empty? + unless es_config.empty? describe file(pid_file) do it { should be_file } its(:content) { should match(/[0-9]+/) } end describe file('/etc/elasticsearch/elasticsearch.yml') do it { should be_file } - it { should contain "name: #{config['node.name']}" } + it { should contain "name: #{es_config['node.name']}" } end end - unless config.empty? - describe port(config['http.port']) do + unless es_config.empty? + es_port = es_config['http.port'] + describe port(es_port) do it 'open', :with_retries do should be_listening end end describe server :container do - describe http("http://localhost:#{config['http.port']}/_nodes/_local") do + describe http("http://localhost:#{es_port}/_nodes/_local") do it 'serves requests', :with_retries do expect(response.status).to eq(200) end it 'uses the default data path', :with_retries do json = JSON.parse(response.body)['nodes'].values.first data_dir = ['/var/lib/elasticsearch'] expect( json['settings']['path'] ).to include( 'data' => data_dir ) end end end end end end diff --git a/spec/helpers/acceptance/tests/snapshot_repository_shared_examples.rb b/spec/helpers/acceptance/tests/snapshot_repository_shared_examples.rb index 3eed58d..abd329f 100644 --- a/spec/helpers/acceptance/tests/snapshot_repository_shared_examples.rb +++ b/spec/helpers/acceptance/tests/snapshot_repository_shared_examples.rb @@ -1,55 +1,81 @@ require 'json' require 'helpers/acceptance/tests/manifest_shared_examples' # Main entrypoint for snapshot tests shared_examples 'snapshot repository acceptance tests' do describe 'elasticsearch::snapshot_repository', :with_cleanup do + es_config = { + 'http.port' => 9200, + 'node.name' => 'elasticsearchSnapshot01', + 'path.repo' => '/var/lib/elasticsearch' + } + + # Override the manifest in order to populate 'path.repo' + let(:manifest) do + package = if not v[:is_snapshot] + <<-MANIFEST + # Hard version set here due to plugin incompatibilities. + version => '#{v[:elasticsearch_full_version]}', + MANIFEST + else + <<-MANIFEST + manage_repo => false, + package_url => '#{v[:snapshot_package]}', + MANIFEST + end + + <<-MANIFEST + api_timeout => 60, + config => { + 'cluster.name' => '#{v[:cluster_name]}', + 'http.bind_host' => '0.0.0.0', + #{es_config.map { |k, v| " '#{k}' => '#{v}'," }.join("\n")} + }, + jvm_options => [ + '-Xms128m', + '-Xmx128m', + ], + oss => #{v[:oss]}, + #{package} + MANIFEST + end + let(:manifest_class_parameters) { 'restart_on_change => true' } let(:extra_manifest) do <<-MANIFEST elasticsearch::snapshot_repository { 'backup': ensure => 'present', api_timeout => 60, location => '/var/lib/elasticsearch/backup', max_restore_rate => '20mb', max_snapshot_rate => '80mb', - require => Elasticsearch::Instance['es-01'] } MANIFEST end - instance = { - 'es-01' => { - 'config' => { - 'http.port' => 9200, - 'path.repo' => '/var/lib/elasticsearch' - } - } - } - instance['es-01']['config']['path.repo'] = [instance['es-01']['config']['path.repo']] if v[:elasticsearch_major_version] > 2 - - include_examples('manifest application', instance) + include_examples('manifest application', es_config) - describe port(9200) do + es_port = es_config['http.port'] + describe port(es_port) do it 'open', :with_retries do should be_listening end end describe server :container do describe http( - 'http://localhost:9200/_snapshot/backup' + "http://localhost:#{es_port}/_snapshot/backup" ) do it 'returns the snapshot repository', :with_retries do expect(JSON.parse(response.body)['backup']) .to include('settings' => a_hash_including( - 'location' => '/var/lib/elasticsearch/backup', - 'max_restore_rate' => '20mb', - 'max_snapshot_rate' => '80mb' + 'location' => '/var/lib/elasticsearch/backup', + 'max_restore_rate' => '20mb', + 'max_snapshot_rate' => '80mb' )) end end end end end