Merge branch 'master' into 1971-show-image-thumbnails
[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
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_reuse_job_range" do
30     @controller = Arvados::V1::JobsController.new
31     authorize_with :active
32     post :create, job: {
33       script: "hash",
34       minimum_script_version: "tag1",
35       script_version: "master",
36       repository: "foo",
37       script_parameters: {
38         input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
39         an_integer: '1'
40       }
41     }
42     assert_response :success
43     assert_not_nil assigns(:object)
44     new_job = JSON.parse(@response.body)
45     assert_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
46     assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
47   end
48
49   test "test_cannot_reuse_job_different_input" do
50     @controller = Arvados::V1::JobsController.new
51     authorize_with :active
52     post :create, job: {
53       script: "hash",
54       script_version: "4fe459abe02d9b365932b8f5dc419439ab4e2577",
55       repository: "foo",
56       script_parameters: {
57         input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
58         an_integer: '2'
59       }
60     }
61     assert_response :success
62     assert_not_nil assigns(:object)
63     new_job = JSON.parse(@response.body)
64     assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
65     assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
66   end
67
68   test "test_cannot_reuse_job_different_version" do
69     @controller = Arvados::V1::JobsController.new
70     authorize_with :active
71     post :create, job: {
72       script: "hash",
73       script_version: "master",
74       repository: "foo",
75       script_parameters: {
76         input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
77         an_integer: '2'
78       }
79     }
80     assert_response :success
81     assert_not_nil assigns(:object)
82     new_job = JSON.parse(@response.body)
83     assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
84     assert_equal '077ba2ad3ea24a929091a9e6ce545c93199b8e57', new_job['script_version']
85   end
86
87   test "test_cannot_reuse_job_submitted_nondeterministic" do
88     @controller = Arvados::V1::JobsController.new
89     authorize_with :active
90     post :create, job: {
91       script: "hash",
92       script_version: "4fe459abe02d9b365932b8f5dc419439ab4e2577",
93       repository: "foo",
94       script_parameters: {
95         input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
96         an_integer: '1'
97       },
98       nondeterministic: true
99     }
100     assert_response :success
101     assert_not_nil assigns(:object)
102     new_job = JSON.parse(@response.body)
103     assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
104     assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
105   end
106
107   test "test_cannot_reuse_job_past_nondeterministic" do
108     @controller = Arvados::V1::JobsController.new
109     authorize_with :active
110     post :create, job: {
111       script: "hash2",
112       script_version: "4fe459abe02d9b365932b8f5dc419439ab4e2577",
113       repository: "foo",
114       script_parameters: {
115         input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
116         an_integer: '1'
117       }
118     }
119     assert_response :success
120     assert_not_nil assigns(:object)
121     new_job = JSON.parse(@response.body)
122     assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykyyy', new_job['uuid']
123     assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
124   end
125
126   test "test_cannot_reuse_job_no_permission" do
127     @controller = Arvados::V1::JobsController.new
128     authorize_with :spectator
129     post :create, job: {
130       script: "hash",
131       script_version: "4fe459abe02d9b365932b8f5dc419439ab4e2577",
132       repository: "foo",
133       script_parameters: {
134         input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
135         an_integer: '1'
136       }
137     }
138     assert_response :success
139     assert_not_nil assigns(:object)
140     new_job = JSON.parse(@response.body)
141     assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
142     assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
143   end
144
145   test "test_cannot_reuse_job_excluded" do
146     @controller = Arvados::V1::JobsController.new
147     authorize_with :active
148     post :create, job: {
149       script: "hash",
150       minimum_script_version: "31ce37fe365b3dc204300a3e4c396ad333ed0556",
151       script_version: "master",
152       repository: "foo",
153       exclude_script_versions: ["tag1"],
154       script_parameters: {
155         input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
156         an_integer: '1'
157       }
158     }
159     assert_response :success
160     assert_not_nil assigns(:object)
161     new_job = JSON.parse(@response.body)
162     assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
163     assert_equal '077ba2ad3ea24a929091a9e6ce545c93199b8e57', new_job['script_version']
164   end
165
166
167 end