chore: add locust files + testing setup
This commit is contained in:
@@ -1,10 +1,20 @@
|
||||
from django.conf import settings
|
||||
from django.contrib import admin
|
||||
from django.contrib.auth.admin import UserAdmin
|
||||
from django_object_actions import DjangoObjectActions, action
|
||||
|
||||
from .models import CustomUser
|
||||
|
||||
# Must match loadtest/locustfile.py's own defaults (LOAD_TEST_USER_COUNT,
|
||||
# LOAD_TEST_USER_PREFIX, LOAD_TEST_PASSWORD) - see that file for what these
|
||||
# accounts are for and how they're used.
|
||||
LOAD_TEST_USER_COUNT = 500
|
||||
LOAD_TEST_USER_PREFIX = "loadtest"
|
||||
LOAD_TEST_PASSWORD = "loadtest-only-password"
|
||||
|
||||
|
||||
@admin.register(CustomUser)
|
||||
class CustomUserAdmin(UserAdmin):
|
||||
class CustomUserAdmin(DjangoObjectActions, UserAdmin):
|
||||
"""Admin interface for CustomUser."""
|
||||
|
||||
# Add custom fields to the user admin
|
||||
@@ -29,6 +39,8 @@ class CustomUserAdmin(UserAdmin):
|
||||
# Make CAS fields readonly in admin
|
||||
readonly_fields = ("cas_user_id", "cas_groups", "cas_attributes")
|
||||
|
||||
changelist_actions = ("create_load_test_users",)
|
||||
|
||||
def get_cas_groups_display(self, obj):
|
||||
"""Display CAS groups in admin list."""
|
||||
return obj.get_cas_groups_display()
|
||||
@@ -37,3 +49,34 @@ class CustomUserAdmin(UserAdmin):
|
||||
|
||||
def has_delete_permission(self, request, obj=None):
|
||||
return False
|
||||
|
||||
def get_changelist_actions(self, request):
|
||||
# Second layer of the same guard rail as the login endpoint itself
|
||||
# (see testing_auth_views.py): the button doesn't even show up
|
||||
# unless this deployment opted into load testing.
|
||||
if not settings.LOAD_TEST_LOGIN_ENABLED:
|
||||
return []
|
||||
return super().get_changelist_actions(request)
|
||||
|
||||
@action(
|
||||
label="Create load test users",
|
||||
description=(
|
||||
"Create/reset the local loadtestN accounts used by "
|
||||
"loadtest/locustfile.py - authenticates via ModelBackend, "
|
||||
"never the real CAS server"
|
||||
),
|
||||
)
|
||||
def create_load_test_users(self, request, _queryset):
|
||||
created = 0
|
||||
for i in range(LOAD_TEST_USER_COUNT):
|
||||
username = f"{LOAD_TEST_USER_PREFIX}{i}"
|
||||
user, was_created = CustomUser.objects.get_or_create(username=username)
|
||||
user.set_password(LOAD_TEST_PASSWORD)
|
||||
user.save()
|
||||
created += was_created
|
||||
|
||||
self.message_user(
|
||||
request,
|
||||
f"{created} created, {LOAD_TEST_USER_COUNT - created} already existed "
|
||||
f"(password reset on all {LOAD_TEST_USER_COUNT}).",
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user