X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/a1def9bcfa954a7442f95e965f300a3e73e4f83f..0eb72b526bf8bbb011551ecf019f604e17a534f1:/services/api/test/functional/arvados/v1/jobs_controller_test.rb diff --git a/services/api/test/functional/arvados/v1/jobs_controller_test.rb b/services/api/test/functional/arvados/v1/jobs_controller_test.rb index 7f4b9d52ce..5e3d8e1975 100644 --- a/services/api/test/functional/arvados/v1/jobs_controller_test.rb +++ b/services/api/test/functional/arvados/v1/jobs_controller_test.rb @@ -1,3 +1,7 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + require 'test_helper' require 'helpers/git_test_helper' @@ -10,7 +14,7 @@ class Arvados::V1::JobsControllerTest < ActionController::TestCase post :create, job: { script: "hash", script_version: "master", - repository: "foo", + repository: "active/foo", script_parameters: {} } assert_response :success @@ -27,7 +31,7 @@ class Arvados::V1::JobsControllerTest < ActionController::TestCase script: "hash", script_version: "master", script_parameters: {}, - repository: "foo", + repository: "active/foo", started_at: Time.now, finished_at: Time.now, running: false, @@ -97,13 +101,15 @@ class Arvados::V1::JobsControllerTest < ActionController::TestCase 'server should correct bogus cancelled_at ' + job['cancelled_at']) assert_equal(true, - File.exists?(Rails.configuration.crunch_refresh_trigger), + File.exist?(Rails.configuration.crunch_refresh_trigger), 'trigger file should be created when job is cancelled') end [ [:put, :update, {job:{cancelled_at: Time.now}}, :success], + [:put, :update, {job:{cancelled_at: nil}}, :unprocessable_entity], [:put, :update, {job:{state: 'Cancelled'}}, :success], + [:put, :update, {job:{state: 'Queued'}}, :unprocessable_entity], [:put, :update, {job:{state: 'Running'}}, :unprocessable_entity], [:put, :update, {job:{state: 'Failed'}}, :unprocessable_entity], [:put, :update, {job:{state: 'Complete'}}, :unprocessable_entity], @@ -388,6 +394,135 @@ class Arvados::V1::JobsControllerTest < ActionController::TestCase test "job lock conflict" do authorize_with :active post :lock, {id: jobs(:running).uuid} - assert_response 403 # forbidden + assert_response 422 # invalid state transition + end + + test 'reject invalid commit in remote repository' do + authorize_with :active + url = "http://localhost:1/fake/fake.git" + fetch_remote_from_local_repo url, :foo + post :create, job: { + script: "hash", + script_version: "abc123", + repository: url, + script_parameters: {} + } + assert_response 422 + end + + test 'tag remote commit in internal repository' do + authorize_with :active + url = "http://localhost:1/fake/fake.git" + fetch_remote_from_local_repo url, :foo + post :create, job: { + script: "hash", + script_version: "master", + repository: url, + script_parameters: {} + } + assert_response :success + assert_equal('077ba2ad3ea24a929091a9e6ce545c93199b8e57', + internal_tag(json_response['uuid'])) + end + + test 'tag local commit in internal repository' do + authorize_with :active + post :create, job: { + script: "hash", + script_version: "master", + repository: "active/foo", + script_parameters: {} + } + assert_response :success + assert_equal('077ba2ad3ea24a929091a9e6ce545c93199b8e57', + internal_tag(json_response['uuid'])) + end + + test 'get job with components' do + authorize_with :active + get :show, {id: jobs(:running_job_with_components).uuid} + assert_response :success + assert_not_nil json_response["components"] + assert_equal ["component1", "component2"], json_response["components"].keys + end + + [ + [:active, :success], + [:system_user, :success], + [:admin, 403], + ].each do |user, expected| + test "add components to job locked by active user as #{user} user and expect #{expected}" do + authorize_with user + put :update, { + id: jobs(:running).uuid, + job: { + components: {"component1" => "value1", "component2" => "value2"} + } + } + assert_response expected + if expected == :success + assert_not_nil json_response["components"] + keys = json_response["components"].keys + assert_equal ["component1", "component2"], keys + assert_equal "value1", json_response["components"][keys[0]] + end + end + end + + test 'get_delete components_get again for job with components' do + authorize_with :active + get :show, {id: jobs(:running_job_with_components).uuid} + assert_response :success + assert_not_nil json_response["components"] + assert_equal ["component1", "component2"], json_response["components"].keys + + # delete second component + @test_counter = 0 # Reset executed action counter + @controller = Arvados::V1::JobsController.new + put :update, { + id: jobs(:running_job_with_components).uuid, + job: { + components: {"component1" => "zzzzz-8i9sb-jobuuid00000001"} + } + } + assert_response :success + + @test_counter = 0 # Reset executed action counter + @controller = Arvados::V1::JobsController.new + get :show, {id: jobs(:running_job_with_components).uuid} + assert_response :success + assert_not_nil json_response["components"] + assert_equal ["component1"], json_response["components"].keys + + # delete all components + @test_counter = 0 # Reset executed action counter + @controller = Arvados::V1::JobsController.new + put :update, { + id: jobs(:running_job_with_components).uuid, + job: { + components: {} + } + } + assert_response :success + + @test_counter = 0 # Reset executed action counter + @controller = Arvados::V1::JobsController.new + get :show, {id: jobs(:running_job_with_components).uuid} + assert_response :success + assert_not_nil json_response["components"] + assert_equal [], json_response["components"].keys + end + + test 'jobs.create disabled in config' do + Rails.configuration.disable_api_methods = ["jobs.create", + "pipeline_instances.create"] + authorize_with :active + post :create, job: { + script: "hash", + script_version: "master", + repository: "active/foo", + script_parameters: {} + } + assert_response 404 end end