X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/a95f899d7ac84f29b3d019aa410d265bb40833e5..cb230b07e0125d819991bc74a1f528740068157d:/services/api/test/functional/arvados/v1/containers_controller_test.rb diff --git a/services/api/test/functional/arvados/v1/containers_controller_test.rb b/services/api/test/functional/arvados/v1/containers_controller_test.rb index d9f7d96225..1f8a7c4315 100644 --- a/services/api/test/functional/arvados/v1/containers_controller_test.rb +++ b/services/api/test/functional/arvados/v1/containers_controller_test.rb @@ -24,7 +24,7 @@ class Arvados::V1::ContainersControllerTest < ActionController::TestCase test 'cannot get auth with wrong token' do authorize_with :dispatch1 c = containers(:queued) - assert c.update_attributes(state: Container::Locked), show_errors(c) + assert c.lock, show_errors(c) authorize_with :system_user get :auth, id: c.uuid @@ -34,7 +34,7 @@ class Arvados::V1::ContainersControllerTest < ActionController::TestCase test 'get auth' do authorize_with :dispatch1 c = containers(:queued) - assert c.update_attributes(state: Container::Locked), show_errors(c) + assert c.lock, show_errors(c) get :auth, id: c.uuid assert_response :success assert_operator 32, :<, json_response['api_token'].length @@ -44,9 +44,89 @@ class Arvados::V1::ContainersControllerTest < ActionController::TestCase test 'no auth in container response' do authorize_with :dispatch1 c = containers(:queued) - assert c.update_attributes(state: Container::Locked), show_errors(c) + assert c.lock, show_errors(c) get :show, id: c.uuid assert_response :success assert_nil json_response['auth'] end + + test "lock container" do + authorize_with :dispatch1 + uuid = containers(:queued).uuid + post :lock, {id: uuid} + assert_response :success + assert_nil json_response['mounts'] + assert_nil json_response['command'] + assert_not_nil json_response['auth_uuid'] + assert_not_nil json_response['locked_by_uuid'] + assert_equal containers(:queued).uuid, json_response['uuid'] + assert_equal 'Locked', json_response['state'] + assert_equal containers(:queued).priority, json_response['priority'] + + container = Container.where(uuid: uuid).first + assert_equal 'Locked', container.state + assert_not_nil container.locked_by_uuid + assert_not_nil container.auth_uuid + end + + test "unlock container" do + authorize_with :dispatch1 + uuid = containers(:locked).uuid + post :unlock, {id: uuid} + assert_response :success + assert_nil json_response['mounts'] + assert_nil json_response['command'] + assert_nil json_response['auth_uuid'] + assert_nil json_response['locked_by_uuid'] + assert_equal containers(:locked).uuid, json_response['uuid'] + assert_equal 'Queued', json_response['state'] + assert_equal containers(:locked).priority, json_response['priority'] + + container = Container.where(uuid: uuid).first + assert_equal 'Queued', container.state + assert_nil container.locked_by_uuid + assert_nil container.auth_uuid + end + + test "unlock container locked by different dispatcher" do + authorize_with :dispatch2 + uuid = containers(:locked).uuid + post :unlock, {id: uuid} + assert_response 422 + end + + [ + [:queued, :lock, :success, 'Locked'], + [:queued, :unlock, 422, 'Queued'], + [:locked, :lock, 422, 'Locked'], + [:running, :lock, 422, 'Running'], + [:running, :unlock, 422, 'Running'], + ].each do |fixture, action, response, state| + test "state transitions from #{fixture } to #{action}" do + authorize_with :dispatch1 + uuid = containers(fixture).uuid + post action, {id: uuid} + assert_response response + assert_equal state, Container.where(uuid: uuid).first.state + end + end + + test 'get current container for token' do + authorize_with :running_container_auth + get :current + assert_response :success + assert_equal containers(:running).uuid, json_response['uuid'] + end + + test 'no container associated with token' do + authorize_with :dispatch1 + get :current + assert_response 404 + end + + test 'try get current container, no token' do + get :current + assert_response 401 + end + end