X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/52738977b2715822954692a566049b7ebf54e7cc..feaf44094afa6774cd6583f1a121454d6754ba0c:/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..601f9a7af5 100644 --- a/services/api/test/functional/arvados/v1/jobs_controller_test.rb +++ b/services/api/test/functional/arvados/v1/jobs_controller_test.rb @@ -10,7 +10,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 +27,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, @@ -103,7 +103,9 @@ class Arvados::V1::JobsControllerTest < ActionController::TestCase [ [: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], @@ -390,4 +392,120 @@ class Arvados::V1::JobsControllerTest < ActionController::TestCase post :lock, {id: jobs(:running).uuid} assert_response 403 # forbidden 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 end