X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/45f10d80d1b584808a6e375214b5be6bc7d2a730..adfe146695a6acebe65b7953db1e8a88dc53a6b4:/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 f16c8b2ec4..3da2c836ed 100644 --- a/services/api/test/unit/job_test.rb +++ b/services/api/test/unit/job_test.rb @@ -316,7 +316,6 @@ class JobTest < ActiveSupport::TestCase assert_not_nil job1.queue_position, "Expected non-nil queue position for job1" assert_not_nil job2.queue_position, "Expected non-nil queue position for job2" - assert_not_equal job1.queue_position, job2.queue_position end SDK_MASTER = "ca68b24e51992e790f29df5cc4bc54ce1da4a1c2" @@ -441,4 +440,48 @@ class JobTest < ActiveSupport::TestCase assert_equal('077ba2ad3ea24a929091a9e6ce545c93199b8e57', internal_tag(j.uuid)) end + + test 'script_parameters_digest is independent of key order' do + j1 = Job.new(job_attrs(script_parameters: {'a' => 'a', 'ddee' => {'d' => 'd', 'e' => 'e'}})) + j2 = Job.new(job_attrs(script_parameters: {'ddee' => {'e' => 'e', 'd' => 'd'}, 'a' => 'a'})) + assert j1.valid? + assert j2.valid? + assert_equal(j1.script_parameters_digest, j2.script_parameters_digest) + end + + test 'job fixtures have correct script_parameters_digest' do + Job.all.each do |j| + d = j.script_parameters_digest + assert_equal(j.update_script_parameters_digest, d, + "wrong script_parameters_digest for #{j.uuid}") + end + end + + test 'deep_sort_hash on array of hashes' do + a = {'z' => [[{'a' => 'a', 'b' => 'b'}]]} + b = {'z' => [[{'b' => 'b', 'a' => 'a'}]]} + assert_equal Job.deep_sort_hash(a).to_json, Job.deep_sort_hash(b).to_json + end + + test 'find_reusable' do + foobar = jobs(:foobar) + example_attrs = { + script_version: foobar.script_version, + script: foobar.script, + script_parameters: foobar.script_parameters, + repository: foobar.repository, + } + + # Two matching jobs exist with identical outputs. The older one + # should be reused. + j = Job.find_reusable(example_attrs, {}, [], [users(:active)]) + assert j + assert_equal foobar.uuid, j.uuid + + # Two matching jobs exist with different outputs. Neither should + # be reused. + Job.where(uuid: jobs(:job_with_latest_version).uuid). + update_all(output: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa+1') + assert_nil Job.find_reusable(example_attrs, {}, [], [users(:active)]) + end end