X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/3f8336875d5938afb6b00289e9d6c9941456b57f..0035033f6bf6db955b116e2e0cc052bc5c79d80e:/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 72b7689817..5677776cd4 100644 --- a/services/api/test/unit/job_test.rb +++ b/services/api/test/unit/job_test.rb @@ -1,7 +1,9 @@ require 'test_helper' require 'helpers/git_test_helper' +require 'helpers/docker_migration_helper' class JobTest < ActiveSupport::TestCase + include DockerMigrationHelper include GitTestHelper BAD_COLLECTION = "#{'f' * 32}+0" @@ -411,6 +413,73 @@ class JobTest < ActiveSupport::TestCase "Job with SDK constraint valid after clearing Docker image") end + test "use migrated docker image if requesting old-format image by tag" do + Rails.configuration.docker_image_formats = ['v2'] + add_docker19_migration_link + job = Job.create!( + job_attrs( + script: 'foo', + runtime_constraints: { + 'docker_image' => links(:docker_image_collection_tag).name})) + assert(job.valid?) + assert_equal(job.docker_image_locator, collections(:docker_image_1_12).portable_data_hash) + end + + test "use migrated docker image if requesting old-format image by pdh" do + Rails.configuration.docker_image_formats = ['v2'] + add_docker19_migration_link + job = Job.create!( + job_attrs( + script: 'foo', + runtime_constraints: { + 'docker_image' => collections(:docker_image).portable_data_hash})) + assert(job.valid?) + assert_equal(job.docker_image_locator, collections(:docker_image_1_12).portable_data_hash) + end + + [[:docker_image, :docker_image, :docker_image_1_12], + [:docker_image_1_12, :docker_image, :docker_image_1_12], + [:docker_image, :docker_image_1_12, :docker_image_1_12], + [:docker_image_1_12, :docker_image_1_12, :docker_image_1_12], + ].each do |existing_image, request_image, expect_image| + test "if a #{existing_image} job exists, #{request_image} yields #{expect_image} after migration" do + Rails.configuration.docker_image_formats = ['v1'] + + if existing_image == :docker_image + oldjob = Job.create!( + job_attrs( + script: 'foobar1', + runtime_constraints: { + 'docker_image' => collections(existing_image).portable_data_hash})) + oldjob.reload + assert_equal(oldjob.docker_image_locator, + collections(existing_image).portable_data_hash) + elsif existing_image == :docker_image_1_12 + assert_raises(ActiveRecord::RecordInvalid, + "Should not resolve v2 image when only v1 is supported") do + oldjob = Job.create!( + job_attrs( + script: 'foobar1', + runtime_constraints: { + 'docker_image' => collections(existing_image).portable_data_hash})) + end + end + + Rails.configuration.docker_image_formats = ['v2'] + add_docker19_migration_link + + # Check that both v1 and v2 images get resolved to v2. + newjob = Job.create!( + job_attrs( + script: 'foobar1', + runtime_constraints: { + 'docker_image' => collections(request_image).portable_data_hash})) + newjob.reload + assert_equal(newjob.docker_image_locator, + collections(expect_image).portable_data_hash) + end + end + test "can't create job with SDK version assigned directly" do check_creation_prohibited(arvados_sdk_version: SDK_MASTER) end @@ -509,7 +578,7 @@ class JobTest < ActiveSupport::TestCase ].each do |cascade| test "cancel job with cascade #{cascade}" do job = Job.find_by_uuid jobs(:running_job_with_components_at_level_1).uuid - job.cancel cascade + job.cancel cascade: cascade assert_equal Job::Cancelled, job.state descendents = ['zzzzz-8i9sb-jobcomponentsl2', @@ -542,7 +611,7 @@ class JobTest < ActiveSupport::TestCase test 'cancelling a job with circular relationship with another does not result in an infinite loop' do job = Job.find_by_uuid jobs(:running_job_2_with_circular_component_relationship).uuid - job.cancel true + job.cancel cascade: true assert_equal Job::Cancelled, job.state