Sha256: 0caf3d802b93574ed664e8075953998318fb4d8cf5e121a68bfda9cbf5aec8dd

Contents?: true

Size: 1.72 KB

Versions: 6

Compression:

Stored size: 1.72 KB

Contents

# frozen_string_literal: true

module KnapsackPro
  module Runners
    module Queue
      class BaseRunner
        TerminationError = Class.new(StandardError)
        TERMINATION_SIGNALS = %w(HUP INT TERM ABRT QUIT USR1 USR2)

        @@terminate_process = false

        def self.run(args)
          raise NotImplementedError
        end

        def self.run_tests(runner, can_initialize_queue, args, exitstatus)
          raise NotImplementedError
        end

        def initialize(adapter_class)
          @allocator_builder = KnapsackPro::QueueAllocatorBuilder.new(adapter_class)
          @allocator = allocator_builder.allocator
          trap_signals
        end

        def test_file_paths(args)
          can_initialize_queue = args.fetch(:can_initialize_queue)
          executed_test_files = args.fetch(:executed_test_files)
          allocator.test_file_paths(can_initialize_queue, executed_test_files)
        end

        def test_dir
          allocator_builder.test_dir
        end

        private

        attr_reader :allocator_builder,
          :allocator

        def self.child_status
          $?
        end

        def self.handle_signal!
          raise TerminationError.new('Knapsack Pro process was terminated!') if @@terminate_process
        end

        def self.set_terminate_process
          @@terminate_process = true
        end

        def set_terminate_process
          self.class.set_terminate_process
        end

        def trap_signals
          TERMINATION_SIGNALS.each do |signal|
            Signal.trap(signal) {
              puts "#{signal} signal has been received. Terminating Knapsack Pro..."
              @@terminate_process = true
            }
          end
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
knapsack_pro-7.6.2 lib/knapsack_pro/runners/queue/base_runner.rb
knapsack_pro-7.6.1 lib/knapsack_pro/runners/queue/base_runner.rb
knapsack_pro-7.6.0 lib/knapsack_pro/runners/queue/base_runner.rb
knapsack_pro-7.1.0 lib/knapsack_pro/runners/queue/base_runner.rb
knapsack_pro-7.0.1 lib/knapsack_pro/runners/queue/base_runner.rb
knapsack_pro-7.0.0 lib/knapsack_pro/runners/queue/base_runner.rb