From 664546c208c406bba08b8eda2e6a600154d7232e Mon Sep 17 00:00:00 2001 From: Cristian Bica Date: Tue, 5 Aug 2014 09:05:14 +0300 Subject: Integration testing --- test/support/integration/adapters/backburner.rb | 15 +++++++++++ test/support/integration/adapters/delayed_job.rb | 14 ++++++++++ test/support/integration/adapters/qu.rb | 14 ++++++++++ test/support/integration/adapters/que.rb | 19 ++++++++++++++ test/support/integration/adapters/queue_classic.rb | 21 +++++++++++++++ test/support/integration/adapters/resque.rb | 18 +++++++++++++ test/support/integration/adapters/sidekiq.rb | 19 ++++++++++++++ test/support/integration/adapters/sneakers.rb | 18 +++++++++++++ test/support/integration/adapters/sucker_punch.rb | 5 ++++ test/support/integration/helper.rb | 12 +++++++++ test/support/integration/jobs_manager.rb | 23 +++++++++++++++++ test/support/integration/test_case_helpers.rb | 30 ++++++++++++++++++++++ 12 files changed, 208 insertions(+) create mode 100644 test/support/integration/adapters/backburner.rb create mode 100644 test/support/integration/adapters/delayed_job.rb create mode 100644 test/support/integration/adapters/qu.rb create mode 100644 test/support/integration/adapters/que.rb create mode 100644 test/support/integration/adapters/queue_classic.rb create mode 100644 test/support/integration/adapters/resque.rb create mode 100644 test/support/integration/adapters/sidekiq.rb create mode 100644 test/support/integration/adapters/sneakers.rb create mode 100644 test/support/integration/adapters/sucker_punch.rb create mode 100644 test/support/integration/helper.rb create mode 100644 test/support/integration/jobs_manager.rb create mode 100644 test/support/integration/test_case_helpers.rb (limited to 'test/support/integration') diff --git a/test/support/integration/adapters/backburner.rb b/test/support/integration/adapters/backburner.rb new file mode 100644 index 0000000000..7271d50a45 --- /dev/null +++ b/test/support/integration/adapters/backburner.rb @@ -0,0 +1,15 @@ +module BackburnerJobsManager + def clear_jobs + Backburner::Worker.connection.tubes.all.map &:clear + end + + def start_workers + @thread = Thread.new { Backburner.work "active-jobs-default" } + end + + def stop_workers + @thread.kill + end + +end + diff --git a/test/support/integration/adapters/delayed_job.rb b/test/support/integration/adapters/delayed_job.rb new file mode 100644 index 0000000000..3e55933438 --- /dev/null +++ b/test/support/integration/adapters/delayed_job.rb @@ -0,0 +1,14 @@ +module DelayedJobJobsManager + def clear_jobs + Delayed::Job.delete_all + end + + def start_workers + @worker = Delayed::Worker.new(quiet: false, sleep_delay: 0.5) + @thread = Thread.new { @worker.start } + end + + def stop_workers + @worker.stop + end +end diff --git a/test/support/integration/adapters/qu.rb b/test/support/integration/adapters/qu.rb new file mode 100644 index 0000000000..12d063ea0d --- /dev/null +++ b/test/support/integration/adapters/qu.rb @@ -0,0 +1,14 @@ +module QuJobsManager + def clear_jobs + Qu.clear "active_jobs_default" + end + + def start_workers + @thread = Thread.new { Qu::Worker.new("active_jobs_default").start } + end + + def stop_workers + @thread.kill + end +end + diff --git a/test/support/integration/adapters/que.rb b/test/support/integration/adapters/que.rb new file mode 100644 index 0000000000..f15c9af910 --- /dev/null +++ b/test/support/integration/adapters/que.rb @@ -0,0 +1,19 @@ +module QueJobsManager + def clear_jobs + Que.clear! + end + + def start_workers + @thread = Thread.new do + loop do + Que::Job.work("active_jobs_default") + sleep 0.5 + end + end + end + + def stop_workers + @thread.kill + end +end + diff --git a/test/support/integration/adapters/queue_classic.rb b/test/support/integration/adapters/queue_classic.rb new file mode 100644 index 0000000000..3b24eca5b9 --- /dev/null +++ b/test/support/integration/adapters/queue_classic.rb @@ -0,0 +1,21 @@ +module QC; WAIT_TIME = 0.5; end + +module QueueClassicJobsManager + def clear_jobs + # disabling this as it locks + # QC::Queue.new("active_jobs_default").delete_all + end + + def start_workers + @pid = fork do + QC::Conn.connection = QC::Conn.connect + worker = QC::Worker.new(q_name: 'active_jobs_default') + worker.start + end + end + + def stop_workers + Process.kill 'HUP', @pid + end +end + diff --git a/test/support/integration/adapters/resque.rb b/test/support/integration/adapters/resque.rb new file mode 100644 index 0000000000..b9811bd3e1 --- /dev/null +++ b/test/support/integration/adapters/resque.rb @@ -0,0 +1,18 @@ +module ResqueJobsManager + def clear_jobs + Resque.queues.each { |queue_name| Resque.redis.del "queue:#{queue_name}" } + Resque.redis.keys("delayed:*").each { |key| Resque.redis.del "#{key}" } + Resque.redis.del "delayed_queue_schedule" + end + + def start_workers + @thread = Thread.new do + Resque::Worker.new("*").work(0.5) + end + end + + def stop_workers + @thread.kill + end +end + diff --git a/test/support/integration/adapters/sidekiq.rb b/test/support/integration/adapters/sidekiq.rb new file mode 100644 index 0000000000..d3b7d15614 --- /dev/null +++ b/test/support/integration/adapters/sidekiq.rb @@ -0,0 +1,19 @@ +require 'sidekiq/launcher' +require 'sidekiq/api' + +module SidekiqJobsManager + def clear_jobs + Sidekiq::Queue.new("active_jobs_default").clear + end + + def start_workers + options = {:queues=>["active_jobs_default"], :concurrency=>1, :environment=>"test", :timeout=>8, :daemon=>true, :strict=>true} + @launcher = Sidekiq::Launcher.new(options) + @launcher.run + end + + def stop_workers + @launcher.stop + end +end + diff --git a/test/support/integration/adapters/sneakers.rb b/test/support/integration/adapters/sneakers.rb new file mode 100644 index 0000000000..5dcab68515 --- /dev/null +++ b/test/support/integration/adapters/sneakers.rb @@ -0,0 +1,18 @@ +require 'sneakers/runner' + +module SneakersJobsManager + def clear_jobs + end + + def start_workers + cmd = %{cd #{Rails.root.to_s} && (RAILS_ENV=test AJADAPTER=sneakers WORKERS=ActiveJob::QueueAdapters::SneakersAdapter::JobWrapper bundle exec rake --trace sneakers:run)} + `#{cmd}` + while !Rails.root.join("tmp/sneakers.pid").exist? do + sleep 0.5 + end + end + + def stop_workers + Process.kill 'TERM', File.open(Rails.root.join("tmp/sneakers.pid").to_s).read.to_i + end +end diff --git a/test/support/integration/adapters/sucker_punch.rb b/test/support/integration/adapters/sucker_punch.rb new file mode 100644 index 0000000000..317f9c80fd --- /dev/null +++ b/test/support/integration/adapters/sucker_punch.rb @@ -0,0 +1,5 @@ +module SuckerPunchJobsManager + def clear_jobs + end +end + diff --git a/test/support/integration/helper.rb b/test/support/integration/helper.rb new file mode 100644 index 0000000000..cb94e7cfb5 --- /dev/null +++ b/test/support/integration/helper.rb @@ -0,0 +1,12 @@ +ENV["RAILS_ENV"] = "test" +require File.expand_path("../../../dummy/config/environment.rb", __FILE__) +require "rails/test_help" +Rails.backtrace_cleaner.remove_silencers! + +require_relative 'test_case_helpers' +ActiveSupport::TestCase.send(:include, TestCaseHelpers) + +JobsManager.current_manager.setup +JobsManager.current_manager.start_workers +Minitest.after_run { JobsManager.current_manager.stop_workers } + diff --git a/test/support/integration/jobs_manager.rb b/test/support/integration/jobs_manager.rb new file mode 100644 index 0000000000..1da74193b1 --- /dev/null +++ b/test/support/integration/jobs_manager.rb @@ -0,0 +1,23 @@ +class JobsManager + @@managers = {} + attr :adapter_name + + def self.current_manager + @@managers[ENV['AJADAPTER']] ||= new(ENV['AJADAPTER']) + end + + def initialize(adapter_name) + @adapter_name = adapter_name + require_relative "adapters/#{adapter_name}" + extend "#{adapter_name.camelize}JobsManager".constantize + end + + def setup + end + + def start_workers + end + + def stop_workers + end +end diff --git a/test/support/integration/test_case_helpers.rb b/test/support/integration/test_case_helpers.rb new file mode 100644 index 0000000000..9a5eea0783 --- /dev/null +++ b/test/support/integration/test_case_helpers.rb @@ -0,0 +1,30 @@ +require 'active_support/concern' +require 'support/integration/jobs_manager' + +module TestCaseHelpers + extend ActiveSupport::Concern + + included do + self.use_transactional_fixtures = false + + setup do + clear_jobs + end + + teardown do + clear_jobs + FileUtils.rm_rf Dir[Dummy::Application.root.join("tmp/AJ-*")] + end + end + + protected + + def jobs_manager + JobsManager.current_manager + end + + def clear_jobs + jobs_manager.clear_jobs + end + +end -- cgit v1.2.3