mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-10-16 15:45:04 +08:00
Also: - Rename `FooBarTestCase` test classes as `TestFooBar`. These were collected by pytest only because they were `unittest.TestCase` derived, but normally pytest collects only test classes whose name starts with `Test`, see https://docs.pytest.org/en/7.1.x/reference/reference.html#confval-python_classes
114 lines
3.9 KiB
Python
114 lines
3.9 KiB
Python
from galaxy import model
|
|
from galaxy.quota import DatabaseQuotaAgent
|
|
from .test_galaxy_mapping import BaseModelTestCase
|
|
|
|
|
|
class TestCalculateUsage(BaseModelTestCase):
|
|
def test_calculate_usage(self):
|
|
u = model.User(email="calc_usage@example.com", password="password")
|
|
self.persist(u)
|
|
|
|
h = model.History(name="History for Usage", user=u)
|
|
self.persist(h)
|
|
|
|
d1 = model.HistoryDatasetAssociation(
|
|
extension="txt", history=h, create_dataset=True, sa_session=self.model.session
|
|
)
|
|
d1.dataset.total_size = 10
|
|
self.persist(d1)
|
|
|
|
assert u.calculate_disk_usage() == 10
|
|
assert u.disk_usage is None
|
|
u.calculate_and_set_disk_usage()
|
|
assert u.disk_usage == 10
|
|
|
|
# Test dataset being in another history doesn't duplicate usage cost.
|
|
h2 = model.History(name="Second usage history", user=u)
|
|
self.persist(h2)
|
|
d2 = model.HistoryDatasetAssociation(extension="txt", history=h2, dataset=d1.dataset)
|
|
self.persist(d2)
|
|
|
|
# duplicating dataset within a history also doesn't duplicate usage cost
|
|
d3 = model.HistoryDatasetAssociation(extension="txt", history=h, dataset=d1.dataset)
|
|
self.persist(d3)
|
|
|
|
assert u.calculate_disk_usage() == 10
|
|
|
|
|
|
class TestQuota(BaseModelTestCase):
|
|
def setUp(self):
|
|
super().setUp()
|
|
model = self.model
|
|
self.quota_agent = DatabaseQuotaAgent(model)
|
|
|
|
def test_quota(self):
|
|
u = model.User(email="quota@example.com", password="password")
|
|
self.persist(u)
|
|
|
|
self._assert_user_quota_is(u, None)
|
|
|
|
quota = model.Quota(name="default registered", amount=20)
|
|
self.quota_agent.set_default_quota(
|
|
model.DefaultQuotaAssociation.types.REGISTERED,
|
|
quota,
|
|
)
|
|
|
|
self._assert_user_quota_is(u, 20)
|
|
|
|
quota = model.Quota(name="user quota add", amount=30, operation="+")
|
|
self._add_user_quota(u, quota)
|
|
|
|
self._assert_user_quota_is(u, 50)
|
|
|
|
quota = model.Quota(name="user quota bigger base", amount=70, operation="=")
|
|
self._add_user_quota(u, quota)
|
|
|
|
self._assert_user_quota_is(u, 100)
|
|
|
|
quota = model.Quota(name="user quota del", amount=10, operation="-")
|
|
self._add_user_quota(u, quota)
|
|
|
|
self._assert_user_quota_is(u, 90)
|
|
|
|
quota = model.Quota(name="group quota add", amount=7, operation="+")
|
|
self._add_group_quota(u, quota)
|
|
self._assert_user_quota_is(u, 97)
|
|
|
|
quota = model.Quota(name="group quota bigger base", amount=100, operation="=")
|
|
self._add_group_quota(u, quota)
|
|
self._assert_user_quota_is(u, 127)
|
|
|
|
quota.deleted = True
|
|
self.persist(quota)
|
|
self._assert_user_quota_is(u, 97)
|
|
|
|
quota = model.Quota(name="group quota unlimited", amount=-1, operation="=")
|
|
self._add_group_quota(u, quota)
|
|
self._assert_user_quota_is(u, None)
|
|
|
|
def _add_group_quota(self, user, quota):
|
|
group = model.Group()
|
|
uga = model.UserGroupAssociation(user, group)
|
|
gqa = model.GroupQuotaAssociation(group=group, quota=quota)
|
|
self.persist(group, uga, quota, gqa, user)
|
|
|
|
def _add_user_quota(self, user, quota):
|
|
uqa = model.UserQuotaAssociation(user=user, quota=quota)
|
|
user.quotas.append(uqa)
|
|
self.persist(quota, uqa, user)
|
|
|
|
def _assert_user_quota_is(self, user, amount):
|
|
assert amount == self.quota_agent.get_quota(user)
|
|
if amount is None:
|
|
user.total_disk_usage = 1000
|
|
job = model.Job()
|
|
job.user = user
|
|
assert not self.quota_agent.is_over_quota(None, job, None)
|
|
else:
|
|
job = model.Job()
|
|
job.user = user
|
|
user.total_disk_usage = amount - 1
|
|
assert not self.quota_agent.is_over_quota(None, job, None)
|
|
user.total_disk_usage = amount + 1
|
|
assert self.quota_agent.is_over_quota(None, job, None)
|