Sha256: dcdc962b4cac56e0b5bb7b907e63069a216fc68615c9a1c116d89d7dc17e6f30

Contents?: true

Size: 1.98 KB

Versions: 1

Compression:

Stored size: 1.98 KB

Contents

module Mutant
  class Runner
    # Mutation killing worker receiving work from parent
    class Worker
      include Adamantium::Flat, Anima.new(:config, :id, :parent)

      private_class_method :new

      # Run worker
      #
      # @param [Hash<Symbol, Object] attributes
      #
      # @return [Actor::Sender]
      #
      # @api private
      #
      def self.run(attributes)
        attributes.fetch(:config).actor_env.spawn do |actor|
          worker = new(attributes)
          worker.send(:run, actor)
        end
      end

    private

      # Worker loop
      #
      # @return [self]
      #
      # @api private
      #
      # rubocop:disable Lint/Loop
      #
      def run(actor)
        begin
          parent.call(Actor::Message.new(:ready, actor.sender))
        end until handle(actor.receiver.call)
      end

      # Handle job
      #
      # @param [Message] message
      #
      # @return [Boolean]
      #
      # @api private
      #
      def handle(message)
        type, payload = message.type, message.payload
        case message.type
        when :job
          handle_job(payload)
          nil
        when :stop
          true
        else
          fail Actor::ProtocolError, "Unknown command: #{type.inspect}"
        end
      end

      # Handle mutation
      #
      # @param [Job] job
      #
      # @return [undefined]
      #
      # @api private
      #
      def handle_job(job)
        parent.call(Actor::Message.new(:result, JobResult.new(job: job, result: run_mutation(job))))
      end

      # Run mutation
      #
      # @param [Mutation] mutation
      #
      # @return [Report::Mutation]
      #
      # @api private
      #
      def run_mutation(job)
        mutation = job.mutation
        test_result = mutation.kill(config.isolation, config.integration)
        Result::Mutation.new(
          index:       job.index,
          mutation:    mutation,
          test_result: test_result
        )
      end

    end # Worker
  end # Runner
end # Mutant

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mutant-0.7.1 lib/mutant/runner/worker.rb