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