X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/918e16de43e993894dcaffbe0cafa0fc1d2f16b3..02d1074b356837f1a06a25ac3dc353ecf541b444:/services/api/test/unit/job_test.rb diff --git a/services/api/test/unit/job_test.rb b/services/api/test/unit/job_test.rb index 5677776cd4..e0a4f84614 100644 --- a/services/api/test/unit/job_test.rb +++ b/services/api/test/unit/job_test.rb @@ -176,28 +176,35 @@ class JobTest < ActiveSupport::TestCase [ {script_parameters: ""}, {script_parameters: []}, - {script_parameters: {symbols: :are_not_allowed_here}}, + {script_parameters: {["foo"] => ["bar"]}}, {runtime_constraints: ""}, {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.create job_attrs(invalid_attrs) - assert_raises(ActiveRecord::RecordInvalid, ArgumentError, - "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 + [ # Each test case is of the following format # Array of parameters where each parameter is of the format: @@ -550,7 +557,18 @@ class JobTest < ActiveSupport::TestCase 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, @@ -570,6 +588,11 @@ class JobTest < ActiveSupport::TestCase 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 [