mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-05 20:48:22 +00:00
9a37922e57
Local mode modification done previously faulty. env[‘WORKSPACE’ is not the sufficient discriminator to see if script is running under Jenkins. This fails on the Jenkins parent jobs since those type of jobs don’t have WORKSPACE set.
117 lines
4.5 KiB
Ruby
117 lines
4.5 KiB
Ruby
#!/usr/bin/env ruby
|
|
# Licensed to Elasticsearch under one or more contributor
|
|
# license agreements. See the NOTICE file distributed with
|
|
# this work for additional information regarding copyright
|
|
# ownership. Elasticsearch 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
|
|
|
|
#
|
|
# generate property file for the jdk randomization test
|
|
#
|
|
#
|
|
require 'yaml'
|
|
|
|
class JDKSelector
|
|
attr_reader :directory, :jdk_list
|
|
|
|
def initialize(directory)
|
|
@directory = directory
|
|
end
|
|
|
|
# get selection of available jdks from jenkins automatic install directory
|
|
def get_jdk
|
|
@jdk_list = Dir.entries(directory).select do |x|
|
|
x.chars.first == 'J'
|
|
end.map do |y|
|
|
File.join(directory, y)
|
|
end
|
|
self
|
|
end
|
|
|
|
# do ranomize selection from a given array
|
|
def select_one(selection_array = nil)
|
|
selection_array ||= @jdk_list
|
|
selection_array[rand(selection_array.size)]
|
|
get_random_one(selection_array)
|
|
end
|
|
end
|
|
|
|
def get_random_one(data_array)
|
|
data_array[rand(data_array.size)]
|
|
end
|
|
|
|
# given a jdk directory selection, generate relevant environment variables
|
|
def get_env_matrix(data_array)
|
|
|
|
#refactoring target
|
|
es_test_jvm_option1 = get_random_one(['-server']) #only server for now get_random_one(['-client', '-server'])
|
|
greater_than_six = File.basename([*data_array].first).split(/[^0-9]/)[-1].to_i > 6
|
|
es_test_jvm_option2 = greater_than_six ? get_random_one(['-XX:+UseConcMarkSweepGC', '-XX:+UseParallelGC', '-XX:+UseSerialGC',
|
|
'-XX:+UseG1GC']) :
|
|
get_random_one(['-XX:+UseConcMarkSweepGC', '-XX:+UseParallelGC', '-XX:+UseSerialGC'])
|
|
|
|
es_test_jvm_option3 = get_random_one(['-XX:+UseCompressedOops', '-XX:-UseCompressedOops'])
|
|
es_node_mode = get_random_one(['local', 'network'])
|
|
tests_nightly = get_random_one([true, false])
|
|
tests_nightly = get_random_one([false]) #bug
|
|
|
|
test_assert_off = (rand(10) == 9) #10 percent chance turning it off
|
|
tests_security_manager = (rand(10) != 9) #10 percent chance running without security manager
|
|
arg_line = [es_test_jvm_option1, es_test_jvm_option2, es_test_jvm_option3]
|
|
[*data_array].map do |x|
|
|
data_hash = {
|
|
'PATH' => File.join(x,'bin') + ':' + ENV['PATH'],
|
|
'JAVA_HOME' => x,
|
|
'BUILD_DESC' => "%s,%s,%s%s,%s %s%s%s"%[File.basename(x), es_node_mode, tests_nightly ? 'nightly,':'',
|
|
es_test_jvm_option1[1..-1], es_test_jvm_option2[4..-1], es_test_jvm_option3[4..-1],
|
|
test_assert_off ? ',assert off' : '', tests_security_manager ? ', security manager enabled' : ''],
|
|
'es.node.mode' => es_node_mode,
|
|
'tests.nightly' => tests_nightly,
|
|
'tests.security.manager' => tests_security_manager,
|
|
'tests.jvm.argline' => arg_line.join(" "),
|
|
}
|
|
data_hash['tests.assertion.disabled'] = 'org.elasticsearch' if test_assert_off
|
|
data_hash
|
|
end
|
|
end
|
|
|
|
# pick first element out of array of hashes, generate write java property file
|
|
def generate_property_file(directory, data)
|
|
#array transformation
|
|
content = data.first.map do |key, value|
|
|
"%s=%s"%[key, value]
|
|
end
|
|
file_name = (ENV['BUILD_ID'] + ENV['BUILD_NUMBER']) || 'prop' rescue 'prop'
|
|
file_name = file_name.split(File::SEPARATOR).first + '.txt'
|
|
File.open(File.join(directory, file_name), 'w') do |file|
|
|
file.write(content.join("\n"))
|
|
end
|
|
end
|
|
|
|
working_directory = ENV['WORKSPACE'] || '/var/tmp'
|
|
unless(ENV['BUILD_ID'])
|
|
#local mode set up fake environment
|
|
test_directory = 'tools/hudson.model.JDK/'
|
|
unless(File.exist?(test_directory))
|
|
puts "running local mode, setting up running environment"
|
|
puts "properties are written to file prop.txt"
|
|
system("mkdir -p %sJDK{6,7}"%test_directory)
|
|
end
|
|
working_directory = ENV['PWD']
|
|
end
|
|
# jenkins sets pwd prior to execution
|
|
jdk_selector = JDKSelector.new(File.join(ENV['PWD'],'tools','hudson.model.JDK'))
|
|
environment_matrix = get_env_matrix(jdk_selector.get_jdk.select_one)
|
|
|
|
generate_property_file(working_directory, environment_matrix)
|