X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/47e59a35d5ed9b2cdb052894d741972324058505..94f2b439783a8e63d6d7b9ba2760f54fc642a8fb:/services/api/test/unit/collection_test.rb diff --git a/services/api/test/unit/collection_test.rb b/services/api/test/unit/collection_test.rb index 62e3755a3f..8b8c48fe1c 100644 --- a/services/api/test/unit/collection_test.rb +++ b/services/api/test/unit/collection_test.rb @@ -3,7 +3,7 @@ # SPDX-License-Identifier: AGPL-3.0 require 'test_helper' -require 'sweep_trashed_collections' +require 'sweep_trashed_objects' class CollectionTest < ActiveSupport::TestCase include DbCurrentTime @@ -221,6 +221,81 @@ class CollectionTest < ActiveSupport::TestCase end end + test "storage_classes_desired cannot be empty" do + act_as_user users(:active) do + c = collections(:collection_owned_by_active) + c.update_attributes storage_classes_desired: ["hot"] + assert_equal ["hot"], c.storage_classes_desired + assert_raise ArvadosModel::InvalidStateTransitionError do + c.update_attributes storage_classes_desired: [] + end + end + end + + test "storage classes lists should only contain non-empty strings" do + c = collections(:storage_classes_desired_default_unconfirmed) + act_as_user users(:admin) do + assert c.update_attributes(storage_classes_desired: ["default", "a_string"], + storage_classes_confirmed: ["another_string"]) + [ + ["storage_classes_desired", ["default", 42]], + ["storage_classes_confirmed", [{the_answer: 42}]], + ["storage_classes_desired", ["default", ""]], + ["storage_classes_confirmed", [""]], + ].each do |attr, val| + assert_raise ArvadosModel::InvalidStateTransitionError do + assert c.update_attributes({attr => val}) + end + end + end + end + + test "storage_classes_confirmed* can be set by admin user" do + c = collections(:storage_classes_desired_default_unconfirmed) + act_as_user users(:admin) do + assert c.update_attributes(storage_classes_confirmed: ["default"], + storage_classes_confirmed_at: Time.now) + end + end + + test "storage_classes_confirmed* cannot be set by non-admin user" do + act_as_user users(:active) do + c = collections(:storage_classes_desired_default_unconfirmed) + # Cannot set just one at a time. + assert_raise ArvadosModel::PermissionDeniedError do + c.update_attributes storage_classes_confirmed: ["default"] + end + c.reload + assert_raise ArvadosModel::PermissionDeniedError do + c.update_attributes storage_classes_confirmed_at: Time.now + end + # Cannot set bot at once, either. + c.reload + assert_raise ArvadosModel::PermissionDeniedError do + assert c.update_attributes(storage_classes_confirmed: ["default"], + storage_classes_confirmed_at: Time.now) + end + end + end + + test "storage_classes_confirmed* can be cleared (but only together) by non-admin user" do + act_as_user users(:active) do + c = collections(:storage_classes_desired_default_confirmed_default) + # Cannot clear just one at a time. + assert_raise ArvadosModel::PermissionDeniedError do + c.update_attributes storage_classes_confirmed: [] + end + c.reload + assert_raise ArvadosModel::PermissionDeniedError do + c.update_attributes storage_classes_confirmed_at: nil + end + # Can clear both at once. + c.reload + assert c.update_attributes(storage_classes_confirmed: [], + storage_classes_confirmed_at: nil) + end + end + [0, 2, 4, nil].each do |ask| test "set replication_desired to #{ask.inspect}" do Rails.configuration.default_collection_replication = 2 @@ -481,7 +556,7 @@ class CollectionTest < ActiveSupport::TestCase assert_includes(coll_uuids, collections(:docker_image).uuid) end - test "move to trash in SweepTrashedCollections" do + test "move collections to trash in SweepTrashedObjects" do c = collections(:trashed_on_next_sweep) refute_empty Collection.where('uuid=? and is_trashed=false', c.uuid) assert_raises(ActiveRecord::RecordNotUnique) do @@ -490,7 +565,7 @@ class CollectionTest < ActiveSupport::TestCase name: c.name) end end - SweepTrashedCollections.sweep_now + SweepTrashedObjects.sweep_now c = Collection.where('uuid=? and is_trashed=true', c.uuid).first assert c act_as_user users(:active) do @@ -499,14 +574,14 @@ class CollectionTest < ActiveSupport::TestCase end end - test "delete in SweepTrashedCollections" do + test "delete collections in SweepTrashedObjects" do uuid = 'zzzzz-4zz18-3u1p5umicfpqszp' # deleted_on_next_sweep assert_not_empty Collection.where(uuid: uuid) - SweepTrashedCollections.sweep_now + SweepTrashedObjects.sweep_now assert_empty Collection.where(uuid: uuid) end - test "delete referring links in SweepTrashedCollections" do + test "delete referring links in SweepTrashedObjects" do uuid = collections(:trashed_on_next_sweep).uuid act_as_system_user do Link.create!(head_uuid: uuid, @@ -518,7 +593,7 @@ class CollectionTest < ActiveSupport::TestCase Collection.where(uuid: uuid). update_all(is_trashed: true, trash_at: past, delete_at: past) assert_not_empty Collection.where(uuid: uuid) - SweepTrashedCollections.sweep_now + SweepTrashedObjects.sweep_now assert_empty Collection.where(uuid: uuid) end end