forgejo/tests/integration
Gergely Nagy e1fe3bbdc0
feat(quota): Humble beginnings of a quota engine
This is an implementation of a quota engine, and the API routes to
manage its settings. This does *not* contain any enforcement code: this
is just the bedrock, the engine itself.

The goal of the engine is to be flexible and future proof: to be nimble
enough to build on it further, without having to rewrite large parts of
it.

It might feel a little more complicated than necessary, because the goal
was to be able to support scenarios only very few Forgejo instances
need, scenarios the vast majority of mostly smaller instances simply do
not care about. The goal is to support both big and small, and for that,
we need a solid, flexible foundation.

There are thee big parts to the engine: counting quota use, setting
limits, and evaluating whether the usage is within the limits. Sounds
simple on paper, less so in practice!

Quota counting
==============

Quota is counted based on repo ownership, whenever possible, because
repo owners are in ultimate control over the resources they use: they
can delete repos, attachments, everything, even if they don't *own*
those themselves. They can clean up, and will always have the permission
and access required to do so. Would we count quota based on the owning
user, that could lead to situations where a user is unable to free up
space, because they uploaded a big attachment to a repo that has been
taken private since. It's both more fair, and much safer to count quota
against repo owners.

This means that if user A uploads an attachment to an issue opened
against organization O, that will count towards the quota of
organization O, rather than user A.

One's quota usage stats can be queried using the `/user/quota` API
endpoint. To figure out what's eating into it, the
`/user/repos?order_by=size`, `/user/quota/attachments`,
`/user/quota/artifacts`, and `/user/quota/packages` endpoints should be
consulted. There's also `/user/quota/check?subject=<...>` to check
whether the signed-in user is within a particular quota limit.

Quotas are counted based on sizes stored in the database.

Setting quota limits
====================

There are different "subjects" one can limit usage for. At this time,
only size-based limits are implemented, which are:

- `size:all`: As the name would imply, the total size of everything
  Forgejo tracks.
- `size:repos:all`: The total size of all repositories (not including
  LFS).
- `size:repos:public`: The total size of all public repositories (not
  including LFS).
- `size:repos:private`: The total size of all private repositories (not
  including LFS).
- `size:git:all`: The total size of all git data (including all
  repositories, and LFS).
- `size:git:lfs`: The size of all git LFS data (either in private or
  public repos).
- `size:assets:all`: The size of all assets tracked by Forgejo.
- `size:assets:attachments:all`: The size of all kinds of attachments
  tracked by Forgejo.
- `size:assets:attachments:issues`: Size of all attachments attached to
  issues, including issue comments.
- `size:assets:attachments:releases`: Size of all attachments attached
  to releases. This does *not* include automatically generated archives.
- `size:assets:artifacts`: Size of all Action artifacts.
- `size:assets:packages:all`: Size of all Packages.
- `size:wiki`: Wiki size

Wiki size is currently not tracked, and the engine will always deem it
within quota.

These subjects are built into Rules, which set a limit on *all* subjects
within a rule. Thus, we can create a rule that says: "1Gb limit on all
release assets, all packages, and git LFS, combined". For a rule to
stand, the total sum of all subjects must be below the rule's limit.

Rules are in turn collected into groups. A group is just a name, and a
list of rules. For a group to stand, all of its rules must stand. Thus,
if we have a group with two rules, one that sets a combined 1Gb limit on
release assets, all packages, and git LFS, and another rule that sets a
256Mb limit on packages, if the user has 512Mb of packages, the group
will not stand, because the second rule deems it over quota. Similarly,
if the user has only 128Mb of packages, but 900Mb of release assets, the
group will not stand, because the combined size of packages and release
assets is over the 1Gb limit of the first rule.

Groups themselves are collected into Group Lists. A group list stands
when *any* of the groups within stand. This allows an administrator to
set conservative defaults, but then place select users into additional
groups that increase some aspect of their limits.

To top it off, it is possible to set the default quota groups a user
belongs to in `app.ini`. If there's no explicit assignment, the engine
will use the default groups. This makes it possible to avoid having to
assign each and every user a list of quota groups, and only those need
to be explicitly assigned who need a different set of groups than the
defaults.

If a user has any quota groups assigned to them, the default list will
not be considered for them.

The management APIs
===================

This commit contains the engine itself, its unit tests, and the quota
management APIs. It does not contain any enforcement.

The APIs are documented in-code, and in the swagger docs, and the
integration tests can serve as an example on how to use them.

Signed-off-by: Gergely Nagy <forgejo@gergo.csillger.hu>
2024-08-02 11:10:34 +02:00
..
fixtures [SECURITY] Test XSS in dismissed review 2024-02-22 15:33:20 +01:00
migration-test Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
schemas
actions_commit_status_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
actions_route_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
actions_trigger_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
admin_config_test.go
admin_user_test.go
api_actions_artifact_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_actions_artifact_v4_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_activitypub_person_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_activitypub_repository_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_admin_org_test.go
api_admin_test.go Add result check in TestAPIEditUser (#29674) 2024-05-09 19:26:21 +02:00
api_block_test.go
api_branch_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_comment_attachment_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_comment_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_feed_plain_text_titles_test.go Use GetDisplayName() instead of DisplayName() to generate rss feeds (followup) 2024-07-28 09:00:29 +02:00
api_feed_user_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_forgejo_root_test.go
api_forgejo_version_test.go Fix #2512 /api/forgejo/v1/version auth check (#2582) 2024-03-19 07:16:19 +00:00
api_fork_test.go Allow admins to fork repos even when creation limits are exhausted (#3277) 2024-04-17 05:52:02 +00:00
api_gitignore_templates_test.go
api_gpg_keys_test.go
api_health_test.go Remove useless t.run 2024-04-06 00:43:22 +02:00
api_helper_for_declarative_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_httpsig_test.go
api_issue_attachment_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_issue_config_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_issue_label_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_issue_milestone_test.go
api_issue_pin_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_issue_reaction_test.go
api_issue_stopwatch_test.go
api_issue_subscription_test.go
api_issue_templates_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_issue_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_issue_tracked_time_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_keys_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_label_templates_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_license_templates_test.go
api_nodeinfo_test.go [FEAT] Adds x-mode-only anchor styles to display images based if the theme is light or dark mode. (#3985) 2024-06-09 10:50:53 +00:00
api_notification_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_oauth2_apps_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_org_avatar_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_org_test.go Allow non-admin users to delete review requests (#29057) 2024-02-26 22:30:27 +01:00
api_packages_alpine_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_packages_cargo_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_packages_chef_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_packages_composer_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_packages_conan_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_packages_conda_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_packages_container_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_packages_cran_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_packages_debian_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_packages_generic_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_packages_goproxy_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_packages_helm_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_packages_maven_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_packages_npm_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_packages_nuget_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_packages_pub_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_packages_pypi_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_packages_rpm_test.go Add signature support for the RPM module (#4780) 2024-08-02 05:56:57 +00:00
api_packages_rubygems_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_packages_swift_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_packages_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_packages_vagrant_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_private_serv_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_pull_commits_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_pull_review_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_pull_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_push_mirror_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_quota_management_test.go feat(quota): Humble beginnings of a quota engine 2024-08-02 11:10:34 +02:00
api_releases_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_repo_activities_test.go Teach activities.GetFeeds() how to avoid returning duplicates 2024-05-09 18:33:33 +02:00
api_repo_archive_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_repo_avatar_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_repo_branch_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_repo_collaborator_test.go
api_repo_compare_test.go feat(api): implement branch/commit comparison API (#30349) 2024-04-21 11:58:18 +02:00
api_repo_edit_test.go
api_repo_file_create_test.go test-sha256: APICreateFile 2024-05-16 11:01:47 +02:00
api_repo_file_delete_test.go
api_repo_file_get_test.go test-sha256: PushDeployKeyOnEmptyRepo 2024-05-16 10:54:40 +02:00
api_repo_file_helpers.go
api_repo_file_update_test.go Move context from modules to services (#29440) 2024-03-06 12:10:43 +08:00
api_repo_files_change_test.go Move context from modules to services (#29440) 2024-03-06 12:10:43 +08:00
api_repo_get_contents_list_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_repo_get_contents_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_repo_git_blobs_test.go
api_repo_git_commits_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_repo_git_hook_test.go
api_repo_git_notes_test.go
api_repo_git_ref_test.go
api_repo_git_tags_test.go Resolve lint for unused parameter and unnecessary type arguments (#30750) 2024-05-05 08:38:16 +01:00
api_repo_git_trees_test.go
api_repo_hook_test.go [REFACTOR] webhook.Handler interface 2024-03-24 10:35:06 +01:00
api_repo_languages_test.go
api_repo_lfs_locks_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_repo_lfs_migrate_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_repo_lfs_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_repo_raw_test.go
api_repo_secrets_test.go feat(api): enhance Actions Secrets Management API for repository (#30656) 2024-04-28 15:39:01 +02:00
api_repo_tags_test.go Add lint-go-gopls (#30729) 2024-06-09 11:13:39 +02:00
api_repo_teams_test.go
api_repo_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_repo_topic_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_repo_variables_test.go Add API for Variables (#29520) 2024-04-07 10:57:53 +02:00
api_settings_test.go
api_team_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_team_user_test.go
api_token_test.go
api_twofa_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_user_avatar_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_user_email_test.go
api_user_follow_test.go
api_user_heatmap_test.go
api_user_info_test.go
api_user_org_perm_test.go
api_user_orgs_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_user_search_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
api_user_secrets_test.go
api_user_star_test.go Disabling Stars should disable the routes too 2024-02-26 20:50:32 +01:00
api_user_variables_test.go Add API for Variables (#29520) 2024-04-07 10:57:53 +02:00
api_user_watch_test.go
api_wiki_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
archived_labels_display_test.go Add integration test for (non-)archived label properties 2024-04-01 21:38:34 +05:00
attachment_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
auth_ldap_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
auth_token_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
avatar.png
benchmarks_test.go Replace deprecated math/rand functions (#30733) 2024-04-28 15:39:02 +02:00
block_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
branches_test.go Move context from modules to services (#29440) 2024-03-06 12:10:43 +08:00
change_default_branch_test.go
cmd_admin_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
cmd_forgejo_actions_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
cmd_forgejo_f3_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
cmd_keys_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
codeowner_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
compare_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
cors_test.go
create_no_session_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
csrf_test.go
db_collation_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
delete_user_test.go
doctor_packages_nuget_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
download_test.go
dump_restore_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
easymde_test.go Add integration test for EasyMDE button 2024-04-15 22:59:26 +05:00
editor_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
empty_repo_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
eventsource_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
explore_code_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
explore_repos_test.go [BUG] Remember topic only in repo search 2024-03-06 13:22:39 +01:00
explore_user_test.go Remove unnecessary ".Link" usages (#29909) 2024-03-26 19:04:26 +01:00
forgejo_confirmation_repo_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
forgejo_git_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
git_clone_wiki_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
git_helper_for_declarative_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
git_push_test.go fix(hook): ignore unknown push options instead of failing 2024-07-02 21:39:01 +02:00
git_smart_http_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
git_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
goget_test.go
gpg_git_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
html_helper.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
incoming_email_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
integration_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
issue_subscribe_test.go Disable issue subscribe button for guest users (#4095) 2024-06-11 05:54:35 +00:00
issue_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
issues_comment_labels_test.go fix(ui): fix conversation template 2024-07-25 23:51:17 +05:00
last_updated_time_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
lfs_getobject_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
lfs_local_endpoint_test.go
lfs_view_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
linguist_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
links_test.go [REFACTOR] webhook move edit endpoints 2024-03-27 22:26:55 +01:00
markup_external_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
markup_test.go Update the TestRenderAlertBlocks integration test 2024-03-23 15:38:43 +01:00
migrate_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
milestone_test.go fix(ui): use right placeholder string in milestones search (#4628) 2024-07-25 03:33:44 +00:00
mirror_pull_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
mirror_push_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
nonascii_branches_test.go
oauth_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
opengraph_test.go Fix opengraph meta for wiki pages (#4427) 2024-07-10 18:29:35 +00:00
org_count_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
org_nav_test.go [UI] Allow org members to navigate between the org and the dashboard 2024-05-05 23:14:57 +05:00
org_project_test.go Fix data-race during testing (#30999) 2024-05-26 18:28:26 +02:00
org_team_invite_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
org_test.go add label filters in org/{org_name}/issues 2024-04-04 17:57:11 +05:30
private-testing.key
privateactivity_test.go
proctected_branch_test.go [FEAT] Configure if protected branch rule should apply to admins 2024-03-29 00:21:49 +01:00
project_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
pull_compare_test.go
pull_create_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
pull_diff_test.go
pull_merge_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
pull_reopen_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
pull_request_task_test.go Do not update PRs based on events that happened before they existed 2024-04-11 11:16:23 +02:00
pull_review_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
pull_status_test.go Enable more revive linter rules (#30608) 2024-04-28 15:39:00 +02:00
pull_summary_test.go Add test for pull summary 2024-03-22 07:11:52 +01:00
pull_test.go fix(ui): use right placeholder string in milestones search (#4628) 2024-07-25 03:33:44 +00:00
pull_update_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
pull_wip_convert_test.go Add test for add/remove WIP link display 2024-03-21 19:33:02 +05:00
README.md Add codespell support and fix a good number of typos with its help (#3270) 2024-05-09 13:49:37 +00:00
README_ZH.md [CHORE] Remove Microsoft SQL Server Support 2024-04-05 23:37:36 +02:00
release_test.go Fix localization of release/tag counters on releases page 2024-05-29 22:46:36 +05:00
remote_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
rename_branch_test.go Add codespell support and fix a good number of typos with its help (#3270) 2024-05-09 13:49:37 +00:00
repo_activity_test.go feat(UI): fix links, add labels for releases on repo activity page 2024-08-02 07:56:03 +02:00
repo_archive_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
repo_archive_text_test.go Makefile: check git diff exit-code (#2651) 2024-03-14 10:38:58 +00:00
repo_badges_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
repo_branch_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
repo_collaborator_test.go ui: fix wrong string used in a search box (#4258) 2024-06-28 16:28:03 +00:00
repo_commits_search_test.go
repo_commits_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
repo_delete_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
repo_flags_test.go
repo_fork_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
repo_generate_test.go fix: preserve object format dropdown options on /repo/create error (#4360) 2024-07-16 14:42:35 +00:00
repo_mergecommit_revert_test.go Run go generate and go vet on all packages (#30529) 2024-04-21 16:28:16 +02:00
repo_migrate_test.go
repo_migration_ui_test.go ui: refactor repo migration items 2024-07-27 16:35:48 +05:00
repo_pagination_test.go Makefile: check git diff exit-code (#2651) 2024-03-14 10:38:58 +00:00
repo_search_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
repo_settings_hook_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
repo_settings_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
repo_signed_tag_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
repo_starwatch_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
repo_tag_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
repo_test.go feat(UI): add links to icons in repository file list 2024-08-01 13:32:01 +02:00
repo_topic_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
repo_view_test.go add org readme to search with priority 2024-06-16 15:27:28 +02:00
repo_watch_test.go
repo_webhook_test.go webhook: matrix access_token helper text 2024-04-16 08:59:56 +02:00
repo_wiki_test.go feat: wiki search using git-grep 2024-05-20 13:48:50 +00:00
repofiles_change_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
session_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
setting_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
signin_test.go
signout_test.go
signup_test.go
size_translations_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
ssh_key_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
timetracking_test.go
user_avatar_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
user_count_test.go feat(UI): add package counter to repo/user/org overview pages 2024-07-31 12:40:24 +02:00
user_profile_activity_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
user_profile_follows_test.go Add headers to follower lists 2024-06-19 11:53:59 +05:00
user_profile_test.go
user_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
version_test.go Fix #2512 /api/forgejo/v1/version auth check (#2582) 2024-03-19 07:16:19 +00:00
view_test.go Update instance title in tests 2024-06-08 23:33:55 +05:00
webfinger_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
webhook_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00
xss_test.go Add testifylint to lint checks (#4535) 2024-07-30 19:41:10 +00:00

Integration tests

Integration tests can be run with make commands for the appropriate backends, namely:

make test-sqlite
make test-pgsql
make test-mysql

Make sure to perform a clean build before running tests:

make clean build

Run tests via local act_runner

Run all jobs

act_runner exec -W ./.github/workflows/pull-db-tests.yml --event=pull_request --default-actions-url="https://github.com" -i catthehacker/ubuntu:runner-latest

Warning: This file defines many jobs, so it will be resource-intensive and therefore not recommended.

Run single job

act_runner exec -W ./.github/workflows/pull-db-tests.yml --event=pull_request --default-actions-url="https://github.com" -i catthehacker/ubuntu:runner-latest -j <job_name>

You can list all job names via:

act_runner exec -W ./.github/workflows/pull-db-tests.yml --event=pull_request --default-actions-url="https://github.com" -i catthehacker/ubuntu:runner-latest -l

Run sqlite integration tests

Start tests

make test-sqlite

Run MySQL integration tests

Setup a MySQL database inside docker

docker run -e "MYSQL_DATABASE=test" -e "MYSQL_ALLOW_EMPTY_PASSWORD=yes" -p 3306:3306 --rm --name mysql mysql:latest #(just ctrl-c to stop db and clean the container)
docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --rm --name elasticsearch elasticsearch:7.6.0 #(in a second terminal, just ctrl-c to stop db and clean the container)

Start tests based on the database container

TEST_MYSQL_HOST=localhost:3306 TEST_MYSQL_DBNAME=test TEST_MYSQL_USERNAME=root TEST_MYSQL_PASSWORD='' make test-mysql

Run pgsql integration tests

Setup a pgsql database inside docker

docker run -e "POSTGRES_DB=test" -p 5432:5432 --rm --name pgsql postgres:latest #(just ctrl-c to stop db and clean the container)

Start tests based on the database container

TEST_PGSQL_HOST=localhost:5432 TEST_PGSQL_DBNAME=test TEST_PGSQL_USERNAME=postgres TEST_PGSQL_PASSWORD=postgres make test-pgsql

Running individual tests

Example command to run GPG test:

For SQLite:

make test-sqlite#GPG

For other databases (replace mysql to pgsql):

TEST_MYSQL_HOST=localhost:1433 TEST_MYSQL_DBNAME=test TEST_MYSQL_USERNAME=sa TEST_MYSQL_PASSWORD=MwantsaSecurePassword1 make test-mysql#GPG

Setting timeouts for declaring long-tests and long-flushes

We appreciate that some testing machines may not be very powerful and the default timeouts for declaring a slow test or a slow clean-up flush may not be appropriate.

You can either:

  • Within the test ini file set the following section:
[integration-tests]
SLOW_TEST = 10s ; 10s is the default value
SLOW_FLUSH = 5S ; 5s is the default value
  • Set the following environment variables:
GITEA_SLOW_TEST_TIME="10s" GITEA_SLOW_FLUSH_TIME="5s" make test-sqlite