logstash/qa/integration/framework/helpers.rb
João Duarte e9c9865f40
Add apache and elastic license headers to source code files (#11673)
* add license header to ruby and java files
* add license header to erb and rake files
* add license headers to gradle files
2020-03-11 11:53:38 +00:00

125 lines
3 KiB
Ruby

# 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.
# Helper module for all tests
require "flores/random"
require "fileutils"
require "zip"
require "stud/temporary"
require "socket"
require "ostruct"
def wait_for_port(port, retry_attempts)
tries = retry_attempts
while tries > 0
if is_port_open?(port)
break
else
sleep 1
end
tries -= 1
end
end
def is_port_open?(port)
TCPSocket.open("localhost", port) do
return true
end
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
return false
end
def send_data(port, data)
socket = TCPSocket.new("127.0.0.1", port)
socket.puts(data)
socket.flush
socket.close
end
def config_to_temp_file(config)
f = Stud::Temporary.file
f.write(config)
f.close
f.path
end
def random_port
# 9600-9700 is reserved in Logstash HTTP server, so we don't want that
Flores::Random.integer(9701..15000)
end
class Pack
PLUGINS_PATH = "logstash"
DEPENDENCIES_PATH = File.join("logstash", "dependencies")
GEM_EXTENSION = ".gem"
def initialize(target)
@target = target
end
def plugins
@plugins ||= extract_gems_data(File.join(@target, PLUGINS_PATH))
end
def dependencies
@dependencies ||= extract_gems_data(File.join(@target, DEPENDENCIES_PATH))
end
def glob_gems
"*#{GEM_EXTENSION}"
end
def extract_gems_data(path)
Dir.glob(File.join(path, glob_gems)).collect { |gem_file| extract_gem_data_from_file(gem_file) }
end
def extract_gem_data_from_file(gem_file)
gem = File.basename(gem_file.downcase, GEM_EXTENSION)
parts = gem.split("-")
if gem.match(/java/)
platform = parts.pop
version = parts.pop
name = parts.join("-")
OpenStruct.new(:name => name, :version => version, :platform => platform)
else
version = parts.pop
name = parts.join("-")
OpenStruct.new(:name => name, :version => version, :platform => nil)
end
end
end
def extract(source, target, pattern = nil)
raise "Directory #{target} exist" if ::File.exist?(target)
Zip::File.open(source) do |zip_file|
zip_file.each do |file|
path = ::File.join(target, file.name)
FileUtils.mkdir_p(::File.dirname(path))
zip_file.extract(file, path) if pattern.nil? || pattern =~ file.name
end
end
end
def unpack(zip)
target = Stud::Temporary.pathname
extract(zip, target)
Pack.new(target)
end