Merge branch '6429-crunch2-api' closes #6429
[arvados.git] / services / api / test / unit / container_test.rb
1 require 'test_helper'
2
3 class ContainerTest < ActiveSupport::TestCase
4   def check_illegal_modify c
5       assert_raises(ActiveRecord::RecordInvalid) do
6         c.reload
7         c.command = ["echo", "bar"]
8         c.save!
9       end
10
11       assert_raises(ActiveRecord::RecordInvalid) do
12         c.reload
13         c.container_image = "img2"
14         c.save!
15       end
16
17       assert_raises(ActiveRecord::RecordInvalid) do
18         c.reload
19         c.cwd = "/tmp2"
20         c.save!
21       end
22
23       assert_raises(ActiveRecord::RecordInvalid) do
24         c.reload
25         c.environment = {"FOO" => "BAR"}
26         c.save!
27       end
28
29       assert_raises(ActiveRecord::RecordInvalid) do
30         c.reload
31         c.mounts = {"FOO" => "BAR"}
32         c.save!
33       end
34
35       assert_raises(ActiveRecord::RecordInvalid) do
36         c.reload
37         c.output_path = "/tmp3"
38         c.save!
39       end
40
41       assert_raises(ActiveRecord::RecordInvalid) do
42         c.reload
43         c.runtime_constraints = {"FOO" => "BAR"}
44         c.save!
45       end
46
47   end
48
49   def check_bogus_states c
50       assert_raises(ActiveRecord::RecordInvalid) do
51         c.reload
52         c.state = nil
53         c.save!
54       end
55
56       assert_raises(ActiveRecord::RecordInvalid) do
57         c.reload
58         c.state = "Flubber"
59         c.save!
60       end
61   end
62
63   def check_no_change_from_complete c
64       check_illegal_modify c
65       check_bogus_states c
66
67       assert_raises(ActiveRecord::RecordInvalid) do
68         c.reload
69         c.priority = 3
70         c.save!
71       end
72
73       assert_raises(ActiveRecord::RecordInvalid) do
74         c.reload
75         c.state = "Queued"
76         c.save!
77       end
78
79       assert_raises(ActiveRecord::RecordInvalid) do
80         c.reload
81         c.state = "Running"
82         c.save!
83       end
84
85       assert_raises(ActiveRecord::RecordInvalid) do
86         c.reload
87         c.state = "Complete"
88         c.save!
89       end
90
91   end
92
93   test "Container create" do
94     act_as_system_user do
95       c = Container.new
96       c.command = ["echo", "foo"]
97       c.container_image = "img"
98       c.cwd = "/tmp"
99       c.environment = {}
100       c.mounts = {"BAR" => "FOO"}
101       c.output_path = "/tmp"
102       c.priority = 1
103       c.runtime_constraints = {}
104       c.save!
105
106       check_illegal_modify c
107       check_bogus_states c
108
109       c.reload
110       c.priority = 2
111       c.save!
112     end
113   end
114
115   test "Container running" do
116     act_as_system_user do
117       c = Container.new
118       c.command = ["echo", "foo"]
119       c.container_image = "img"
120       c.output_path = "/tmp"
121       c.save!
122
123       assert_raises(ActiveRecord::RecordInvalid) do
124         c.reload
125         c.state = "Complete"
126         c.save!
127       end
128
129       c.reload
130       c.state = "Running"
131       c.save!
132
133       check_illegal_modify c
134       check_bogus_states c
135
136       assert_raises(ActiveRecord::RecordInvalid) do
137         c.reload
138         c.state = "Queued"
139         c.save!
140       end
141
142       c.reload
143       c.priority = 3
144       c.save!
145     end
146   end
147
148   test "Container queued cancel" do
149     act_as_system_user do
150       c = Container.new
151       c.command = ["echo", "foo"]
152       c.container_image = "img"
153       c.output_path = "/tmp"
154       c.save!
155
156       c.reload
157       c.state = "Cancelled"
158       c.save!
159
160       check_no_change_from_complete c
161     end
162   end
163
164   test "Container running cancel" do
165     act_as_system_user do
166       c = Container.new
167       c.command = ["echo", "foo"]
168       c.container_image = "img"
169       c.output_path = "/tmp"
170       c.save!
171
172       c.reload
173       c.state = "Running"
174       c.save!
175
176       c.reload
177       c.state = "Cancelled"
178       c.save!
179
180       check_no_change_from_complete c
181     end
182   end
183
184   test "Container create forbidden for non-admin" do
185     set_user_from_auth :active_trustedclient
186     c = Container.new
187     c.command = ["echo", "foo"]
188     c.container_image = "img"
189     c.cwd = "/tmp"
190     c.environment = {}
191     c.mounts = {"BAR" => "FOO"}
192     c.output_path = "/tmp"
193     c.priority = 1
194     c.runtime_constraints = {}
195     assert_raises(ArvadosModel::PermissionDeniedError) do
196       c.save!
197     end
198   end
199
200 end