module Fluent::Test::Helpers

Public Instance Methods

assert_equal_event_time(expected, actual, message = nil) click to toggle source

See “Example Custom Assertion: test-unit.github.io/test-unit/en/Test/Unit/Assertions.html

# File lib/fluent/test/helpers.rb, line 25
      def assert_equal_event_time(expected, actual, message = nil)
        expected_s = "#{Time.at(expected.sec)} (nsec #{expected.nsec})"
        actual_s   = "#{Time.at(actual.sec)  } (nsec #{actual.nsec})"
        message = build_message(message, <<EOT, expected_s, actual_s)
<?> expected but was
<?>.
EOT
        assert_block(message) do
          expected.is_a?(Fluent::EventTime) && actual.is_a?(Fluent::EventTime) && expected.sec == actual.sec && expected.nsec == actual.nsec
        end
      end
capture_log(driver) { || ... } click to toggle source

Use this method with v0.12 compatibility layer.

For v0.14 API, use `driver.logs` instead.

# File lib/fluent/test/helpers.rb, line 115
def capture_log(driver)
  tmp = driver.instance.log.out
  driver.instance.log.out = StringIO.new
  yield
  return driver.instance.log.out.string
ensure
  driver.instance.log.out = tmp
end
capture_stdout() { || ... } click to toggle source
# File lib/fluent/test/helpers.rb, line 124
def capture_stdout
  out = StringIO.new
  $stdout = out
  yield
  out.string.force_encoding('utf-8')
ensure
  $stdout = STDOUT
end
config_element(name = 'test', argument = '', params = {}, elements = []) click to toggle source
# File lib/fluent/test/helpers.rb, line 37
def config_element(name = 'test', argument = '', params = {}, elements = [])
  Fluent::Config::Element.new(name, argument, params, elements)
end
event_time(str=nil, format: nil) click to toggle source
# File lib/fluent/test/helpers.rb, line 41
def event_time(str=nil, format: nil)
  if str
    if format
      Fluent::EventTime.from_time(Time.strptime(str, format))
    else
      Fluent::EventTime.parse(str)
    end
  else
    Fluent::EventTime.now
  end
end
msgpack(type) click to toggle source
# File lib/fluent/test/helpers.rb, line 97
def msgpack(type)
  case type
  when :factory
    Fluent::MessagePackFactory.factory
  when :packer
    Fluent::MessagePackFactory.packer
  when :unpacker
    Fluent::MessagePackFactory.unpacker
  else
    raise ArgumentError, "unknown msgpack object type '#{type}'"
  end
end
time2str(time, localtime: false, format: nil) click to toggle source
# File lib/fluent/test/helpers.rb, line 81
def time2str(time, localtime: false, format: nil)
  if format
    if localtime
      Time.at(time).strftime(format)
    else
      Time.at(time).utc.strftime(format)
    end
  else
    if localtime
      Time.at(time).iso8601
    else
      Time.at(time).utc.iso8601
    end
  end
end
with_timezone(tz) { || ... } click to toggle source
# File lib/fluent/test/helpers.rb, line 53
def with_timezone(tz)
  oldtz, ENV['TZ'] = ENV['TZ'], tz
  yield
ensure
  ENV['TZ'] = oldtz
end
with_worker_config(root_dir: nil, workers: nil, worker_id: nil, &block) click to toggle source
# File lib/fluent/test/helpers.rb, line 60
def with_worker_config(root_dir: nil, workers: nil, worker_id: nil, &block)
  if workers
    if worker_id
      if worker_id >= workers
        raise "worker_id must be between 0 and (workers - 1)"
      end
    else
      worker_id = 0
    end
  end

  opts = {}
  opts['root_dir'] = root_dir if root_dir
  opts['workers'] = workers if workers

  ENV['SERVERENGINE_WORKER_ID'] = worker_id.to_s
  Fluent::SystemConfig.overwrite_system_config(opts, &block)
ensure
  ENV.delete('SERVERENGINE_WORKER_ID')
end