Remove updated_at from API responses.
[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 "reuse job with no_reuse=false" do
11     @controller = Arvados::V1::JobsController.new
12     authorize_with :active
13     post :create, job: {
14       no_reuse: false,
15       script: "hash",
16       script_version: "4fe459abe02d9b365932b8f5dc419439ab4e2577",
17       repository: "foo",
18       script_parameters: {
19         input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
20         an_integer: '1'
21       }
22     }
23     assert_response :success
24     assert_not_nil assigns(:object)
25     new_job = JSON.parse(@response.body)
26     assert_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
27     assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
28   end
29
30   test "reuse job with find_or_create=true" do
31     @controller = Arvados::V1::JobsController.new
32     authorize_with :active
33     post :create, {
34       job: {
35         script: "hash",
36         script_version: "4fe459abe02d9b365932b8f5dc419439ab4e2577",
37         repository: "foo",
38         script_parameters: {
39           input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
40           an_integer: '1'
41         }
42       },
43       find_or_create: true
44     }
45     assert_response :success
46     assert_not_nil assigns(:object)
47     new_job = JSON.parse(@response.body)
48     assert_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
49     assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
50   end
51
52   test "do not reuse job because no_reuse=true" do
53     @controller = Arvados::V1::JobsController.new
54     authorize_with :active
55     post :create, {
56       job: {
57         no_reuse: true,
58         script: "hash",
59         script_version: "4fe459abe02d9b365932b8f5dc419439ab4e2577",
60         repository: "foo",
61         script_parameters: {
62           input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
63           an_integer: '1'
64         }
65       }
66     }
67     assert_response :success
68     assert_not_nil assigns(:object)
69     new_job = JSON.parse(@response.body)
70     assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
71     assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
72   end
73
74   test "do not reuse job because find_or_create=false" do
75     @controller = Arvados::V1::JobsController.new
76     authorize_with :active
77     post :create, {
78       job: {
79         script: "hash",
80         script_version: "4fe459abe02d9b365932b8f5dc419439ab4e2577",
81         repository: "foo",
82         script_parameters: {
83           input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
84           an_integer: '1'
85         }
86       },
87       find_or_create: false
88     }
89     assert_response :success
90     assert_not_nil assigns(:object)
91     new_job = JSON.parse(@response.body)
92     assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
93     assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
94   end
95
96   test "test_cannot_reuse_job_no_output" do
97     @controller = Arvados::V1::JobsController.new
98     authorize_with :active
99     post :create, job: {
100       no_reuse: false,
101       script: "hash",
102       script_version: "4fe459abe02d9b365932b8f5dc419439ab4e2577",
103       repository: "foo",
104       script_parameters: {
105         input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
106         an_integer: '2'
107       }
108     }
109     assert_response :success
110     assert_not_nil assigns(:object)
111     new_job = JSON.parse(@response.body)
112     assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykppp', new_job['uuid']
113   end
114
115   test "test_reuse_job_range" do
116     @controller = Arvados::V1::JobsController.new
117     authorize_with :active
118     post :create, job: {
119       no_reuse: false,
120       script: "hash",
121       minimum_script_version: "tag1",
122       script_version: "master",
123       repository: "foo",
124       script_parameters: {
125         input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
126         an_integer: '1'
127       }
128     }
129     assert_response :success
130     assert_not_nil assigns(:object)
131     new_job = JSON.parse(@response.body)
132     assert_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
133     assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
134   end
135
136   test "test_cannot_reuse_job_different_input" do
137     @controller = Arvados::V1::JobsController.new
138     authorize_with :active
139     post :create, job: {
140       no_reuse: false,
141       script: "hash",
142       script_version: "4fe459abe02d9b365932b8f5dc419439ab4e2577",
143       repository: "foo",
144       script_parameters: {
145         input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
146         an_integer: '2'
147       }
148     }
149     assert_response :success
150     assert_not_nil assigns(:object)
151     new_job = JSON.parse(@response.body)
152     assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
153     assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
154   end
155
156   test "test_cannot_reuse_job_different_version" do
157     @controller = Arvados::V1::JobsController.new
158     authorize_with :active
159     post :create, job: {
160       no_reuse: false,
161       script: "hash",
162       script_version: "master",
163       repository: "foo",
164       script_parameters: {
165         input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
166         an_integer: '2'
167       }
168     }
169     assert_response :success
170     assert_not_nil assigns(:object)
171     new_job = JSON.parse(@response.body)
172     assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
173     assert_equal '077ba2ad3ea24a929091a9e6ce545c93199b8e57', new_job['script_version']
174   end
175
176   test "test_can_reuse_job_submitted_nondeterministic" do
177     @controller = Arvados::V1::JobsController.new
178     authorize_with :active
179     post :create, job: {
180       no_reuse: false,
181       script: "hash",
182       script_version: "4fe459abe02d9b365932b8f5dc419439ab4e2577",
183       repository: "foo",
184       script_parameters: {
185         input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
186         an_integer: '1'
187       },
188       nondeterministic: true
189     }
190     assert_response :success
191     assert_not_nil assigns(:object)
192     new_job = JSON.parse(@response.body)
193     assert_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
194     assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
195   end
196
197   test "test_cannot_reuse_job_past_nondeterministic" do
198     @controller = Arvados::V1::JobsController.new
199     authorize_with :active
200     post :create, job: {
201       no_reuse: false,
202       script: "hash2",
203       script_version: "4fe459abe02d9b365932b8f5dc419439ab4e2577",
204       repository: "foo",
205       script_parameters: {
206         input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
207         an_integer: '1'
208       }
209     }
210     assert_response :success
211     assert_not_nil assigns(:object)
212     new_job = JSON.parse(@response.body)
213     assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykyyy', new_job['uuid']
214     assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
215   end
216
217   test "test_cannot_reuse_job_no_permission" do
218     @controller = Arvados::V1::JobsController.new
219     authorize_with :spectator
220     post :create, job: {
221       no_reuse: false,
222       script: "hash",
223       script_version: "4fe459abe02d9b365932b8f5dc419439ab4e2577",
224       repository: "foo",
225       script_parameters: {
226         input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
227         an_integer: '1'
228       }
229     }
230     assert_response :success
231     assert_not_nil assigns(:object)
232     new_job = JSON.parse(@response.body)
233     assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
234     assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
235   end
236
237   test "test_cannot_reuse_job_excluded" do
238     @controller = Arvados::V1::JobsController.new
239     authorize_with :active
240     post :create, job: {
241       no_reuse: false,
242       script: "hash",
243       minimum_script_version: "31ce37fe365b3dc204300a3e4c396ad333ed0556",
244       script_version: "master",
245       repository: "foo",
246       exclude_script_versions: ["tag1"],
247       script_parameters: {
248         input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
249         an_integer: '1'
250       }
251     }
252     assert_response :success
253     assert_not_nil assigns(:object)
254     new_job = JSON.parse(@response.body)
255     assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
256     assert_equal '077ba2ad3ea24a929091a9e6ce545c93199b8e57', new_job['script_version']
257   end
258
259   test "cannot reuse job with find_or_create but excluded version" do
260     @controller = Arvados::V1::JobsController.new
261     authorize_with :active
262     post :create, {
263       job: {
264         script: "hash",
265         script_version: "master",
266         repository: "foo",
267         script_parameters: {
268           input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
269           an_integer: '1'
270         }
271       },
272       find_or_create: true,
273       minimum_script_version: "31ce37fe365b3dc204300a3e4c396ad333ed0556",
274       exclude_script_versions: ["tag1"],
275     }
276     assert_response :success
277     assert_not_nil assigns(:object)
278     new_job = JSON.parse(@response.body)
279     assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
280     assert_equal '077ba2ad3ea24a929091a9e6ce545c93199b8e57', new_job['script_version']
281   end
282
283 end