+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
require 'test_helper'
require 'helpers/git_test_helper'
require 'helpers/docker_migration_helper'
'locator' => BAD_COLLECTION,
}.each_pair do |spec_type, image_spec|
test "Job validation fails with nonexistent Docker image #{spec_type}" do
+ Rails.configuration.remote_hosts = {}
job = Job.new job_attrs(runtime_constraints:
{'docker_image' => image_spec})
assert(job.invalid?, "nonexistent Docker image #{spec_type} was valid")
{runtime_constraints: []},
{tasks_summary: ""},
{tasks_summary: []},
- {script_version: "no/branch/could/ever/possibly/have/this/name"},
].each do |invalid_attrs|
test "validation failures set error messages: #{invalid_attrs.to_json}" do
# Ensure valid_attrs doesn't produce errors -- otherwise we will
# not know whether errors reported below are actually caused by
# invalid_attrs.
- Job.create! job_attrs
+ Job.new(job_attrs).save!
- job = Job.new(job_attrs(invalid_attrs))
- assert_raises(ActiveRecord::RecordInvalid, ArgumentError, RuntimeError,
- "save! did not raise the expected exception") do
- job.save!
+ err = assert_raises(ArgumentError) do
+ Job.new(job_attrs(invalid_attrs)).save!
end
- assert_not_empty job.errors, "validation failure did not provide errors"
+ assert_match /parameters|constraints|summary/, err.message
+ end
+ end
+
+ test "invalid script_version" do
+ invalid = {
+ script_version: "no/branch/could/ever/possibly/have/this/name",
+ }
+ err = assert_raises(ActiveRecord::RecordInvalid) do
+ Job.new(job_attrs(invalid)).save!
end
+ assert_match /Script version .* does not resolve to a commit/, err.message
end
[
assert_equal Job.deep_sort_hash(a).to_json, Job.deep_sort_hash(b).to_json
end
- test 'find_reusable' do
+ test 'find_reusable without logging' do
+ Rails.logger.expects(:info).never
+ try_find_reusable
+ end
+
+ test 'find_reusable with logging' do
+ Rails.configuration.log_reuse_decisions = true
+ Rails.logger.expects(:info).at_least(3)
+ try_find_reusable
+ end
+
+ def try_find_reusable
foobar = jobs(:foobar)
example_attrs = {
script_version: foobar.script_version,
Job.where(uuid: jobs(:job_with_latest_version).uuid).
update_all(output: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa+1')
assert_nil Job.find_reusable(example_attrs, {}, [], [users(:active)])
+
+ # ...unless config says to reuse the earlier job in such cases.
+ Rails.configuration.reuse_job_if_outputs_differ = true
+ j = Job.find_reusable(example_attrs, {}, [], [users(:active)])
+ assert_equal foobar.uuid, j.uuid
end
[
child = Job.find_by_uuid job.components.collect{|_, uuid| uuid}[0]
assert_equal Job::Cancelled, child.state
end
+
+ test 'enable legacy api configuration option = true' do
+ Rails.configuration.enable_legacy_jobs_api = true
+ check_enable_legacy_jobs_api
+ assert_equal [], Rails.configuration.disable_api_methods
+ end
+
+ test 'enable legacy api configuration option = false' do
+ Rails.configuration.enable_legacy_jobs_api = false
+ check_enable_legacy_jobs_api
+ assert_equal Disable_jobs_api_method_list, Rails.configuration.disable_api_methods
+ end
+
+ test 'enable legacy api configuration option = auto, has jobs' do
+ Rails.configuration.enable_legacy_jobs_api = "auto"
+ check_enable_legacy_jobs_api
+ assert_equal [], Rails.configuration.disable_api_methods
+ end
+
+ test 'enable legacy api configuration option = auto, no jobs' do
+ Rails.configuration.enable_legacy_jobs_api = "auto"
+ act_as_system_user do
+ Job.destroy_all
+ end
+ puts "ZZZ #{Job.count}"
+ check_enable_legacy_jobs_api
+ assert_equal Disable_jobs_api_method_list, Rails.configuration.disable_api_methods
+ end
end