travis-api/lib/travis/model/job/test.rb
Aakriti Gupta 65f1a29d86 Move travis-core files from /vendor to /lib.
- Re-factor
- Remove code for notifications
- Remove addons
- Remove travis-core gem.
- Ignore logs directory only
- Move core tests to spec/lib
2016-07-20 11:22:25 +02:00

100 lines
2.5 KiB
Ruby

require 'active_support/core_ext/hash/slice'
require 'simple_states'
class Job
# Executes a test job (i.e. runs a test suite) remotely and keeps tabs about
# state changes throughout its lifecycle in the database.
#
# Job::Test belongs to a Build as part of the build matrix and will be
# created with the Build.
class Test < Job
FINISHED_STATES = [:passed, :failed, :errored, :canceled]
FAILED_STATES = [:failed, :errored, :canceled]
include SimpleStates, Travis::Event
states :created, :queued, :received, :started, :passed, :failed, :errored, :canceled
event :receive, to: :received
event :start, to: :started
event :finish, to: :finished
event :reset, to: :created, unless: :created?
event :cancel, to: :canceled, if: :cancelable?
event :all, after: [:propagate]
def enqueue # TODO rename to queue and make it an event, simple_states should support that now
update_attributes!(state: :queued, queued_at: Time.now.utc)
end
def receive(data = {})
log.update_attributes!(content: '', removed_at: nil, removed_by: nil) # TODO this should be in a restart method, right?
data = data.symbolize_keys.slice(:received_at, :worker)
data.each { |key, value| send(:"#{key}=", value) }
end
def start(data = {})
data = data.symbolize_keys.slice(:started_at)
data.each { |key, value| send(:"#{key}=", value) }
end
def finish(data = {})
data = data.symbolize_keys.slice(:state, :finished_at)
data.each { |key, value| send(:"#{key}=", value) }
end
def reset(*)
self.state = :created
attrs = %w(started_at queued_at finished_at worker)
attrs.each { |attr| write_attribute(attr, nil) }
if log
log.clear!
else
build_log
end
annotations.destroy_all
end
def cancel
self.canceled_at = Time.now
self.finished_at = Time.now
save!
end
def cancelable?
!finished?
end
def resetable?
finished? && !invalid_config?
end
def invalid_config?
config[:".result"] == "parse_error"
end
def finished?
FINISHED_STATES.include?(state.to_sym)
end
def finished_unsuccessfully?
FAILED_STATES.include?(state.to_sym)
end
def passed?
state.to_s == "passed"
end
def failed?
state.to_s == "failed"
end
def unknown?
state == nil
end
delegate :id, :content, :to => :log, :prefix => true, :allow_nil => true
end
end