1 # Copyright (C) The Arvados Authors. All rights reserved.
3 # SPDX-License-Identifier: AGPL-3.0
7 class Arvados::V1::ContainerRequestsControllerTest < ActionController::TestCase
10 command: ['echo', 'hello'],
11 container_image: 'test',
16 test 'create with scheduling parameters' do
17 authorize_with :active
19 sp = {'partitions' => ['test1', 'test2']}
20 post :create, params: {
21 container_request: minimal_cr.merge(scheduling_parameters: sp.dup)
23 assert_response :success
25 cr = JSON.parse(@response.body)
26 assert_not_nil cr, 'Expected container request'
27 assert_equal sp['partitions'], cr['scheduling_parameters']['partitions']
28 assert_equal false, cr['scheduling_parameters']['preemptible']
31 test "secret_mounts not in #create responses" do
32 authorize_with :active
34 post :create, params: {
35 container_request: minimal_cr.merge(
36 secret_mounts: {'/foo' => {'kind' => 'json', 'content' => 'bar'}}),
38 assert_response :success
40 resp = JSON.parse(@response.body)
41 refute resp.has_key?('secret_mounts')
43 req = ContainerRequest.where(uuid: resp['uuid']).first
44 assert_equal 'bar', req.secret_mounts['/foo']['content']
47 test "update with secret_mounts" do
48 authorize_with :active
49 req = container_requests(:uncommitted)
51 patch :update, params: {
54 secret_mounts: {'/foo' => {'kind' => 'json', 'content' => 'bar'}},
57 assert_response :success
59 resp = JSON.parse(@response.body)
60 refute resp.has_key?('secret_mounts')
63 assert_equal 'bar', req.secret_mounts['/foo']['content']
66 test "cancel with runtime_constraints and scheduling_params with default values" do
67 authorize_with :active
68 req = container_requests(:queued)
70 patch :update, params: {
75 runtime_constraints: {
78 'keep_cache_ram' => 0,
80 scheduling_parameters: {
85 assert_response :success
88 test "update without deleting secret_mounts" do
89 authorize_with :active
90 req = container_requests(:uncommitted)
91 req.update_attributes!(secret_mounts: {'/foo' => {'kind' => 'json', 'content' => 'bar'}})
93 patch :update, params: {
96 command: ['echo', 'test'],
99 assert_response :success
101 resp = JSON.parse(@response.body)
102 refute resp.has_key?('secret_mounts')
105 assert_equal 'bar', req.secret_mounts['/foo']['content']
108 test "runtime_token not in #create responses" do
109 authorize_with :active
111 post :create, params: {
112 container_request: minimal_cr.merge(
113 runtime_token: api_client_authorizations(:spectator).token)
115 assert_response :success
117 resp = JSON.parse(@response.body)
118 refute resp.has_key?('runtime_token')
120 req = ContainerRequest.where(uuid: resp['uuid']).first
121 assert_equal api_client_authorizations(:spectator).token, req.runtime_token
124 %w(Running Complete).each do |state|
125 test "filter on container.state = #{state}" do
126 authorize_with :active
127 get :index, params: {
128 filters: [['container.state', '=', state]],
130 assert_response :success
131 assert_operator json_response['items'].length, :>, 0
132 json_response['items'].each do |cr|
133 assert_equal state, Container.find_by_uuid(cr['container_uuid']).state
138 test "filter on container success" do
139 authorize_with :active
140 get :index, params: {
142 ['container.state', '=', 'Complete'],
143 ['container.exit_code', '=', '0'],
146 assert_response :success
147 assert_operator json_response['items'].length, :>, 0
148 json_response['items'].each do |cr|
149 assert_equal 'Complete', Container.find_by_uuid(cr['container_uuid']).state
150 assert_equal 0, Container.find_by_uuid(cr['container_uuid']).exit_code
154 test "filter on container subproperty runtime_status[foo] = bar" do
155 ctr = containers(:running)
156 act_as_system_user do
157 ctr.update_attributes!(runtime_status: {foo: 'bar'})
159 authorize_with :active
160 get :index, params: {
162 ['container.runtime_status.foo', '=', 'bar'],
165 assert_response :success
166 assert_equal [ctr.uuid], json_response['items'].collect { |cr| cr['container_uuid'] }.uniq