-
Notifications
You must be signed in to change notification settings - Fork 1.4k
/
Copy pathhelper.rb
155 lines (141 loc) · 3.14 KB
/
helper.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# simplecov must be loaded before any of target code
if ENV['SIMPLE_COV']
require 'simplecov'
if defined?(SimpleCov::SourceFile)
mod = SimpleCov::SourceFile
def mod.new(*args, &block)
m = allocate
m.instance_eval do
begin
initialize(*args, &block)
rescue Encoding::UndefinedConversionError
@src = "".force_encoding('UTF-8')
end
end
m
end
end
unless SimpleCov.running
SimpleCov.start do
add_filter '/test/'
add_filter '/gems/'
end
end
end
# Some tests use Hash instead of Element for configure.
# We should rewrite these tests in the future and remove this ad-hoc code
class Hash
def corresponding_proxies
@corresponding_proxies ||= []
end
def to_masked_element
self
end
end
require 'rr'
require 'test/unit'
require 'test/unit/rr'
require 'fileutils'
require 'fluent/config/element'
require 'fluent/log'
require 'fluent/test'
require 'fluent/test/helpers'
require 'fluent/plugin/base'
require 'fluent/plugin_id'
require 'fluent/plugin_helper'
require 'fluent/msgpack_factory'
require 'fluent/time'
require 'serverengine'
require_relative 'helpers/fuzzy_assert'
require_relative 'helpers/process_extenstion'
module Fluent
module Plugin
class TestBase < Base
# a base plugin class, but not input nor output
# mainly for helpers and owned plugins
include PluginId
include PluginLoggerMixin
include PluginHelper::Mixin
end
end
end
unless defined?(Test::Unit::AssertionFailedError)
class Test::Unit::AssertionFailedError < StandardError
end
end
include Fluent::Test::Helpers
def unused_port(num = 1, protocol: :tcp, bind: "0.0.0.0")
case protocol
when :tcp
unused_port_tcp(num)
when :udp
unused_port_udp(num, bind: bind)
else
raise ArgumentError, "unknown protocol: #{protocol}"
end
end
def unused_port_tcp(num = 1)
ports = []
sockets = []
num.times do
s = TCPServer.open(0)
sockets << s
ports << s.addr[1]
end
sockets.each{|s| s.close }
if num == 1
return ports.first
else
return *ports
end
end
PORT_RANGE_AVAILABLE = (1024...65535)
def unused_port_udp(num = 1, bind: "0.0.0.0")
family = IPAddr.new(IPSocket.getaddress(bind)).ipv4? ? ::Socket::AF_INET : ::Socket::AF_INET6
ports = []
sockets = []
while ports.size < num
port = rand(PORT_RANGE_AVAILABLE)
u = UDPSocket.new(family)
if (u.bind(bind, port) rescue nil)
ports << port
sockets << u
else
u.close
end
end
sockets.each{|s| s.close }
if num == 1
return ports.first
else
return *ports
end
end
def waiting(seconds, logs: nil, plugin: nil)
begin
Timeout.timeout(seconds) do
yield
end
rescue Timeout::Error
if logs
STDERR.print(*logs)
elsif plugin
STDERR.print(*plugin.log.out.logs)
end
raise
end
end
def ipv6_enabled?
require 'socket'
begin
TCPServer.open("::1", 0)
true
rescue
false
end
end
dl_opts = {}
dl_opts[:log_level] = ServerEngine::DaemonLogger::WARN
logdev = Fluent::Test::DummyLogDevice.new
logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
$log ||= Fluent::Log.new(logger)