module RedisTest

Constants

VERSION

Attributes

loglevel[W]
socket[RW]

Public Class Methods

cache_path() click to toggle source
# File lib/redis_test.rb, line 16
def cache_path
  "#{Dir.pwd}/tmp/cache/#{port}/"
end
clear() click to toggle source
# File lib/redis_test.rb, line 137
def clear
  socket.puts('flushall')
  socket.gets # wait for redis server to reply with "OK"
end
configure(*options) click to toggle source
# File lib/redis_test.rb, line 107
def configure(*options)
  options.flatten.each do |option|
    case option
    when :default
      ENV['REDIS_URL'] = server_url
      Redis.current = Redis.new
      RedisClassy.redis = Redis.current if defined? RedisClassy
    when :sidekiq
      Sidekiq.configure_server do |config|
        config.redis = { url: server_url, namespace: 'sidekiq' }
      end

      Sidekiq.configure_client do |config|
        config.redis = { url: server_url, namespace: 'sidekiq' }
      end

    when :ohm
      Ohm.redis = Redic.new(server_url)

    when :resque
      Resque.configure do |config|
        config.redis = "#{server_url}/resque"
      end

    else
      raise "Unable to configure #{option}"
    end
  end
end
db_filename() click to toggle source
# File lib/redis_test.rb, line 12
def db_filename
  "redis-test-#{port}.rdb"
end
find_available_port() click to toggle source
# File lib/redis_test.rb, line 142
def find_available_port
  server = TCPServer.new('127.0.0.1', 0)
  server.addr[1]
ensure
  server&.close
end
logfile() click to toggle source
# File lib/redis_test.rb, line 32
def logfile
  "#{logs_path}/redis.#{port}.log"
end
loglevel() click to toggle source
# File lib/redis_test.rb, line 36
def loglevel
  @loglevel || 'debug'
end
logs_path() click to toggle source
# File lib/redis_test.rb, line 24
def logs_path
  "#{Dir.pwd}/log"
end
pidfile() click to toggle source
# File lib/redis_test.rb, line 28
def pidfile
  "#{pids_path}/redis-test-#{port}.pid"
end
pids_path() click to toggle source
# File lib/redis_test.rb, line 20
def pids_path
  "#{Dir.pwd}/tmp/pids"
end
port() click to toggle source
# File lib/redis_test.rb, line 8
def port
  @port ||= (ENV['TEST_REDIS_PORT'] || find_available_port).to_i
end
server_url() click to toggle source
# File lib/redis_test.rb, line 103
def server_url
  "redis://localhost:#{port}"
end
start(log_to_stdout: false) click to toggle source
# File lib/redis_test.rb, line 42
def start(log_to_stdout: false)
  FileUtils.mkdir_p cache_path
  FileUtils.mkdir_p pids_path
  FileUtils.mkdir_p logs_path

  redis_options = {
    'pidfile' => pidfile,
    'port' => port,
    'timeout' => 300,
    'dbfilename' => db_filename,
    'dir' => cache_path,
    'loglevel' => loglevel,
    'databases' => 16
  }

  redis_options['logfile'] = logfile unless log_to_stdout

  redis_options_str = redis_options.map { |k, v| "#{k} #{v}" }.join('\n')

  fork do
    echo_command = mac? ? 'echo' : 'echo -e'
    system "#{echo_command} '#{redis_options_str}' | redis-server -"
  end

  wait_time_remaining = 5
  begin
    self.socket = TCPSocket.open('localhost', port)
    clear
    @started = true
  rescue Exception => e
    if wait_time_remaining > 0
      wait_time_remaining -= 0.1
      sleep 0.1
    else
      raise "Cannot start redis server in 5 seconds. Pinging server yield\n#{e.inspect}"
    end
  end while(!@started)
end
started?() click to toggle source
# File lib/redis_test.rb, line 81
def started?
  @started
end
stop() click to toggle source
# File lib/redis_test.rb, line 85
def stop
  if File.file?(pidfile) && File.readable?(pidfile)
    pid = File.read(pidfile).to_i
    if pid > 0
      Process.kill('SIGTERM', pid)
      until (begin
               Process.getpgid(pid)
             rescue StandardError
               nil
             end).nil?
        sleep 0.01
      end
    end
  end
  FileUtils.rm_f("#{cache_path}#{db_filename}")
  @started = false
end

Private Class Methods

mac?() click to toggle source
# File lib/redis_test.rb, line 153
def mac?
  `uname`.downcase.include?('darwin')
end