120 lines
4.5 KiB
Ruby
120 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
|
|
|
|
|
|
if(ENV['WORKSPACE'])
|
|
#jenkin mode
|
|
working_directory = ENV['WORKSPACE']
|
|
else
|
|
#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)
|