+
+ # ...unless config says to reuse the earlier job in such cases.
+ Rails.configuration.Containers.JobsAPI.ReuseJobIfOutputsDiffer = true
+ j = Job.find_reusable(example_attrs, {}, [], [users(:active)])
+ assert_equal foobar.uuid, j.uuid
+ end
+
+ [
+ true,
+ false,
+ ].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: cascade
+ assert_equal Job::Cancelled, job.state
+
+ descendents = ['zzzzz-8i9sb-jobcomponentsl2',
+ 'zzzzz-d1hrv-picomponentsl02',
+ 'zzzzz-8i9sb-job1atlevel3noc',
+ 'zzzzz-8i9sb-job2atlevel3noc']
+
+ jobs = Job.where(uuid: descendents)
+ jobs.each do |j|
+ assert_equal ('Cancelled' == j.state), cascade
+ end
+
+ pipelines = PipelineInstance.where(uuid: descendents)
+ pipelines.each do |pi|
+ assert_equal ('Paused' == pi.state), cascade
+ end
+ end
+ end
+
+ test 'cancelling a completed job raises error' do
+ job = Job.find_by_uuid jobs(:job_with_latest_version).uuid
+ assert job
+ assert_equal 'Complete', job.state
+
+ assert_raises(ArvadosModel::InvalidStateTransitionError) do
+ job.cancel
+ end
+ end
+
+ 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 cascade: true
+
+ assert_equal Job::Cancelled, job.state
+
+ 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.Containers.JobsAPI.Enable = "true"
+ check_enable_legacy_jobs_api
+ assert_equal [], Rails.configuration.API.DisabledAPIs
+ end
+
+ test 'enable legacy api configuration option = false' do
+ Rails.configuration.Containers.JobsAPI.Enable = "false"
+ check_enable_legacy_jobs_api
+ assert_equal Disable_jobs_api_method_list, Rails.configuration.API.DisabledAPIs
+ end
+
+ test 'enable legacy api configuration option = auto, has jobs' do
+ Rails.configuration.Containers.JobsAPI.Enable = "auto"
+ assert Job.count > 0
+ check_enable_legacy_jobs_api
+ assert_equal [], Rails.configuration.API.DisabledAPIs
+ end
+
+ test 'enable legacy api configuration option = auto, no jobs' do
+ Rails.configuration.Containers.JobsAPI.Enable = "auto"
+ act_as_system_user do
+ Job.destroy_all
+ end
+ assert_equal 0, Job.count
+ assert_equal [], Rails.configuration.API.DisabledAPIs
+ check_enable_legacy_jobs_api
+ assert_equal Disable_jobs_api_method_list, Rails.configuration.API.DisabledAPIs