Merge branch '14670-new-java-sdk-docs' of git.curoverse.com:arvados into 14670-new...
[arvados.git] / services / api / test / integration / jobs_api_test.rb
1 # Copyright (C) The Arvados Authors. All rights reserved.
2 #
3 # SPDX-License-Identifier: AGPL-3.0
4
5 require 'test_helper'
6
7 class JobsApiTest < ActionDispatch::IntegrationTest
8   fixtures :all
9
10   test "cancel job" do
11     post "/arvados/v1/jobs/#{jobs(:running).uuid}/cancel",
12       params: {:format => :json},
13       headers: {'HTTP_AUTHORIZATION' => "OAuth2 #{api_client_authorizations(:active).api_token}"}
14     assert_response :success
15     assert_equal "arvados#job", json_response['kind']
16     assert_not_nil json_response['cancelled_at']
17   end
18
19   test "cancel someone else's visible job" do
20     post "/arvados/v1/jobs/#{jobs(:runningbarbaz).uuid}/cancel",
21       params: {:format => :json},
22       headers: {'HTTP_AUTHORIZATION' => "OAuth2 #{api_client_authorizations(:spectator).api_token}"}
23     assert_response 403
24   end
25
26   test "cancel someone else's invisible job" do
27     post "/arvados/v1/jobs/#{jobs(:running).uuid}/cancel",
28       params: {:format => :json},
29       headers: {'HTTP_AUTHORIZATION' => "OAuth2 #{api_client_authorizations(:spectator).api_token}"}
30     assert_response 404
31   end
32
33   test "task qsequence values automatically increase monotonically" do
34     post_args = ["/arvados/v1/job_tasks",
35                  params: {job_task: {
36                      job_uuid: jobs(:running).uuid,
37                      sequence: 1,
38                    }},
39                  headers: auth(:active)]
40     last_qsequence = -1
41     (1..3).each do |task_num|
42       @response = nil
43       post(*post_args)
44       assert_response :success
45       qsequence = json_response["qsequence"]
46       assert_not_nil(qsequence, "task not assigned qsequence")
47       assert_operator(qsequence, :>, last_qsequence,
48                       "qsequence did not increase between tasks")
49       last_qsequence = qsequence
50     end
51   end
52
53   test 'get_delete components_get again for job with components' do
54     authorize_with :active
55     get "/arvados/v1/jobs/#{jobs(:running_job_with_components).uuid}",
56       headers: auth(:active)
57     assert_response 200
58     assert_not_nil json_response["components"]
59     assert_equal ["component1", "component2"], json_response["components"].keys
60
61     # delete second component
62     put "/arvados/v1/jobs/#{jobs(:running_job_with_components).uuid}", params: {
63       job: {
64         components: {"component1" => "zzzzz-8i9sb-jobuuid00000001"}
65       },
66       limit: 1000
67     }, headers: auth(:active)
68     assert_response 200
69
70     get "/arvados/v1/jobs/#{jobs(:running_job_with_components).uuid}",
71       headers: auth(:active)
72     assert_response 200
73     assert_not_nil json_response["components"]
74     assert_equal ["component1"], json_response["components"].keys
75
76     # delete all components
77     put "/arvados/v1/jobs/#{jobs(:running_job_with_components).uuid}", params: {
78       job: {
79         components: nil
80       },
81       limit: 1000
82     }, headers: auth(:active)
83     assert_response 200
84
85     get "/arvados/v1/jobs/#{jobs(:running_job_with_components).uuid}",
86       headers: auth(:active)
87     assert_response 200
88     assert_not_nil json_response["components"]
89     assert_equal [], json_response["components"].keys
90   end
91 end