X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/777e716728a7da63ece00df7e5bb8be7f9a2a1a3..07aa5aa282a388fc1bcb3d0cfe7520b96b3e7e38:/services/api/test/unit/container_request_test.rb diff --git a/services/api/test/unit/container_request_test.rb b/services/api/test/unit/container_request_test.rb index a3dd1f9835..0edc0f4593 100644 --- a/services/api/test/unit/container_request_test.rb +++ b/services/api/test/unit/container_request_test.rb @@ -1,3 +1,7 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + require 'test_helper' require 'helpers/docker_migration_helper' @@ -37,7 +41,7 @@ class ContainerRequestTest < ActiveSupport::TestCase cr = create_minimal_req! assert_nil cr.container_uuid - assert_nil cr.priority + assert_equal 0, cr.priority check_bogus_states cr @@ -104,7 +108,8 @@ class ContainerRequestTest < ActiveSupport::TestCase test "Container request priority must be non-nil" do set_user_from_auth :active - cr = create_minimal_req!(priority: nil) + cr = create_minimal_req! + cr.priority = nil cr.state = "Committed" assert_raises(ActiveRecord::RecordInvalid) do cr.save! @@ -289,15 +294,45 @@ class ContainerRequestTest < ActiveSupport::TestCase assert_equal 0, c2.priority end + + test "Container makes container request, then changes priority" do + set_user_from_auth :active + cr = create_minimal_req!(priority: 5, state: "Committed", container_count_max: 1) + + c = Container.find_by_uuid cr.container_uuid + assert_equal 5, c.priority + + cr2 = create_minimal_req! + cr2.update_attributes!(priority: 5, state: "Committed", requesting_container_uuid: c.uuid, command: ["echo", "foo2"], container_count_max: 1) + cr2.reload + + c2 = Container.find_by_uuid cr2.container_uuid + assert_equal 5, c2.priority + + act_as_system_user do + c.priority = 10 + c.save! + end + + cr.reload + + cr2.reload + assert_equal 10, cr2.priority + + c2.reload + assert_equal 10, c2.priority + end + [ - ['running_container_auth', 'zzzzz-dz642-runningcontainr'], - ['active_no_prefs', nil], - ].each do |token, expected| + ['running_container_auth', 'zzzzz-dz642-runningcontainr', 12], + ['active_no_prefs', nil, 0], + ].each do |token, expected, expected_priority| test "create as #{token} and expect requesting_container_uuid to be #{expected}" do set_user_from_auth token cr = ContainerRequest.create(container_image: "img", output_path: "/tmp", command: ["echo", "foo"]) assert_not_nil cr.uuid, 'uuid should be set for newly created container_request' assert_equal expected, cr.requesting_container_uuid + assert_equal expected_priority, cr.priority end end @@ -746,4 +781,59 @@ class ContainerRequestTest < ActiveSupport::TestCase end end end + + test "delete container_request and check its container's priority" do + act_as_user users(:active) do + cr = ContainerRequest.find_by_uuid container_requests(:running_to_be_deleted).uuid + + # initially the cr's container has priority > 0 + c = Container.find_by_uuid(cr.container_uuid) + assert_equal 1, c.priority + + # destroy the cr + assert_nothing_raised {cr.destroy} + + # the cr's container now has priority of 0 + c = Container.find_by_uuid(cr.container_uuid) + assert_equal 0, c.priority + end + end + + test "delete container_request in final state and expect no error due to before_destroy callback" do + act_as_user users(:active) do + cr = ContainerRequest.find_by_uuid container_requests(:completed).uuid + assert_nothing_raised {cr.destroy} + end + end + + test "Container request valid priority" do + set_user_from_auth :active + cr = create_minimal_req! + + assert_raises(ActiveRecord::RecordInvalid) do + cr.priority = -1 + cr.save! + end + + cr.priority = 0 + cr.save! + + cr.priority = 1 + cr.save! + + cr.priority = 500 + cr.save! + + cr.priority = 999 + cr.save! + + cr.priority = 1000 + cr.save! + + assert_raises(ActiveRecord::RecordInvalid) do + cr.priority = 1001 + cr.save! + end + end + end