Merge branch '2376-show-collection-tags-everywhere'
[arvados.git] / services / api / test / functional / arvados / v1 / job_reuse_controller_test.rb
1 require 'test_helper'
2 load 'test/functional/arvados/v1/git_setup.rb'
3
4 class Arvados::V1::JobReuseControllerTest < ActionController::TestCase
5   fixtures :repositories, :users, :jobs, :links, :collections
6
7   # See git_setup.rb for the commit log for test.git.tar
8   include GitSetup
9
10   test "test_reuse_job" do
11     @controller = Arvados::V1::JobsController.new
12     authorize_with :active
13     post :create, job: {
14       script: "hash",
15       script_version: "4fe459abe02d9b365932b8f5dc419439ab4e2577",
16       repository: "foo",
17       script_parameters: {
18         input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
19         an_integer: '1'
20       }
21     }
22     assert_response :success
23     assert_not_nil assigns(:object)
24     new_job = JSON.parse(@response.body)
25     assert_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
26     assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
27   end
28
29   test "test_cannot_reuse_job_no_output" do
30     @controller = Arvados::V1::JobsController.new
31     authorize_with :active
32     post :create, job: {
33       script: "hash",
34       script_version: "4fe459abe02d9b365932b8f5dc419439ab4e2577",
35       repository: "foo",
36       script_parameters: {
37         input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
38         an_integer: '2'
39       }
40     }
41     assert_response :success
42     assert_not_nil assigns(:object)
43     new_job = JSON.parse(@response.body)
44     assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykppp', new_job['uuid']
45   end
46
47   test "test_reuse_job_range" do
48     @controller = Arvados::V1::JobsController.new
49     authorize_with :active
50     post :create, job: {
51       script: "hash",
52       minimum_script_version: "tag1",
53       script_version: "master",
54       repository: "foo",
55       script_parameters: {
56         input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
57         an_integer: '1'
58       }
59     }
60     assert_response :success
61     assert_not_nil assigns(:object)
62     new_job = JSON.parse(@response.body)
63     assert_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
64     assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
65   end
66
67   test "test_cannot_reuse_job_different_input" do
68     @controller = Arvados::V1::JobsController.new
69     authorize_with :active
70     post :create, job: {
71       script: "hash",
72       script_version: "4fe459abe02d9b365932b8f5dc419439ab4e2577",
73       repository: "foo",
74       script_parameters: {
75         input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
76         an_integer: '2'
77       }
78     }
79     assert_response :success
80     assert_not_nil assigns(:object)
81     new_job = JSON.parse(@response.body)
82     assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
83     assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
84   end
85
86   test "test_cannot_reuse_job_different_version" do
87     @controller = Arvados::V1::JobsController.new
88     authorize_with :active
89     post :create, job: {
90       script: "hash",
91       script_version: "master",
92       repository: "foo",
93       script_parameters: {
94         input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
95         an_integer: '2'
96       }
97     }
98     assert_response :success
99     assert_not_nil assigns(:object)
100     new_job = JSON.parse(@response.body)
101     assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
102     assert_equal '077ba2ad3ea24a929091a9e6ce545c93199b8e57', new_job['script_version']
103   end
104
105   test "test_cannot_reuse_job_submitted_nondeterministic" do
106     @controller = Arvados::V1::JobsController.new
107     authorize_with :active
108     post :create, job: {
109       script: "hash",
110       script_version: "4fe459abe02d9b365932b8f5dc419439ab4e2577",
111       repository: "foo",
112       script_parameters: {
113         input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
114         an_integer: '1'
115       },
116       nondeterministic: true
117     }
118     assert_response :success
119     assert_not_nil assigns(:object)
120     new_job = JSON.parse(@response.body)
121     assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
122     assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
123   end
124
125   test "test_cannot_reuse_job_past_nondeterministic" do
126     @controller = Arvados::V1::JobsController.new
127     authorize_with :active
128     post :create, job: {
129       script: "hash2",
130       script_version: "4fe459abe02d9b365932b8f5dc419439ab4e2577",
131       repository: "foo",
132       script_parameters: {
133         input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
134         an_integer: '1'
135       }
136     }
137     assert_response :success
138     assert_not_nil assigns(:object)
139     new_job = JSON.parse(@response.body)
140     assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykyyy', new_job['uuid']
141     assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
142   end
143
144   test "test_cannot_reuse_job_no_permission" do
145     @controller = Arvados::V1::JobsController.new
146     authorize_with :spectator
147     post :create, job: {
148       script: "hash",
149       script_version: "4fe459abe02d9b365932b8f5dc419439ab4e2577",
150       repository: "foo",
151       script_parameters: {
152         input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
153         an_integer: '1'
154       }
155     }
156     assert_response :success
157     assert_not_nil assigns(:object)
158     new_job = JSON.parse(@response.body)
159     assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
160     assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
161   end
162
163   test "test_cannot_reuse_job_excluded" do
164     @controller = Arvados::V1::JobsController.new
165     authorize_with :active
166     post :create, job: {
167       script: "hash",
168       minimum_script_version: "31ce37fe365b3dc204300a3e4c396ad333ed0556",
169       script_version: "master",
170       repository: "foo",
171       exclude_script_versions: ["tag1"],
172       script_parameters: {
173         input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
174         an_integer: '1'
175       }
176     }
177     assert_response :success
178     assert_not_nil assigns(:object)
179     new_job = JSON.parse(@response.body)
180     assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
181     assert_equal '077ba2ad3ea24a929091a9e6ce545c93199b8e57', new_job['script_version']
182   end
183
184
185 end